diff --git a/YACReaderLibrary/db/comic_model.cpp b/YACReaderLibrary/db/comic_model.cpp index ba4aeffa..7964ca9a 100644 --- a/YACReaderLibrary/db/comic_model.cpp +++ b/YACReaderLibrary/db/comic_model.cpp @@ -43,7 +43,7 @@ int ComicModel::columnCount(const QModelIndex &parent) const Q_UNUSED(parent) if (_data.isEmpty()) return 0; - return _data.first()->columnCount(); + return _data.first()->columnCount() + 1 /* + the number of calculated columns */; } bool ComicModel::canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const @@ -238,7 +238,6 @@ QHash ComicModel::roleNames() const roles[PathRole] = "path"; roles[HashRole] = "hash"; roles[ReadColumnRole] = "read_column"; - roles[IsBisRole] = "is_bis"; roles[CurrentPageRole] = "current_page"; roles[RatingRole] = "rating"; roles[HasBeenOpenedRole] = "has_been_opened"; @@ -249,6 +248,10 @@ QHash ComicModel::roleNames() const roles[TypeRole] = "type"; roles[ShowRecentRole] = "show_recent"; roles[RecentRangeRole] = "recent_range"; + roles[SizeRole] = "size"; + roles[SeriesRole] = "series"; + roles[VolumeRole] = "volume"; + roles[StoryArcRole] = "story_arc"; return roles; } @@ -269,7 +272,7 @@ QVariant ComicModel::data(const QModelIndex &index, int role) const return QVariant(Qt::AlignRight | Qt::AlignVCenter); case ComicModel::NumPages: return QVariant(Qt::AlignRight | Qt::AlignVCenter); - case ComicModel::Hash: + case ComicModel::Size: return QVariant(Qt::AlignRight | Qt::AlignVCenter); case ComicModel::CurrentPage: return QVariant(Qt::AlignRight | Qt::AlignVCenter); @@ -283,6 +286,10 @@ QVariant ComicModel::data(const QModelIndex &index, int role) const auto item = static_cast(index.internalPointer()); + auto sizeString = [=] { + return QString::number(item->data(ComicModel::Hash).toString().right(item->data(ComicModel::Hash).toString().length() - 40).toInt() / 1024.0 / 1024.0, 'f', 2) + "Mb"; + }; + if (role == NumberRole) return item->data(Number); else if (role == TitleRole) @@ -306,7 +313,7 @@ QVariant ComicModel::data(const QModelIndex &index, int role) const else if (role == ReadColumnRole) return item->data(ReadColumn).toBool(); else if (role == HasBeenOpenedRole) - return item->data(ComicModel::HasBeenOpened); + return item->data(HasBeenOpened); else if (role == IdRole) return item->data(Id); else if (role == PublicationDateRole) @@ -317,14 +324,24 @@ QVariant ComicModel::data(const QModelIndex &index, int role) const return item->data(Type); else if (role == ShowRecentRole) return showRecent; - else if (role == ComicModel::RecentRangeRole) + else if (role == RecentRangeRole) return recentDays * 86400; + else if (role == SizeRole) + return sizeString(); + else if (role == SeriesRole) + return item->data(Series); + else if (role == VolumeRole) + return item->data(Volume); + else if (role == StoryArcRole) + return item->data(StoryArc); if (role != Qt::DisplayRole) return QVariant(); if (index.column() == ComicModel::Hash) - return QString::number(item->data(index.column()).toString().right(item->data(index.column()).toString().length() - 40).toInt() / 1024.0 / 1024.0, 'f', 2) + "Mb"; + return item->data(ComicModel::Hash).toString(); + if (index.column() == ComicModel::Size) + return sizeString(); if (index.column() == ComicModel::ReadColumn) return (item->data(ComicModel::CurrentPage).toInt() == item->data(ComicModel::NumPages).toInt() || item->data(ComicModel::ReadColumn).toBool()) ? QVariant(tr("yes")) : QVariant(tr("no")); if (index.column() == ComicModel::CurrentPage) @@ -353,8 +370,7 @@ QVariant ComicModel::headerData(int section, Qt::Orientation orientation, int role) const { if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { - switch (section) // TODO obtener esto de la query - { + switch (section) { case ComicModel::Number: return QVariant(QString("#")); case ComicModel::Title: @@ -363,7 +379,7 @@ QVariant ComicModel::headerData(int section, Qt::Orientation orientation, return QVariant(QString(tr("File Name"))); case ComicModel::NumPages: return QVariant(QString(tr("Pages"))); - case ComicModel::Hash: + case ComicModel::Size: return QVariant(QString(tr("Size"))); case ComicModel::ReadColumn: return QVariant(QString(tr("Read"))); @@ -373,17 +389,22 @@ QVariant ComicModel::headerData(int section, Qt::Orientation orientation, return QVariant(QString(tr("Publication Date"))); case ComicModel::Rating: return QVariant(QString(tr("Rating"))); + case ComicModel::Series: + return QVariant(QString(tr("Series"))); + case ComicModel::Volume: + return QVariant(QString(tr("Volume"))); + case ComicModel::StoryArc: + return QVariant(QString(tr("Story Arc"))); } } if (orientation == Qt::Horizontal && role == Qt::TextAlignmentRole) { - switch (section) // TODO obtener esto de la query - { + switch (section) { case ComicModel::Number: return QVariant(Qt::AlignRight | Qt::AlignVCenter); case ComicModel::NumPages: return QVariant(Qt::AlignRight | Qt::AlignVCenter); - case ComicModel::Hash: + case ComicModel::Size: return QVariant(Qt::AlignRight | Qt::AlignVCenter); case ComicModel::CurrentPage: return QVariant(Qt::AlignRight | Qt::AlignVCenter); @@ -461,7 +482,7 @@ QStringList ComicModel::getPaths(const QString &_source) return paths; } -#define COMIC_MODEL_QUERY_FIELDS "ci.number,ci.title,c.fileName,ci.numPages,c.id,c.parentId,c.path,ci.hash,ci.read,ci.isBis,ci.currentPage,ci.rating,ci.hasBeenOpened,ci.date,ci.added,ci.type,ci.lastTimeOpened" +#define COMIC_MODEL_QUERY_FIELDS "ci.number,ci.title,c.fileName,ci.numPages,c.id,c.parentId,c.path,ci.hash,ci.read,ci.currentPage,ci.rating,ci.hasBeenOpened,ci.date,ci.added,ci.type,ci.lastTimeOpened,ci.series,ci.volume,ci.storyArc" QList ComicModel::createFolderModelData(unsigned long long folderId, const QString &databasePath) const { diff --git a/YACReaderLibrary/db/comic_model.h b/YACReaderLibrary/db/comic_model.h index fbb6416f..d82b8369 100644 --- a/YACReaderLibrary/db/comic_model.h +++ b/YACReaderLibrary/db/comic_model.h @@ -23,22 +23,28 @@ class ComicModel : public QAbstractItemModel public: enum Columns { Number = 0, - Title = 1, - FileName = 2, - NumPages = 3, - Id = 4, - Parent_Id = 5, - Path = 6, - Hash = 7, - ReadColumn = 8, - IsBis = 9, // TODO_METADATA: Remove this column - CurrentPage = 10, - Rating = 11, - HasBeenOpened = 12, - PublicationDate = 13, - Added = 14, - Type = 15, - LastTimeOpened = 16, + Title, + FileName, + NumPages, + Id, + Parent_Id, + Path, + Hash, + ReadColumn, + CurrentPage, + Rating, + HasBeenOpened, + PublicationDate, + Added, + Type, + LastTimeOpened, + Series, + Volume, + StoryArc, + }; + + enum CalculatedColumns { + Size = Columns::StoryArc + 1, }; enum Roles { @@ -51,7 +57,6 @@ public: PathRole, HashRole, ReadColumnRole, - IsBisRole, CurrentPageRole, RatingRole, HasBeenOpenedRole, @@ -62,6 +67,10 @@ public: TypeRole, ShowRecentRole, RecentRangeRole, + SizeRole, + SeriesRole, + VolumeRole, + StoryArcRole, }; enum Mode {