/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #ifndef ARCHIVEMODEL_H #define ARCHIVEMODEL_H #include #include #include #include "smtreemodel.h" class ArchiveCollector; class ArchiveModel : public SmTreeModel { Q_OBJECT public: enum CustomRoles { NameRole = Qt::UserRole + 1, SeriesIdRole = Qt::UserRole + 2, SeriesPartIdRole = Qt::UserRole + 3, SeriesPartRole = Qt::UserRole + 4, TypeRole = Qt::UserRole + 5, FavoriteRole = Qt::UserRole + 6, SubtitleRole = Qt::UserRole + 7, CountRole = Qt::UserRole + 8 }; enum Fields { Name = 0, GenericId = 1, SeriesPartId = 2, SeriesPart = 3, Type = 4, Favorite = 5, Subtitle = 6, Count = 7 }; enum Order { SeriesName, Actor, Genre, NoOrder }; enum { NumFields = 8 }; enum NodeType { SeriesNode, SeriesPartNode, GenreNode, ActorNode }; 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; 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(); void populateByActor(); void fetchChildren(SmTreeItem *parent); void fetchSeries(const QVariant &id, SmTreeItem *parent); void fetchParts(const QVariant &id, SmTreeItem *parent); QSqlDatabase mDb; SmTreeItem *mRootItem; int mNumFields; int mSortOrder; }; #endif // ARCHIVEMODEL_H