mirror of
https://github.com/YACReader/yacreader
synced 2025-11-14 22:12:53 -05:00
Add support for storing and serving the new comic filters format
It's already implemented on iOS and next is supporting it on Android.
This commit is contained in:
@ -81,7 +81,13 @@ static QString fields = "title,"
|
||||
"seriesGroup,"
|
||||
"mainCharacterOrTeam,"
|
||||
"review,"
|
||||
"tags";
|
||||
"tags,"
|
||||
// new 9.16 fields
|
||||
"imageFiltersJson,"
|
||||
"lastTimeImageFiltersSet,"
|
||||
"lastTimeCoverSet,"
|
||||
"usesExternalCover,"
|
||||
"lastTimeMetadataSet";
|
||||
|
||||
DataBaseManagement::DataBaseManagement()
|
||||
: QObject(), dataBasesList()
|
||||
@ -284,7 +290,13 @@ bool DataBaseManagement::createComicInfoTable(QSqlDatabase &database, QString ta
|
||||
"seriesGroup TEXT,"
|
||||
"mainCharacterOrTeam TEXT,"
|
||||
"review TEXT,"
|
||||
"tags TEXT"
|
||||
"tags TEXT,"
|
||||
// new 9.16 fields
|
||||
"imageFiltersJson TEXT,"
|
||||
"lastTimeImageFiltersSet INTEGER DEFAULT 0,"
|
||||
"lastTimeCoverSet INTEGER DEFAULT 0,"
|
||||
"usesExternalCover BOOLEAN DEFAULT 0,"
|
||||
"lastTimeMetadataSet INTEGER DEFAULT 0"
|
||||
")");
|
||||
|
||||
return queryComicInfo.exec();
|
||||
@ -862,6 +874,7 @@ bool DataBaseManagement::updateToCurrentVersion(const QString &libraryPath)
|
||||
bool pre9_8 = false;
|
||||
bool pre9_13 = false;
|
||||
bool pre9_14 = false;
|
||||
bool pre9_16 = false;
|
||||
|
||||
QString libraryDatabasePath = LibraryPaths::libraryDatabasePath(libraryPath);
|
||||
|
||||
@ -879,6 +892,8 @@ bool DataBaseManagement::updateToCurrentVersion(const QString &libraryPath)
|
||||
pre9_13 = true;
|
||||
if (compareVersions(DataBaseManagement::checkValidDB(libraryDatabasePath), "9.14.0") < 0)
|
||||
pre9_14 = true;
|
||||
if (compareVersions(DataBaseManagement::checkValidDB(libraryDatabasePath), "9.16.0") < 0)
|
||||
pre9_16 = true;
|
||||
|
||||
QString connectionName = "";
|
||||
bool returnValue = true;
|
||||
@ -1080,6 +1095,22 @@ bool DataBaseManagement::updateToCurrentVersion(const QString &libraryPath)
|
||||
}
|
||||
}
|
||||
|
||||
if (pre9_16) {
|
||||
{ // comic_info
|
||||
QStringList columnDefs;
|
||||
columnDefs << "imageFiltersJson TEXT";
|
||||
columnDefs << "lastTimeImageFiltersSet INTEGER DEFAULT 0";
|
||||
|
||||
columnDefs << "lastTimeCoverSet INTEGER DEFAULT 0";
|
||||
columnDefs << "usesExternalCover BOOLEAN DEFAULT 0";
|
||||
|
||||
columnDefs << "lastTimeMetadataSet INTEGER DEFAULT 0";
|
||||
|
||||
bool successAddingColumns = addColumns("comic_info", columnDefs, db);
|
||||
returnValue = returnValue && successAddingColumns;
|
||||
}
|
||||
}
|
||||
|
||||
if (returnValue) {
|
||||
QSqlQuery updateVersion(db);
|
||||
updateVersion.prepare("UPDATE db_info SET "
|
||||
|
||||
@ -712,7 +712,14 @@ void DBHelper::update(ComicInfo *comicInfo, QSqlDatabase &db)
|
||||
"seriesGroup = :seriesGroup,"
|
||||
"mainCharacterOrTeam = :mainCharacterOrTeam,"
|
||||
"review = :review,"
|
||||
"tags = :tags"
|
||||
"tags = :tags,"
|
||||
|
||||
// new 9.16 fields
|
||||
"imageFiltersJson = :imageFiltersJson,"
|
||||
"lastTimeImageFiltersSet = :lastTimeImageFiltersSet,"
|
||||
"lastTimeCoverSet = :lastTimeCoverSet,"
|
||||
"usesExternalCover = :usesExternalCover,"
|
||||
"lastTimeMetadataSet = :lastTimeMetadataSet"
|
||||
|
||||
//--
|
||||
" WHERE id = :id");
|
||||
@ -790,6 +797,12 @@ void DBHelper::update(ComicInfo *comicInfo, QSqlDatabase &db)
|
||||
updateComicInfo.bindValue(":review", comicInfo->review);
|
||||
updateComicInfo.bindValue(":tags", comicInfo->tags);
|
||||
|
||||
updateComicInfo.bindValue(":imageFiltersJson", comicInfo->imageFiltersJson);
|
||||
updateComicInfo.bindValue(":lastTimeImageFiltersSet", comicInfo->lastTimeImageFiltersSet);
|
||||
updateComicInfo.bindValue(":lastTimeCoverSet", comicInfo->lastTimeCoverSet);
|
||||
updateComicInfo.bindValue(":usesExternalCover", comicInfo->usesExternalCover);
|
||||
updateComicInfo.bindValue(":lastTimeMetadataSet", comicInfo->lastTimeMetadataSet);
|
||||
|
||||
updateComicInfo.exec();
|
||||
|
||||
QLOG_INFO() << updateComicInfo.lastError().databaseText();
|
||||
@ -962,6 +975,41 @@ void DBHelper::updateProgress(qulonglong libraryId, const ComicInfo &comicInfo)
|
||||
QSqlDatabase::removeDatabase(connectionName);
|
||||
}
|
||||
|
||||
void DBHelper::updateImageFilters(qulonglong libraryId, const ComicInfo &comicInfo)
|
||||
{
|
||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||
QString connectionName = "";
|
||||
{
|
||||
QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath));
|
||||
|
||||
bool found;
|
||||
ComicDB comic = DBHelper::loadComic(comicInfo.id, db, found);
|
||||
|
||||
if (found && comic.info.lastTimeImageFiltersSet.toULongLong() < comicInfo.lastTimeImageFiltersSet.toULongLong()) {
|
||||
QSqlQuery updateComicInfo(db);
|
||||
updateComicInfo.prepare("UPDATE comic_info SET "
|
||||
"lastTimeImageFiltersSet = :lastTimeImageFiltersSet, "
|
||||
"imageFiltersJson = :imageFiltersJson "
|
||||
" WHERE id = :id ");
|
||||
|
||||
updateComicInfo.bindValue(":lastTimeImageFiltersSet", comicInfo.lastTimeImageFiltersSet.toULongLong());
|
||||
updateComicInfo.bindValue(":imageFiltersJson", comicInfo.imageFiltersJson);
|
||||
updateComicInfo.bindValue(":id", comic.info.id);
|
||||
|
||||
auto ret = updateComicInfo.exec();
|
||||
if (!ret) {
|
||||
QLOG_ERROR() << "Error updating image filters for comic ID:" << comicInfo.id;
|
||||
QLOG_ERROR() << updateComicInfo.lastError().databaseText();
|
||||
QLOG_ERROR() << updateComicInfo.lastError().text();
|
||||
}
|
||||
}
|
||||
|
||||
connectionName = db.connectionName();
|
||||
}
|
||||
|
||||
QSqlDatabase::removeDatabase(connectionName);
|
||||
}
|
||||
|
||||
void DBHelper::setComicAsReading(qulonglong libraryId, const ComicInfo &comicInfo)
|
||||
{
|
||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||
@ -1944,6 +1992,12 @@ ComicInfo DBHelper::getComicInfoFromQuery(QSqlQuery &query, const QString &idKey
|
||||
int review = record.indexOf("review");
|
||||
int tags = record.indexOf("tags");
|
||||
|
||||
int imageFiltersJson = record.indexOf("imageFiltersJson");
|
||||
int lastTimeImageFiltersSet = record.indexOf("lastTimeImageFiltersSet");
|
||||
int lastTimeCoverSet = record.indexOf("lastTimeCoverSet");
|
||||
int usesExternalCover = record.indexOf("usesExternalCover");
|
||||
int lastTimeMetadataSet = record.indexOf("lastTimeMetadataSet");
|
||||
|
||||
ComicInfo comicInfo;
|
||||
|
||||
comicInfo.hash = query.value(hash).toString();
|
||||
@ -2026,6 +2080,14 @@ ComicInfo DBHelper::getComicInfoFromQuery(QSqlQuery &query, const QString &idKey
|
||||
comicInfo.tags = query.value(tags);
|
||||
//--
|
||||
|
||||
// new 9.16 fields
|
||||
comicInfo.imageFiltersJson = query.value(imageFiltersJson);
|
||||
comicInfo.lastTimeImageFiltersSet = query.value(lastTimeImageFiltersSet);
|
||||
comicInfo.lastTimeCoverSet = query.value(lastTimeCoverSet);
|
||||
comicInfo.usesExternalCover = query.value(usesExternalCover).toBool();
|
||||
comicInfo.lastTimeMetadataSet = query.value(lastTimeMetadataSet);
|
||||
//--
|
||||
|
||||
comicInfo.existOnDb = true;
|
||||
|
||||
return comicInfo;
|
||||
|
||||
@ -72,6 +72,7 @@ public:
|
||||
static Folder updateChildrenInfo(qulonglong folderId, QSqlDatabase &db);
|
||||
static void updateChildrenInfo(QSqlDatabase &db);
|
||||
static void updateProgress(qulonglong libraryId, const ComicInfo &comicInfo);
|
||||
static void updateImageFilters(qulonglong libraryId, const ComicInfo &comicInfo);
|
||||
static void setComicAsReading(qulonglong libraryId, const ComicInfo &comicInfo);
|
||||
[[deprecated("Server v1")]] static void updateFromRemoteClient(qulonglong libraryId, const ComicInfo &comicInfo);
|
||||
static void updateReadingRemoteProgress(const ComicInfo &comicInfo, QSqlDatabase &db);
|
||||
|
||||
@ -34,7 +34,6 @@ void UpdateComicControllerV2::service(HttpRequest &request, HttpResponse &respon
|
||||
ComicInfo info;
|
||||
info.currentPage = currentPage;
|
||||
info.id = comicId;
|
||||
DBHelper::updateProgress(libraryId, info);
|
||||
|
||||
if (data.length() > 1) {
|
||||
if (data.at(1).isEmpty() == false) {
|
||||
@ -43,8 +42,23 @@ void UpdateComicControllerV2::service(HttpRequest &request, HttpResponse &respon
|
||||
info.id = nextComicId.toULongLong();
|
||||
DBHelper::setComicAsReading(libraryId, info);
|
||||
}
|
||||
|
||||
if (data.length() > 2) {
|
||||
QStringList imageFiltersData = data.at(2).split("\t");
|
||||
auto epoch = imageFiltersData.at(0).toULongLong();
|
||||
QString imageFiltersJson = imageFiltersData.at(1);
|
||||
|
||||
ComicInfo imageFiltersInfo;
|
||||
imageFiltersInfo.id = comicId;
|
||||
imageFiltersInfo.lastTimeImageFiltersSet = epoch;
|
||||
imageFiltersInfo.imageFiltersJson = imageFiltersJson.isEmpty() ? QVariant() : imageFiltersJson;
|
||||
|
||||
DBHelper::updateImageFilters(libraryId, imageFiltersInfo);
|
||||
}
|
||||
}
|
||||
|
||||
DBHelper::updateProgress(libraryId, info);
|
||||
|
||||
error = false;
|
||||
updatedLibraryId = libraryId;
|
||||
updatedComicId = comicId;
|
||||
|
||||
@ -170,6 +170,12 @@ QJsonObject YACReaderServerDataHelper::fullComicToJSON(const qulonglong libraryI
|
||||
json["brightness"] = comic.info.brightness;
|
||||
json["contrast"] = comic.info.contrast;
|
||||
json["gamma"] = comic.info.gamma;
|
||||
// 9.16
|
||||
variantToJson("image_filters_json", QMetaType::QString, comic.info.imageFiltersJson, json);
|
||||
variantToJson("last_time_image_filters_set", QMetaType::LongLong, comic.info.lastTimeImageFiltersSet, json);
|
||||
variantToJson("last_time_cover_set", QMetaType::LongLong, comic.info.lastTimeCoverSet, json);
|
||||
variantToJson("uses_external_cover", QMetaType::Bool, comic.info.usesExternalCover, json);
|
||||
variantToJson("last_time_metadata_set", QMetaType::LongLong, comic.info.lastTimeMetadataSet, json);
|
||||
|
||||
return json;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user