Fix export/import comic tags

It should be ready to work as a backup system
This commit is contained in:
Luis Ángel San Martín 2022-09-01 11:10:01 +02:00
parent 243892f5d3
commit aee337f776
2 changed files with 93 additions and 56 deletions

View File

@ -9,7 +9,7 @@
using namespace YACReader; using namespace YACReader;
static QString fields = "title ," static QString fields = "title,"
"coverPage," "coverPage,"
"numPages," "numPages,"
@ -42,9 +42,29 @@ static QString fields = "title ,"
"characters," "characters,"
"notes," "notes,"
"hash,"
"edited,"
"read,"
"comicVineID," "comicVineID,"
"hash"; "hasBeenOpened,"
"rating,"
"currentPage,"
"bookmark1,"
"bookmark2,"
"bookmark3,"
"brightness,"
"contrast,"
"gamma,"
// new 7.1 fields
"comicVineID,"
// new 9.5 fields
"lastTimeOpened,"
//"coverSizeRatio," cover may have changed since the info was exported...
//"originalCoverSize," // h/w
// new 9.8 fields
"manga";
DataBaseManagement::DataBaseManagement() DataBaseManagement::DataBaseManagement()
: QObject(), dataBasesList() : QObject(), dataBasesList()
@ -344,10 +364,11 @@ void DataBaseManagement::exportComicsInfo(QString source, QString dest)
QSqlQuery query("INSERT INTO dest.db_info (version) " QSqlQuery query("INSERT INTO dest.db_info (version) "
"VALUES ('" VERSION "')", "VALUES ('" VERSION "')",
destDB); destDB);
query.exec();
QSqlQuery exportData(destDB); QSqlQuery exportData(destDB);
exportData.prepare("create table dest.comic_info as select " + fields + exportData.prepare("CREATE TABLE dest.comic_info AS SELECT " + fields +
" from source.comic_info where source.comic_info.edited = 1"); " FROM source.comic_info WHERE source.comic_info.edited = 1 OR source.comic_info.comicVineID IS NOT NULL");
exportData.exec(); exportData.exec();
connectionName = destDB.connectionName(); connectionName = destDB.connectionName();
} }
@ -409,21 +430,38 @@ bool DataBaseManagement::importComicsInfo(QString source, QString dest)
"format = :format," "format = :format,"
"color = :color," "color = :color,"
"ageRating = :ageRating," "ageRating = :ageRating,"
"manga = :manga"
"synopsis = :synopsis," "synopsis = :synopsis,"
"characters = :characters," "characters = :characters,"
"notes = :notes," "notes = :notes,"
"read = :read,"
"edited = :edited," "edited = :edited,"
// new 7.0 fields
"hasBeenOpened = :hasBeenOpened,"
"currentPage = :currentPage,"
"bookmark1 = :bookmark1,"
"bookmark2 = :bookmark2,"
"bookmark3 = :bookmark3,"
"brightness = :brightness,"
"contrast = :contrast, "
"gamma = :gamma,"
"rating = :rating,"
// new 7.1 fields
"comicVineID = :comicVineID," "comicVineID = :comicVineID,"
// new 9.5 fields
"lastTimeOpened = :lastTimeOpened," "lastTimeOpened = :lastTimeOpened,"
"coverSizeRatio = :coverSizeRatio," //"coverSizeRatio = :coverSizeRatio,"
"originalCoverSize = :originalCoverSize" //"originalCoverSize = :originalCoverSize,"
//--
// new 9.8 fields
"manga = :manga"
//--
" WHERE hash = :hash "); " WHERE hash = :hash ");
QSqlQuery insert(destDB); QSqlQuery insert(destDB);
@ -561,48 +599,62 @@ bool DataBaseManagement::importComicsInfo(QString source, QString dest)
// TODO fix these bindings // TODO fix these bindings
void DataBaseManagement::bindValuesFromRecord(const QSqlRecord &record, QSqlQuery &query) void DataBaseManagement::bindValuesFromRecord(const QSqlRecord &record, QSqlQuery &query)
{ {
bindString("title", record, query); bindValue("title", record, query);
bindInt("coverPage", record, query); bindValue("coverPage", record, query);
bindInt("numPages", record, query); bindValue("numPages", record, query);
bindInt("number", record, query); bindValue("number", record, query);
bindInt("isBis", record, query); bindValue("isBis", record, query);
bindInt("count", record, query); bindValue("count", record, query);
bindString("volume", record, query); bindValue("volume", record, query);
bindString("storyArc", record, query); bindValue("storyArc", record, query);
bindInt("arcNumber", record, query); bindValue("arcNumber", record, query);
bindInt("arcCount", record, query); bindValue("arcCount", record, query);
bindString("genere", record, query); bindValue("genere", record, query);
bindString("writer", record, query); bindValue("writer", record, query);
bindString("penciller", record, query); bindValue("penciller", record, query);
bindString("inker", record, query); bindValue("inker", record, query);
bindString("colorist", record, query); bindValue("colorist", record, query);
bindString("letterer", record, query); bindValue("letterer", record, query);
bindString("coverArtist", record, query); bindValue("coverArtist", record, query);
bindString("date", record, query); bindValue("date", record, query);
bindString("publisher", record, query); bindValue("publisher", record, query);
bindString("format", record, query); bindValue("format", record, query);
bindInt("color", record, query); bindValue("color", record, query);
bindString("ageRating", record, query); bindValue("ageRating", record, query);
bindInt("manga", record, query); bindValue("manga", record, query);
bindString("synopsis", record, query); bindValue("synopsis", record, query);
bindString("characters", record, query); bindValue("characters", record, query);
bindString("notes", record, query); bindValue("notes", record, query);
bindString("comicVineID", record, query); bindValue("read", record, query);
bindValue("edited", record, query);
bindString("lastTimeOpened", record, query); bindValue("hasBeenOpened", record, query);
bindValue("currentPage", record, query);
bindValue("publisher", record, query);
bindValue("bookmark1", record, query);
bindValue("bookmark2", record, query);
bindValue("bookmark3", record, query);
bindValue("brightness", record, query);
bindValue("contrast", record, query);
bindValue("gamma", record, query);
bindValue("rating", record, query);
bindDouble("coverSizeRatio", record, query); bindValue("comicVineID", record, query);
bindString("originalCoverSize", record, query);
bindString("hash", record, query); bindValue("lastTimeOpened", record, query);
bindValue("coverSizeRatio", record, query);
bindValue("originalCoverSize", record, query);
bindValue("hash", record, query);
} }
bool DataBaseManagement::addColumns(const QString &tableName, const QStringList &columnDefs, const QSqlDatabase &db) bool DataBaseManagement::addColumns(const QString &tableName, const QStringList &columnDefs, const QSqlDatabase &db)
@ -638,23 +690,10 @@ bool DataBaseManagement::addConstraint(const QString &tableName, const QString &
return returnValue; return returnValue;
} }
void DataBaseManagement::bindString(const QString &name, const QSqlRecord &record, QSqlQuery &query) void DataBaseManagement::bindValue(const QString &name, const QSqlRecord &record, QSqlQuery &query)
{ {
if (!record.value(name).isNull()) { if (!record.value(name).isNull()) {
query.bindValue(":" + name, record.value(name).toString()); query.bindValue(":" + name, record.value(name));
}
}
void DataBaseManagement::bindInt(const QString &name, const QSqlRecord &record, QSqlQuery &query)
{
if (!record.value(name).isNull()) {
query.bindValue(":" + name, record.value(name).toInt());
}
}
void DataBaseManagement::bindDouble(const QString &name, const QSqlRecord &record, QSqlQuery &query)
{
if (!record.value(name).isNull()) {
query.bindValue(":" + name, record.value(name).toDouble());
} }
} }

View File

@ -34,9 +34,7 @@ class DataBaseManagement : public QObject
Q_OBJECT Q_OBJECT
private: private:
QList<QString> dataBasesList; QList<QString> dataBasesList;
static void bindString(const QString &name, const QSqlRecord &record, QSqlQuery &query); static void bindValue(const QString &name, const QSqlRecord &record, QSqlQuery &query);
static void bindInt(const QString &name, const QSqlRecord &record, QSqlQuery &query);
static void bindDouble(const QString &name, const QSqlRecord &record, QSqlQuery &query);
static void bindValuesFromRecord(const QSqlRecord &record, QSqlQuery &query); static void bindValuesFromRecord(const QSqlRecord &record, QSqlQuery &query);
static bool addColumns(const QString &tableName, const QStringList &columnDefs, const QSqlDatabase &db); static bool addColumns(const QString &tableName, const QStringList &columnDefs, const QSqlDatabase &db);