1 #ifndef TABLEMODEL_H 2 #define TABLEMODEL_H 3 4 #include <QAbstractItemModel> 5 #include <QModelIndex> 6 #include <QVariant> 7 #include <QSqlQuery> 8 #include <QSqlDatabase> 9 #include <QUrl> 10 11 #include "yacreader_global_gui.h" 12 13 class ComicDB; 14 15 class ComicItem; 16 17 using namespace YACReader; 18 19 class ComicModel : public QAbstractItemModel 20 { 21 Q_OBJECT 22 23 public: 24 enum Columns { 25 Number = 0, 26 Title = 1, 27 FileName = 2, 28 NumPages = 3, 29 Id = 4, 30 Parent_Id = 5, 31 Path = 6, 32 Hash = 7, 33 ReadColumn = 8, 34 IsBis = 9, 35 CurrentPage = 10, 36 Rating = 11, 37 HasBeenOpened = 12 38 }; 39 40 enum Roles { 41 NumberRole = Qt::UserRole + 1, 42 TitleRole, 43 FileNameRole, 44 NumPagesRole, 45 IdRole, 46 Parent_IdRole, 47 PathRole, 48 HashRole, 49 ReadColumnRole, 50 IsBisRole, 51 CurrentPageRole, 52 RatingRole, 53 HasBeenOpenedRole, 54 CoverPathRole 55 56 }; 57 58 enum Mode { 59 Folder, 60 Favorites, 61 Reading, 62 Label, 63 ReadingList 64 }; 65 66 public: 67 explicit ComicModel(QObject *parent = nullptr); 68 explicit ComicModel(QSqlQuery &sqlquery, QObject *parent = nullptr); 69 ~ComicModel() override; 70 71 QVariant data(const QModelIndex &index, int role) const override; 72 Qt::ItemFlags flags(const QModelIndex &index) const override; 73 QVariant headerData(int section, Qt::Orientation orientation, 74 int role = Qt::DisplayRole) const override; 75 QModelIndex index(int row, int column, 76 const QModelIndex &parent = QModelIndex()) const override; 77 QModelIndex parent(const QModelIndex &index) const override; 78 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 79 int columnCount(const QModelIndex &parent = QModelIndex()) const override; 80 bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const override; 81 bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override; 82 bool canBeResorted(); 83 QMimeData *mimeData(const QModelIndexList &indexes) const override; 84 QStringList mimeTypes() const override; 85 86 void setupFolderModelData(unsigned long long int parentFolder, const QString &databasePath); 87 void setupLabelModelData(unsigned long long int parentLabel, const QString &databasePath); 88 void setupReadingListModelData(unsigned long long int parentReadingList, const QString &databasePath); 89 void setupFavoritesModelData(const QString &databasePath); 90 void setupReadingModelData(const QString &databasePath); 91 92 //Métodos de conveniencia 93 QStringList getPaths(const QString &_source); 94 QString getComicPath(QModelIndex mi); getCurrentPath()95 QString getCurrentPath() { return QString(_databasePath).remove("/.yacreaderlibrary"); } 96 ComicDB getComic(const QModelIndex &mi); //--> para la edición 97 //ComicDB getComic(int row); 98 QVector<YACReaderComicReadStatus> getReadList(); 99 QVector<YACReaderComicReadStatus> setAllComicsRead(YACReaderComicReadStatus readStatus); 100 QList<ComicDB> getComics(QList<QModelIndex> list); //--> recupera la información común a los comics seleccionados 101 QList<ComicDB> getAllComics(); 102 QModelIndex getIndexFromId(quint64 id); 103 QList<QModelIndex> getIndexesFromIds(const QList<qulonglong> &comicIds); 104 //setcomicInfo(QModelIndex & mi); --> inserta en la base datos 105 //setComicInfoForAllComics(); --> inserta la información común a todos los cómics de una sola vez. 106 //setComicInfoForSelectedComis(QList<QModelIndex> list); -->inserta la información común para los comics seleccionados 107 QVector<YACReaderComicReadStatus> setComicsRead(QList<QModelIndex> list, YACReaderComicReadStatus read); 108 void setComicsManga(QList<QModelIndex> list, bool isManga); 109 qint64 asignNumbers(QList<QModelIndex> list, int startingNumber); 110 //void remove(ComicDB * comic, int row); 111 void removeInTransaction(int row); 112 void reload(const ComicDB &comic); 113 void resetComicRating(const QModelIndex &mi); 114 115 Q_INVOKABLE QUrl getCoverUrlPathForComicHash(const QString &hash) const; 116 117 void addComicsToFavorites(const QList<QModelIndex> &comicsList); 118 void addComicsToLabel(const QList<QModelIndex> &comicsList, qulonglong labelId); 119 void addComicsToReadingList(const QList<QModelIndex> &comicsList, qulonglong readingListId); 120 121 void deleteComicsFromFavorites(const QList<QModelIndex> &comicsList); 122 void deleteComicsFromReading(const QList<QModelIndex> &comicsList); 123 void deleteComicsFromSpecialList(const QList<QModelIndex> &comicsList, qulonglong specialListId); 124 void deleteComicsFromLabel(const QList<QModelIndex> &comicsList, qulonglong labelId); 125 void deleteComicsFromReadingList(const QList<QModelIndex> &comicsList, qulonglong readingListId); 126 127 void deleteComicsFromModel(const QList<QModelIndex> &comicsList); 128 129 bool isFavorite(const QModelIndex &index); 130 getMode()131 ComicModel::Mode getMode() { return mode; } getSourceId()132 unsigned long long int getSourceId() { return sourceId; } 133 134 QHash<int, QByteArray> roleNames() const override; 135 136 public slots: 137 void remove(int row); 138 void startTransaction(); 139 void finishTransaction(); 140 void updateRating(int rating, QModelIndex mi); 141 142 void addComicsToFavorites(const QList<qulonglong> &comicIds); 143 void addComicsToLabel(const QList<qulonglong> &comicIds, qulonglong labelId); 144 void addComicsToReadingList(const QList<qulonglong> &comicIds, qulonglong readingListId); 145 146 void setModelData(QList<ComicItem *> *data, const QString &databasePath); 147 148 protected: 149 private: 150 void setupModelData(QSqlQuery &sqlquery); 151 void setupModelDataForList(QSqlQuery &sqlquery); 152 ComicDB _getComic(const QModelIndex &mi); 153 QList<ComicItem *> _data; 154 155 QString _databasePath; 156 QString _databaseConnection; 157 158 bool enableResorting; 159 Mode mode; 160 qulonglong sourceId; 161 162 signals: 163 void beforeReset(); 164 void reset(); 165 void isEmpty(); 166 void searchNumResults(int); 167 void resortedIndexes(QList<int>); 168 void newSelectedIndex(const QModelIndex &); 169 }; 170 171 #endif 172