[qet] [4323] Elements collection cache can fully fetch and cache element data from elementLocation

[ Thread Index | Date Index | More lists.tuxfamily.org/qet Archives ]


Revision: 4323
Author:   blacksun
Date:     2016-01-14 17:09:28 +0100 (Thu, 14 Jan 2016)
Log Message:
-----------
Elements collection cache can fully fetch and cache element data from elementLocation

Modified Paths:
--------------
    trunk/sources/elementscollectioncache.cpp
    trunk/sources/elementscollectioncache.h

Modified: trunk/sources/elementscollectioncache.cpp
===================================================================
--- trunk/sources/elementscollectioncache.cpp	2016-01-14 12:25:54 UTC (rev 4322)
+++ trunk/sources/elementscollectioncache.cpp	2016-01-14 16:09:28 UTC (rev 4323)
@@ -21,9 +21,12 @@
 #include "elementdefinition.h"
 #include "factory/elementfactory.h"
 #include "element.h"
-#include <QImageWriter>
 #include "qet.h"
 
+#include <QImageWriter>
+#include <QSqlQuery>
+#include <QSqlError>
+
 /**
 	Construct a cache for elements collections.
 	@param database_path Path of the SQLite database to open.
@@ -215,12 +218,21 @@
 	}
 }
 
+/**
+ * @brief ElementsCollectionCache::fetchElement
+ * Retrieve the data for a given element, using the cache if available,
+ * filling it otherwise. Data are then available through pixmap() and name() methods
+ * @param location The definition of an element
+ * @see pixmap()
+ * @see name()
+ * @return True if the retrieval succeeded, false otherwise
+ */
 bool ElementsCollectionCache::fetchElement(ElementLocation location)
 {
 	if (fetchNameFromCache(location.collectionPath(), location.uuid()) &&
 		fetchPixmapFromCache(location.collectionPath(), location.uuid()))
 		return true;
-	else if (fetchData(ElementsLocation(location.collectionPath())))
+	else if (fetchData(location))
 	{
 		cacheName(location.collectionPath(), location.uuid());
 		cachePixmap(location.collectionPath(), location.uuid());
@@ -264,6 +276,30 @@
 }
 
 /**
+ * @brief ElementsCollectionCache::fetchData
+ * Retrieve the data by building the full CustomElement object matching the given location,
+ * without using the cache. Data are then available through pixmap() and name() methods
+ * @param location : location of a given element
+ * @return  True if the retrieval succeeded, false otherwise
+ */
+bool ElementsCollectionCache::fetchData(ElementLocation &location)
+{
+	int state;
+	Element *element = ElementFactory::Instance()->createElement(location, 0, &state);
+
+	if(state)
+		qDebug() << "ElementsCollectionCache::fetchData() 2: Le chargement du composant" << qPrintable(location.fileSystemPath()) << "a echoue avec le code d'erreur" << state;
+	else
+	{
+		current_name_ = element->name();
+		current_pixmap_ = element->pixmap();
+	}
+
+	delete element;
+	return (!state);
+}
+
+/**
  * @brief ElementsCollectionCache::fetchNameFromCache
  * Retrieve the name for an element, given its path and uuid
  * The value is then available through the name() method.

Modified: trunk/sources/elementscollectioncache.h
===================================================================
--- trunk/sources/elementscollectioncache.h	2016-01-14 12:25:54 UTC (rev 4322)
+++ trunk/sources/elementscollectioncache.h	2016-01-14 16:09:28 UTC (rev 4323)
@@ -17,10 +17,11 @@
 */
 #ifndef ELEMENTS_COLLECTION_CACHE_H
 #define ELEMENTS_COLLECTION_CACHE_H
-#include <QtCore>
-#include <QtSql>
+
+#include <QSqlDatabase>
 #include "elementslocation.h"
 #include "elementlocation.h"
+
 class ElementsCollection;
 class ElementsCategory;
 class ElementDefinition;
@@ -50,6 +51,7 @@
 	QString name() const;
 	QPixmap pixmap() const;
 	bool fetchData(const ElementsLocation &);
+	bool fetchData(ElementLocation &location);
 	bool fetchNameFromCache(const QString &path, const QUuid &uuid);
 	bool fetchPixmapFromCache(const QString &path, const QUuid &uuid);
 	bool cacheName(const QString &path, const QUuid &uuid = QUuid::createUuid());


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/