/* 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 SERIESTREEMODEL_H #define SERIESTREEMODEL_H #include #include #include #include #include "smtreemodel.h" class QSqlQuery; class SeriesTreeModel : 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, IsLocalRole = Qt::UserRole + 8 }; enum Fields { Name = 0, SeriesId = 1, SeriesPartId = 2, SeriesPart = 3, Type = 4, Favorite = 5, Subtitle = 6, IsLocal = 7 }; enum Types { Series, Part, NewSeries }; enum QueryType { NumericQuery, TextQuery }; enum { NumFields = 8 }; enum RowFilter { All = 0, Archived = 1, Local = 2 }; explicit SeriesTreeModel(QStringList &headers, QObject *parent = 0); ~SeriesTreeModel(); //data + flags Qt::ItemFlags flags(const QModelIndex &index) const; QVariant data(const QModelIndex &index, int role) const; bool setData(const QModelIndex &index, const QVariant &value, int role); QList childrenColumnList(const QModelIndex &parent, int column) const; int rowFilter() const { return mRowFilter; } void setRowFilter(int rowFilter) { mRowFilter = rowFilter; } //find QModelIndex findValue(const QVariant &value, const QModelIndex &parent = QModelIndex(), int searchColumn = 0, int indexColumn = -1) const; QFileInfoList findFiles(const QModelIndex &where) const; QFileInfoList findMovies(const QModelIndexList &from) const; QFileInfoList findSortedMovies(const QModelIndex &from) const; bool hasLocals(int sPartId) const; int seriesIdByPartId(int partId); int findNextDvdNo() const; //series data manipulation bool deleteFromSeries(const QModelIndex &what); bool addSeries(const QVariant &seriesName, const QModelIndex &parent); bool addSeriesPart(int seriesPart, const QModelIndex &parent, const QString &subTitle); //filter void clearFilter(); void setMappingFilter(const QString &filter, const QString &table); void setFileFilter(const QString &filter, const QString &column, int queryType); void setFavoriteFilter(); signals: void needResort(); void consistencyMsg(const QString &msg); void localsChanged(); public slots: void readSettings(); void conditionalUpdate(const QModelIndex &parent, int field, const QVariant &value); private: void populate(); bool mergeSeries(const QModelIndex &from, const QModelIndex &to); bool renameSeries(const QModelIndex &source, const QVariant &value); bool setNewSeries(const QModelIndex &source, const QVariant &value); bool updateGeneric(const QModelIndex &source, const QVariant &value); bool setLocal(const QModelIndex &source, const QVariant &value); QString archivePath(const QString &fileName, const QString &md5sum) const; QSqlDatabase mDb; QSqlQuery *mSeriesPartsQuery; QSqlQuery *mUpdateSeriesIdQuery; QSqlQuery *mUpdateSeriesNameQuery; QSqlQuery *mUpdateFavoriteQuery; QSqlQuery *mUpdateSubtitleQuery; QSqlQuery *mDeleteSeriesQuery; QSqlQuery *mDeleteSeriesPartQuery; QSqlQuery *mSeriesInsertQuery; QSqlQuery *mSeriesFilesQuery; QSqlQuery *mSeriesPartFilesQuery; QSqlQuery *mSeriesPartInsertQuery; QSqlQuery *mSortedMovieListQuery; QSqlQuery *mNextDvdNoQuery; QSqlQuery *mGenreFilterQuery; QSqlQuery *mFavoriteSeriesIdQuery; QSqlQuery *mFavoriteSeriesPartsQuery; QSqlQuery *mIsLocalQuery; QHash mSeriesPartSeriesMap; QHash mUpdateGenericMap; QColor mFavoriteColor; QString mUpdateGenericTemplate; int mRowFilter; }; #endif // SERIESTREEMODEL_H