Add new fields to the DB and make then available to be used in the apps

This commit is contained in:
Luis Ángel San Martín
2023-05-12 16:59:23 +02:00
parent 830d8d911f
commit f2bf53ce5b
23 changed files with 957 additions and 591 deletions

View File

@ -118,6 +118,51 @@ QString ComicDB::toTXT()
if (!info.lastTimeOpened.isNull())
txt.append(QString("lastTimeOpened:%1\r\n").arg(info.lastTimeOpened.toULongLong()));
if (!info.added.isNull())
txt.append(QString("added:%1\r\n").arg(info.added.toULongLong()));
if (!info.type.isNull())
txt.append(QString("type:%1\r\n").arg(info.type.toInt()));
if (!info.editor.isNull())
txt.append(QString("editor:%1\r\n").arg(info.editor.toString()));
if (!info.imprint.isNull())
txt.append(QString("imprint:%1\r\n").arg(info.imprint.toString()));
if (!info.teams.isNull())
txt.append(QString("teams:%1\r\n").arg(info.teams.toString()));
if (!info.locations.isNull())
txt.append(QString("locations:%1\r\n").arg(info.locations.toString()));
if (!info.series.isNull())
txt.append(QString("series:%1\r\n").arg(info.series.toString()));
if (!info.alternateSeries.isNull())
txt.append(QString("alternateSeries:%1\r\n").arg(info.alternateSeries.toString()));
if (!info.alternateNumber.isNull())
txt.append(QString("alternateNumber:%1\r\n").arg(info.alternateNumber.toString()));
if (!info.alternateCount.isNull())
txt.append(QString("alternateCount:%1\r\n").arg(info.alternateCount.toString()));
if (!info.languageISO.isNull())
txt.append(QString("languageISO:%1\r\n").arg(info.languageISO.toString()));
if (!info.seriesGroup.isNull())
txt.append(QString("seriesGroup:%1\r\n").arg(info.seriesGroup.toString()));
if (!info.mainCharacterOrTeam.isNull())
txt.append(QString("mainCharacterOrTeam:%1\r\n").arg(info.mainCharacterOrTeam.toString()));
if (!info.review.isNull())
txt.append(QString("review:%1\r\n").arg(info.review.toString()));
if (!info.tags.isNull())
txt.append(QString("tags:%1\r\n").arg(info.tags.toString()));
return txt;
}
@ -238,6 +283,22 @@ void ComicInfo::deleteMetadata()
characters = QVariant();
notes = QVariant();
// type = QVariant(); reset or not???
editor = QVariant();
imprint = QVariant();
teams = QVariant();
locations = QVariant();
series = QVariant();
alternateSeries = QVariant();
alternateNumber = QVariant();
alternateCount = QVariant();
languageISO = QVariant();
seriesGroup = QVariant();
mainCharacterOrTeam = QVariant();
review = QVariant();
// tags = QVariant(); reset or not???
comicVineID = QVariant();
}
// the default operator= should work
@ -292,135 +353,25 @@ ComicInfo &ComicInfo::operator=(const ComicInfo &comicInfo)
coverSizeRatio = comicInfo.coverSizeRatio;
originalCoverSize = comicInfo.originalCoverSize;
added = comicInfo.added;
type = comicInfo.type;
editor = comicInfo.editor;
imprint = comicInfo.imprint;
teams = comicInfo.teams;
locations = comicInfo.locations;
series = comicInfo.series;
alternateSeries = comicInfo.alternateSeries;
alternateNumber = comicInfo.alternateNumber;
alternateCount = comicInfo.alternateCount;
languageISO = comicInfo.languageISO;
seriesGroup = comicInfo.seriesGroup;
mainCharacterOrTeam = comicInfo.mainCharacterOrTeam;
review = comicInfo.review;
tags = comicInfo.tags;
return *this;
}
// set fields
/*
void ComicInfo::setTitle(QString value)
{
setValue(title,value);
}
void ComicInfo::setCoverPage(int value)
{
setValue(coverPage,value);
}
void ComicInfo::setNumPages(int value)
{
setValue(numPages,value);
}
void ComicInfo::setNumber(int value)
{
setValue(number,value);
}
void ComicInfo::setIsBis(bool value)
{
setValue(isBis,value);
}
void ComicInfo::setCount(int value)
{
setValue(count,value);
}
void ComicInfo::setVolume(QString value)
{
setValue(volume,value);
}
void ComicInfo::setStoryArc(QString value)
{
setValue(storyArc,value);
}
void ComicInfo::setArcNumber(int value)
{
setValue(arcNumber,value);
}
void ComicInfo::setArcCount(int value)
{
setValue(arcCount,value);
}
void ComicInfo::setGenere(QString value)
{
setValue(genere,value);
}
void ComicInfo::setWriter(QString value)
{
setValue(writer,value);
}
void ComicInfo::setPenciller(QString value)
{
setValue(penciller,value);
}
void ComicInfo::setInker(QString value)
{
setValue(inker,value);
}
void ComicInfo::setColorist(QString value)
{
setValue(colorist,value);
}
void ComicInfo::setLetterer(QString value)
{
setValue(letterer,value);
}
void ComicInfo::setCoverArtist(QString value)
{
setValue(coverArtist,value);
}
void ComicInfo::setDate(QString value)
{
setValue(date,value);
}
void ComicInfo::setPublisher(QString value)
{
setValue(publisher,value);
}
void ComicInfo::setFormat(QString value)
{
setValue(format,value);
}
void ComicInfo::setColor(bool value)
{
setValue(color,value);
}
void ComicInfo::setAgeRating(QString value)
{
setValue(ageRating,value);
}
void ComicInfo::setSynopsis(QString value)
{
setValue(synopsis,value);
}
void ComicInfo::setCharacters(QString value)
{
setValue(characters,value);
}
void ComicInfo::setNotes(QString value)
{
setValue(notes,value);
}*/
QPixmap ComicInfo::getCover(const QString &basePath)
{
if (cover.isNull()) {
@ -494,6 +445,33 @@ QStringList ComicInfo::getCharacters()
return QStringList();
}
QStringList ComicInfo::getTeams()
{
if (teams.toString().length() > 0) {
return teams.toString().split("\n");
}
return QStringList();
}
QStringList ComicInfo::getLocations()
{
if (locations.toString().length() > 0) {
return locations.toString().split("\n");
}
return QStringList();
}
QStringList ComicInfo::getTags()
{
if (tags.toString().length() > 0) {
return tags.toString().split("\n");
}
return QStringList();
}
void ComicInfo::setRead(bool r)
{
if (r != read) {
@ -599,6 +577,24 @@ QDataStream &operator<<(QDataStream &stream, const ComicInfo &comicInfo)
stream << comicInfo.coverSizeRatio;
stream << comicInfo.originalCoverSize;
stream << comicInfo.added;
stream << comicInfo.type;
stream << comicInfo.added;
stream << comicInfo.type;
stream << comicInfo.editor;
stream << comicInfo.imprint;
stream << comicInfo.teams;
stream << comicInfo.locations;
stream << comicInfo.series;
stream << comicInfo.alternateSeries;
stream << comicInfo.alternateNumber;
stream << comicInfo.alternateCount;
stream << comicInfo.languageISO;
stream << comicInfo.seriesGroup;
stream << comicInfo.mainCharacterOrTeam;
stream << comicInfo.review;
stream << comicInfo.tags;
return stream;
}
@ -661,5 +657,23 @@ QDataStream &operator>>(QDataStream &stream, ComicInfo &comicInfo)
stream >> comicInfo.coverSizeRatio;
stream >> comicInfo.originalCoverSize;
stream >> comicInfo.added;
stream >> comicInfo.type;
stream >> comicInfo.added;
stream >> comicInfo.type;
stream >> comicInfo.editor;
stream >> comicInfo.imprint;
stream >> comicInfo.teams;
stream >> comicInfo.locations;
stream >> comicInfo.series;
stream >> comicInfo.alternateSeries;
stream >> comicInfo.alternateNumber;
stream >> comicInfo.alternateCount;
stream >> comicInfo.languageISO;
stream >> comicInfo.seriesGroup;
stream >> comicInfo.mainCharacterOrTeam;
stream >> comicInfo.review;
stream >> comicInfo.tags;
return stream;
}

View File

@ -33,7 +33,7 @@ public:
QString hash;
bool existOnDb;
int rating;
int rating; // TODO_METADATA: change to float
bool hasBeenOpened;
@ -52,13 +52,13 @@ public:
QVariant coverPage; // int
QVariant numPages; // int
QVariant number; // int
QVariant number; // string (changed in 9.13 from int)
QVariant isBis; // bool
QVariant count; // int
QVariant volume; // string
QVariant storyArc; // string
QVariant arcNumber; // int
QVariant arcNumber; // string (changed in 9.13 from int)
QVariant arcCount; // int
QVariant genere; // string
@ -80,7 +80,7 @@ public:
QVariant format; // string
QVariant color; // bool
QVariant ageRating; // string
QVariant manga; // bool
[[deprecated("use type instead")]] QVariant manga; // bool
QVariant synopsis; // string
QVariant characters; // string
@ -94,38 +94,21 @@ public:
QVariant coverSizeRatio; // h/w
QVariant originalCoverSize; // string "WxH"
/*void setTitle(QVariant value);
void setCoverPage(QVariant value);
void setNumPages(QVariant value);
void setNumber(QVariant value);
void setIsBis(QVariant value);
void setCount(QVariant value);
void setVolume(QVariant value);
void setStoryArc(QVariant value);
void setArcNumber(QVariant value);
void setArcCount(QVariant value);
void setGenere(QVariant value);
void setWriter(QVariant value);
void setPenciller(QVariant value);
void setInker(QVariant value);
void setColorist(QVariant value);
void setLetterer(QVariant value);
void setCoverArtist(QVariant value);
void setDate(QVariant value);
void setPublisher(QVariant value);
void setFormat(QVariant value);
void setColor(QVariant value);
void setAgeRating(QVariant value);
void setSynopsis(QVariant value);
void setCharacters(QVariant value);
void setNotes(QVariant value);*/
QVariant added; // integer/date
QVariant type; // enum
QVariant editor; // string
QVariant imprint; // string
QVariant teams; // string/list
QVariant locations; // string/list
QVariant series; // string
QVariant alternateSeries; // string
QVariant alternateNumber; // string
QVariant alternateCount; // int
QVariant languageISO; // string
QVariant seriesGroup; // string
QVariant mainCharacterOrTeam; // string
QVariant review; // string
QVariant tags; // string/list
QPixmap getCover(const QString &basePath);
@ -138,6 +121,11 @@ public:
Q_INVOKABLE QStringList getCharacters();
Q_INVOKABLE QStringList getTeams();
Q_INVOKABLE QStringList getLocations();
Q_INVOKABLE QStringList getTags();
friend QDataStream &operator<<(QDataStream &stream, const ComicInfo &comicInfo);
friend QDataStream &operator>>(QDataStream &stream, ComicInfo &comicInfo);
@ -206,11 +194,27 @@ public:
Q_PROPERTY(QVariant coverSizeRatio MEMBER coverSizeRatio CONSTANT)
Q_PROPERTY(QVariant originalCoverSize MEMBER originalCoverSize CONSTANT)
Q_PROPERTY(QVariant added MEMBER added CONSTANT)
Q_PROPERTY(QVariant type MEMBER type CONSTANT)
Q_PROPERTY(QVariant editor MEMBER editor CONSTANT)
Q_PROPERTY(QVariant imprint MEMBER imprint CONSTANT)
Q_PROPERTY(QVariant teams MEMBER teams CONSTANT)
Q_PROPERTY(QVariant locations MEMBER locations CONSTANT)
Q_PROPERTY(QVariant series MEMBER series CONSTANT)
Q_PROPERTY(QVariant alternateSeries MEMBER alternateSeries CONSTANT)
Q_PROPERTY(QVariant alternateNumber MEMBER alternateNumber CONSTANT)
Q_PROPERTY(QVariant alternateCount MEMBER alternateCount CONSTANT)
Q_PROPERTY(QVariant languageISO MEMBER languageISO CONSTANT)
Q_PROPERTY(QVariant seriesGroup MEMBER seriesGroup CONSTANT)
Q_PROPERTY(QVariant mainCharacterOrTeam MEMBER mainCharacterOrTeam CONSTANT)
Q_PROPERTY(QVariant review MEMBER review CONSTANT)
Q_PROPERTY(QVariant tags MEMBER tags CONSTANT)
//-new properties, not loaded from the DB automatically
bool isFavorite;
Q_PROPERTY(bool isFavorite MEMBER isFavorite WRITE setFavorite NOTIFY favoriteChanged)
// setters, used in QML only by now
// setters, used in QML only for now
void setRead(bool r);
void setRating(int r);
void setFavorite(bool f);

View File

@ -20,7 +20,19 @@ Folder::Folder(qulonglong folderId, qulonglong parentId, const QString &folderNa
this->path = folderPath;
}
Folder::Folder(qulonglong folderId, qulonglong parentId, const QString &folderName, const QString &folderPath, bool completed, bool finished, bool manga)
Folder::Folder(qulonglong folderId,
qulonglong parentId,
const QString &folderName,
const QString &folderPath,
bool completed,
bool finished,
bool manga,
int numChildren,
const QString &firstChildHash,
const QString &customImage,
YACReader::FileType type,
qint64 added,
qint64 updated)
: knownParent(true),
knownId(true),
numChildren(-1)
@ -32,6 +44,12 @@ Folder::Folder(qulonglong folderId, qulonglong parentId, const QString &folderNa
this->completed = completed;
this->finished = finished;
this->manga = manga;
this->numChildren = numChildren;
this->firstChildHash = firstChildHash;
this->customImage = customImage;
this->type = type;
this->added = added;
this->updated = updated;
}
Folder::Folder(const Folder &folder)
@ -51,6 +69,9 @@ Folder &Folder::operator=(const Folder &other)
this->numChildren = other.numChildren;
this->firstChildHash = other.firstChildHash;
this->customImage = other.customImage;
this->type = other.type;
this->added = other.added;
this->updated = other.updated;
return *this;
}

