/* 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 FILESTREEMODEL_H #define FILESTREEMODEL_H #include #include #include #include #include #include #include "smtreemodel.h" class QSqlQuery; class SeriesTreeModel; class FilesTreeModel : public SmTreeModel { Q_OBJECT public: enum CustomRoles { FileNameRole = Qt::UserRole + 1, FullPathRole = Qt::UserRole + 2, SizeRole = Qt::UserRole + 3, DvdNoRole = Qt::UserRole + 4, SizeDisplayRole = Qt::UserRole + 5, FileTypeRole = Qt::UserRole + 6, Md5SumRole = Qt::UserRole + 7, PartNoRole = Qt::UserRole + 8, SeriesPartIdRole = Qt::UserRole + 9, QualityRole = Qt::UserRole + 10, FilesIdRole = Qt::UserRole + 11, SeriesPartRole = Qt::UserRole + 12, DisplayNameRole = Qt::UserRole + 13, SizeDurationRole = Qt::UserRole + 14, SeriesNameRole = Qt::UserRole + 15, FavoriteRole = Qt::UserRole + 16 }; enum FileTypes { Movie = 1, FrontCover = 2, BackCover = 3, GeneralCover = 4 }; enum Fields { FileName = 0, PartNo = 1, SizeDisplay = 2, Quality = 3, DvdNo = 4, FullPath = 5, Size = 6, FileType = 7, Md5Sum = 8, SeriesPartId = 9, FilesId = 10, SeriesPart = 11, DisplayName = 12, SizeDuration = 13, SeriesName = 14, Favorite = 15 }; explicit FilesTreeModel(QStringList &headers, QObject *parent = 0); const QHash fileTypes() const { return mFileTypes; } const QHash coverTypes() const { return mCoverTypes; } const QHash editableColumns() const { return mEditableColumns; } int mode() const { return mMode; } ~FilesTreeModel(); //data + flags void setIds(const QList &seriesPartIds); void setMode(int mode) { mMode = mode; } QVariant data(const QModelIndex &index, int role) const; bool setData(const QModelIndex &index, const QVariant &value, int role); Qt::ItemFlags flags(const QModelIndex &index) const; QHash filesBySeriesPartId(int seriesPartId) const; QList > streamInfo(const QModelIndex &idx) const; QList > streamInfo(const QString &path) const; QMap pictureInfo(const QString &path) const; QMap pictureInfo(const QModelIndex &idx) const; QMap pictureMetaInfo(const QModelIndex &idx); int fileType(const QString &md5sum) const; QModelIndexList fileSizeLessThan(quint64 size, quint16 limit = 1) const; //file manipulation bool addFile(const QString &fullPath, int type, int quality, int filePart, int seriesPartId, int dvd = -1); bool deleteFile(const QModelIndex &file); bool deleteFiles(const QModelIndexList &files); //misc void readCache(); void writeCache(); public slots: void readSettings(); private: //functions void populate(QSqlQuery &filesQuery); //database QSqlDatabase mDb; QSqlQuery *mUpdateDvdQuery; QSqlQuery *mUpdateQualityQuery; QSqlQuery *mUpdatePartNoQuery; QSqlQuery *mUpdateFileTypeQuery; QSqlQuery *mInsertFileQuery; QSqlQuery *mFilesQuery; QSqlQuery *mDeleteFileQuery; QSqlQuery *mFileTypeQuery; QString mFileSizeLessThanQueryTemplate; //misc QHash mFileTypes; QHash mCoverTypes; QHash mPicsDurationCache; QHash mEditableColumns; SeriesTreeModel *mSeriesModel; int mMode; const int mMagic; QColor mLocalColor; QColor mArchivedColor; QColor mFavoriteColor; qint64 mDvdSize; }; #endif // FILESTREEMODEL_H