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

@ -64,23 +64,29 @@ static QString fields = "title,"
//"coverSizeRatio," cover may have changed since the info was exported...
//"originalCoverSize," // h/w
// new 9.8 fields
"manga";
"manga,"
// new 9.13 fields
"added,"
"type,"
"editor,"
"imprint,"
"teams,"
"locations,"
"series,"
"alternateSeries,"
"alternateNumber,"
"alternateCount,"
"languageISO,"
"seriesGroup,"
"mainCharacterOrTeam,"
"review,"
"tags";
DataBaseManagement::DataBaseManagement()
: QObject(), dataBasesList()
{
}
/*TreeModel * DataBaseManagement::newTreeModel(QString path)
{
//la consulta se ejecuta...
QSqlQuery selectQuery(loadDatabase(path));
selectQuery.setForwardOnly(true);
selectQuery.exec("select * from folder order by parentId,name");
//selectQuery.finish();
return new TreeModel(selectQuery);
}*/
QSqlDatabase DataBaseManagement::createDatabase(QString name, QString path)
{
return createDatabase(QDir::cleanPath(path) + "/" + name + ".ydb");
@ -106,8 +112,6 @@ QSqlDatabase DataBaseManagement::createDatabase(QString dest)
"VALUES (1,'root', '/')",
db);
}
// query.finish();
// db.close();
return db;
}
@ -156,13 +160,13 @@ bool DataBaseManagement::createTables(QSqlDatabase &database)
"coverPage INTEGER DEFAULT 1,"
"numPages INTEGER,"
"number INTEGER,"
"number TEXT," // changed to text from INTEGER (9.13)
"isBis BOOLEAN,"
"count INTEGER,"
"volume TEXT,"
"storyArc TEXT,"
"arcNumber INTEGER,"
"arcNumber TEXT," // changed to text from INTEGER (9.13)
"arcCount INTEGER,"
"genere TEXT,"
@ -174,7 +178,7 @@ bool DataBaseManagement::createTables(QSqlDatabase &database)
"letterer TEXT,"
"coverArtist TEXT,"
"date TEXT," // dd/mm/yyyy --> se mostrará en 3 campos diferentes
"date TEXT," // publication date dd/mm/yyyy --> se mostrará en 3 campos diferentes
"publisher TEXT,"
"format TEXT,"
"color BOOLEAN,"
@ -190,7 +194,7 @@ bool DataBaseManagement::createTables(QSqlDatabase &database)
// new 7.0 fields
"hasBeenOpened BOOLEAN DEFAULT 0,"
"rating INTEGER DEFAULT 0,"
"rating INTEGER DEFAULT 0," // TODO_METADATA change type to REAL with two decimals
"currentPage INTEGER DEFAULT 1, "
"bookmark1 INTEGER DEFAULT -1, "
"bookmark2 INTEGER DEFAULT -1, "
@ -205,8 +209,23 @@ bool DataBaseManagement::createTables(QSqlDatabase &database)
"coverSizeRatio REAL,"
"originalCoverSize STRING," // h/w
// new 9.8 fields
"manga BOOLEAN DEFAULT 0"
"manga BOOLEAN DEFAULT 0," // deprecated 9.13
// new 9.13 fields
"added INTEGER,"
"type INTEGER DEFAULT 0," // 0 = comic, 1 = manga, 2 = manga left to right, 3 = webcomic, 4 = 4koma
"editor TEXT,"
"imprint TEXT,"
"teams TEXT,"
"locations TEXT,"
"series TEXT,"
"alternateSeries TEXT,"
"alternateNumber TEXT,"
"alternateCount INTEGER,"
"languageISO TEXT,"
"seriesGroup TEXT,"
"mainCharacterOrTeam TEXT,"
"review TEXT,"
"tags TEXT"
")");
success = success && queryComicInfo.exec();
// queryComicInfo.finish();
@ -226,7 +245,11 @@ bool DataBaseManagement::createTables(QSqlDatabase &database)
"firstChildHash TEXT,"
"customImage TEXT,"
// new 9.8 fields
"manga BOOLEAN DEFAULT 0,"
"manga BOOLEAN DEFAULT 0," // deprecated 9.13
// new 9.13 fields
"type INTEGER DEFAULT 0," // 0 = comic, 1 = manga, 2 = manga left to right, 3 = webcomic, 4 = 4koma
"added INTEGER,"
"updated INTEGER," // updated when the folder gets new content
"FOREIGN KEY(parentId) REFERENCES folder(id) ON DELETE CASCADE)");
success = success && queryFolder.exec();
@ -460,7 +483,25 @@ bool DataBaseManagement::importComicsInfo(QString source, QString dest)
//--
// new 9.8 fields
"manga = :manga"
"manga = :manga,"
// new 9.13 fields
"added = :added,"
"type = :type," // 0 = comic, 1 = manga, 2 = manga left to right, 3 = webcomic,
"editor = :editor,"
"imprint = :imprint,"
"teams = :teams,"
"locations = :locations,"
"series = :series,"
"alternateSeries = :alternateSeries,"
"alternateNumber = :alternateNumber,"
"alternateCount = :alternateCount,"
"languageISO = :languageISO,"
"seriesGroup = :seriesGroup,"
"mainCharacterOrTeam = :mainCharacterOrTeam,"
"review = :review,"
"tags = :tags"
//--
" WHERE hash = :hash ");
@ -496,6 +537,21 @@ bool DataBaseManagement::importComicsInfo(QString source, QString dest)
"comicVineID,"
"lastTimeOpened,"
"coverSizeRatio,"
"manga,"
"added,"
"type,"
"editor,"
"imprint,"
"teams,"
"locations,"
"series,"
"alternateSeries,"
"alternateNumber,"
"alternateCount,"
"languageISO,"
"seriesGroup,"
"mainCharacterOrTeam,"
"review,"
"hash)"
"VALUES (:title,"
@ -539,6 +595,23 @@ bool DataBaseManagement::importComicsInfo(QString source, QString dest)
":coverSizeRatio,"
":originalCoverSize,"
":manga,"
":added,"
":type,"
":editor,"
":imprint,"
":teams,"
":locations,"
":series,"
":alternateSeries,"
":alternateNumber,"
":alternateCount,"
":languageISO,"
":seriesGroup,"
":mainCharacterOrTeam,"
":review,"
":tags,"
":hash )");
QSqlRecord record = newInfo.record();
@ -596,6 +669,8 @@ bool DataBaseManagement::importComicsInfo(QString source, QString dest)
return b;
}
// TODO: update fields
// TODO fix these bindings
void DataBaseManagement::bindValuesFromRecord(const QSqlRecord &record, QSqlQuery &query)
{
@ -654,6 +729,22 @@ void DataBaseManagement::bindValuesFromRecord(const QSqlRecord &record, QSqlQuer
bindValue("coverSizeRatio", record, query);
bindValue("originalCoverSize", record, query);
bindValue("added", record, query);
bindValue("type", record, query);
bindValue("editor", record, query);
bindValue("imprint", record, query);
bindValue("teams", record, query);
bindValue("locations", record, query);
bindValue("series", record, query);
bindValue("alternateSeries", record, query);
bindValue("alternateNumber", record, query);
bindValue("alternateCount", record, query);
bindValue("languageISO", record, query);
bindValue("seriesGroup", record, query);
bindValue("mainCharacterOrTeam", record, query);
bindValue("review", record, query);
bindValue("tags", record, query);
bindValue("hash", record, query);
}
@ -757,6 +848,7 @@ bool DataBaseManagement::updateToCurrentVersion(const QString &path)
bool pre8 = false;
bool pre9_5 = false;
bool pre9_8 = false;
bool pre9_13 = false;
QString fullPath = path + "/library.ydb";
@ -770,6 +862,8 @@ bool DataBaseManagement::updateToCurrentVersion(const QString &path)
pre9_5 = true;
if (compareVersions(DataBaseManagement::checkValidDB(fullPath), "9.8.0") < 0)
pre9_8 = true;
if (compareVersions(DataBaseManagement::checkValidDB(fullPath), "9.13.0") < 0)
pre9_13 = true;
QString connectionName = "";
bool returnValue = false;
@ -895,6 +989,53 @@ bool DataBaseManagement::updateToCurrentVersion(const QString &path)
returnValue = returnValue && successAddingColumns;
}
}
if (pre9_13) {
{ // comic_info
QStringList columnDefs;
columnDefs << "added INTEGER";
columnDefs << "type INTEGER DEFAULT 0"; // 0 = comic, 1 = manga, 2 = manga left to right, 3 = webcomic,
columnDefs << "editor TEXT";
columnDefs << "imprint TEXT";
columnDefs << "teams TEXT";
columnDefs << "locations TEXT";
columnDefs << "series TEXT";
columnDefs << "alternateSeries TEXT";
columnDefs << "alternateNumber TEXT";
columnDefs << "alternateCount INTEGER";
columnDefs << "languageISO TEXT";
columnDefs << "seriesGroup TEXT";
columnDefs << "mainCharacterOrTeam TEXT";
columnDefs << "review TEXT";
columnDefs << "tags TEXT";
bool successAddingColumns = addColumns("comic_info", columnDefs, db);
returnValue = returnValue && successAddingColumns;
QSqlQuery updateTypeQueryToManga(db);
updateTypeQueryToManga.prepare("UPDATE comic_info SET type = manga");
bool successMigratingManga = updateTypeQueryToManga.exec();
returnValue = returnValue && successMigratingManga;
QSqlQuery updateNumberQueryToBis(db);
updateNumberQueryToBis.prepare("UPDATE comic_info SET number = number + 0.5 WHERE isBis = 1");
bool successMigratingBis = updateNumberQueryToBis.exec();
returnValue = returnValue && successMigratingBis;
}
{ // folder
QStringList columnDefs;
columnDefs << "added INTEGER";
columnDefs << "updated INTEGER";
columnDefs << "type INTEGER DEFAULT 0";
bool successAddingColumns = addColumns("folder", columnDefs, db);
returnValue = returnValue && successAddingColumns;
QSqlQuery updateTypeQueryToManga(db);
updateTypeQueryToManga.prepare("UPDATE folder SET type = manga");
bool successMigratingManga = updateTypeQueryToManga.exec();
returnValue = returnValue && successMigratingManga;
}
}
}
connectionName = db.connectionName();
}