View File

@ -2,6 +2,7 @@
#define __FOLDER_H
#include "library_item.h"
#include "yacreader_global.h"
#include <QList>
@ -11,9 +12,33 @@ public:
bool knownParent;
bool knownId;
bool finished; // finished means read, the user has read all the content in this folder
bool completed; // completed means the folder has all the content, e.g. a series got its final issue and the user has collected all of them
[[deprecated("use type instead")]] bool manga;
qint32 numChildren; //-1 for unknown number of children
QString firstChildHash; // empty for unknown first child
QString customImage; // empty for none custom image
YACReader::FileType type;
qint64 added; // epoch in seconds
qint64 updated; // epoch in seconds
Folder();
Folder(qulonglong folderId, qulonglong parentId, const QString &folderName, const QString &folderPath);
Folder(qulonglong folderId, qulonglong parentId, const QString &folderName, const QString &folderPath, bool completed, bool finished, bool manga);
Folder(qulonglong folderId,
qulonglong parentId,
const QString &folderName,
const QString &folderPath,
bool completed,
bool finished,
bool manga,
int numChildren,
const QString &firstChildHash,
const QString &customImage,
YACReader::FileType type,
qint64 added,
qint64 updated);
Folder(const QString &folderName, const QString &folderPath);
Folder(const Folder &folder);
Folder &operator=(const Folder &other);
@ -33,75 +58,6 @@ public:
{
return true;
}
inline bool isFinished() const
{
return finished;
}
inline bool isCompleted() const
{
return completed;
}
inline bool isManga() const
{
return manga;
}
inline void setFinished(bool b)
{
finished = b;
}
inline void setCompleted(bool b)
{
completed = b;
}
inline void setManga(bool b)
{
manga = b;
}
inline qint32 getNumChildren() const
{
return numChildren;
}
inline void setNumChildren(const qint32 v)
{
numChildren = v;
}
inline QString getFirstChildHash() const
{
return firstChildHash;
}
inline void setFirstChildHash(const QString &v)
{
firstChildHash = v;
}
inline QString getCustomImage() const
{
return customImage;
}
inline void setCustomImage(const QString &s)
{
customImage = s;
}
private:
bool finished; // finished means read, the user has read all the content in this folder
bool completed; // completed means the folder has all the content, e.g. a series got its final issue and the user has collected all of them
bool manga;
qint32 numChildren; //-1 for unknown number of children
QString firstChildHash; // empty for unknown first child
QString customImage; // empty for none custom image
};
#endif

View File

@ -7,6 +7,7 @@ int naturalCompare(const QString &s1, const QString &s2, Qt::CaseSensitivity cas
QCollator c;
c.setCaseSensitivity(caseSensitivity);
c.setNumericMode(true);
c.setIgnorePunctuation(false);
return c.compare(s1, s2);
}
bool naturalSortLessThanCS(const QString &left, const QString &right)

View File

@ -6,7 +6,7 @@
#include <QMetaType>
#include <QAbstractItemModel>
#define VERSION "9.12.0"
#define VERSION "9.13.0"
#define IMPORT_COMIC_INFO_XML_METADATA "IMPORT_COMIC_INFO_XML_METADATA"
@ -51,6 +51,14 @@ enum LabelColors {
YDark
};
enum class FileType : int {
Comic = 0,
Manga,
WesternManga,
WebComic, // continuous vertical reading
Yonkoma, // 4Koma
};
struct OpenComicSource {
enum Source {
Folder = 0,
@ -76,5 +84,6 @@ void iterate(const QModelIndex &index,
Q_DECLARE_METATYPE(YACReader::OpenComicSource::Source)
Q_DECLARE_METATYPE(YACReader::OpenComicSource)
Q_DECLARE_METATYPE(YACReader::FileType)
#endif