From 6fec376f7f44145efa509668927a0179c8ffa65e Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 1 Jun 2013 22:52:19 +0200 Subject: Gather archive data in a thread Fetching data sometimes takes a long time, so do it in a QThread and show a progress dialog. Some kludges included :) --- archivemodel.h | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) (limited to 'archivemodel.h') diff --git a/archivemodel.h b/archivemodel.h index 1f39717..c07fc7b 100644 --- a/archivemodel.h +++ b/archivemodel.h @@ -8,11 +8,14 @@ #ifndef ARCHIVEMODEL_H #define ARCHIVEMODEL_H -#include #include +#include +#include #include "smtreemodel.h" +class ArchiveCollector; + class ArchiveModel : public SmTreeModel { Q_OBJECT public: @@ -24,14 +27,38 @@ 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; - signals: - public slots: void setOrder(int order); void setOrder(const QString &order); + private slots: + void collectorFinished(); + + private: + QSqlDatabase mDb; + QHash mAvailableOrders; + ArchiveCollector *mCollector; + int mOrder; +}; + +class ArchiveCollector : public QThread { + Q_OBJECT + public: + explicit ArchiveCollector(int numFields, QObject *parent = 0); + SmTreeItem *rootItem() { return mRootItem; } + + public slots: + void populate(int order, SmTreeItem *rootItem); + + signals: + void message(const QString message); + + protected: + virtual void run(); + private: void populateBySeriesName(); void populateByGenre(); @@ -40,8 +67,9 @@ class ArchiveModel : public SmTreeModel { void fetchSeries(const QVariant &id, SmTreeItem *parent); void fetchParts(const QVariant &id, SmTreeItem *parent); QSqlDatabase mDb; - QHash mAvailableOrders; - int mOrder; + SmTreeItem *mRootItem; + int mNumFields; + int mSortOrder; }; #endif // ARCHIVEMODEL_H -- cgit v1.2.3-70-g09d2