From 1e247c6fea51dab6815e3a15f22cd08e56039e89 Mon Sep 17 00:00:00 2001 From: Arno Date: Sun, 23 Jun 2013 05:47:10 +0200 Subject: Make the archive cache useful Read the cache if there is one, if not, read it in another thread and update the view when it's done. --- archivemodel.h | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'archivemodel.h') diff --git a/archivemodel.h b/archivemodel.h index 0e3e29c..c24c130 100644 --- a/archivemodel.h +++ b/archivemodel.h @@ -29,7 +29,6 @@ class ArchiveModel : public SmTreeModel { explicit ArchiveModel(const QStringList &headers, QObject *parent = 0); const QStringList availableOrders() const; const QHash availableOrdersHash() const { return mAvailableOrders; } - ArchiveCollector *collector() { return mCollector; } virtual QVariant data(const QModelIndex &index, int role) const; virtual bool setData(const QModelIndex &idx, const QVariant &value, int role); virtual bool matchRecursive(const QModelIndex &parent, const QRegExp ®ex, int column = 0) const; @@ -40,6 +39,7 @@ class ArchiveModel : public SmTreeModel { signals: void needRefresh(); void databaseError(const QString &error); + void message(const QString &msg); public slots: void setOrder(int order); @@ -47,12 +47,12 @@ class ArchiveModel : public SmTreeModel { void refresh(); private slots: - void collectorFinished(); + void collectorFinished(QObject *thread); private: bool checkParents(const SmTreeItem *item, const QRegExp ®ex, int column) const; void emitDatabaseError(const QSqlError &e); - void writeCache(int o); + void writeCache(int o, SmTreeItem *rItem); void writeRecursive(SmTreeItem *start, QDataStream &stream); void writeItem(SmTreeItem *item, QDataStream &stream); SmTreeItem *readCache(int o); @@ -60,19 +60,17 @@ class ArchiveModel : public SmTreeModel { const QString cacheFile(int o) const; QSqlDatabase mDb; QHash mAvailableOrders; - ArchiveCollector *mCollector; + QMutex mDoneMx; + QList mCollectors; int mOrder; }; class ArchiveCollector : public QThread { Q_OBJECT public: - explicit ArchiveCollector(int numFields, QObject *parent = 0); - SmTreeItem *rootItem(); - int sortOrder(); - - public slots: - void populate(int order, SmTreeItem *rootItem); + explicit ArchiveCollector(int numFields, int order, QObject *parent = 0); + SmTreeItem *rootItem() { return mRootItem; } + int sortOrder() const { return mSortOrder; } signals: void message(const QString message); -- cgit v1.2.3-70-g09d2