mirror of
https://github.com/YACReader/yacreader
synced 2025-07-14 02:54:46 -04:00
Merge pull request #154 from selmf/database_leaks
Fix object leaks in database code
This commit is contained in:
@ -10,6 +10,7 @@ Version counting is based on semantic versioning (Major.Feature.Patch)
|
|||||||
|
|
||||||
### YACReaderLibrary
|
### YACReaderLibrary
|
||||||
* update QsLog logger to version 2.1, snapshot 46b643d5bcbc
|
* update QsLog logger to version 2.1, snapshot 46b643d5bcbc
|
||||||
|
* fix object leaks in database code
|
||||||
|
|
||||||
## 9.6.0
|
## 9.6.0
|
||||||
### Reader and Library
|
### Reader and Library
|
||||||
|
@ -431,16 +431,18 @@ void ComicVineDialog::getComicsInfo(QList<QPair<ComicDB, QString>> &matchingInfo
|
|||||||
|
|
||||||
setLoadingMessage(tr("Retrieving tags for : %1").arg(p.first.getFileName()));
|
setLoadingMessage(tr("Retrieving tags for : %1").arg(p.first.getFileName()));
|
||||||
}
|
}
|
||||||
|
QString connectionName = "";
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
{
|
||||||
db.open();
|
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
||||||
db.transaction();
|
db.open();
|
||||||
foreach (ComicDB comic, comics) {
|
db.transaction();
|
||||||
DBHelper::update(&(comic.info), db);
|
foreach (ComicDB comic, comics) {
|
||||||
|
DBHelper::update(&(comic.info), db);
|
||||||
|
}
|
||||||
|
db.commit();
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
db.commit();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
emit accepted();
|
emit accepted();
|
||||||
}
|
}
|
||||||
@ -464,16 +466,18 @@ void ComicVineDialog::getComicInfo(const QString &comicId, int count, const QStr
|
|||||||
ComicDB comic = parseComicInfo(comics[currentIndex], result, count, publisher); //TODO check result error
|
ComicDB comic = parseComicInfo(comics[currentIndex], result, count, publisher); //TODO check result error
|
||||||
comic.info.comicVineID = comicId;
|
comic.info.comicVineID = comicId;
|
||||||
setLoadingMessage(tr("Retrieving tags for : %1").arg(comics[currentIndex].getFileName()));
|
setLoadingMessage(tr("Retrieving tags for : %1").arg(comics[currentIndex].getFileName()));
|
||||||
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
||||||
|
db.open();
|
||||||
|
db.transaction();
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
DBHelper::update(&(comic.info), db);
|
||||||
db.open();
|
|
||||||
db.transaction();
|
|
||||||
|
|
||||||
DBHelper::update(&(comic.info), db);
|
db.commit();
|
||||||
|
connectionName = db.connectionName();
|
||||||
db.commit();
|
}
|
||||||
db.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
if (mode == SingleComic || currentIndex == (comics.count() - 1)) {
|
if (mode == SingleComic || currentIndex == (comics.count() - 1)) {
|
||||||
emit accepted();
|
emit accepted();
|
||||||
|
@ -152,23 +152,25 @@ bool ComicModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int
|
|||||||
foreach (ComicItem *item, _data) {
|
foreach (ComicItem *item, _data) {
|
||||||
allComicIds << item->data(Id).toULongLong();
|
allComicIds << item->data(Id).toULongLong();
|
||||||
}
|
}
|
||||||
|
QString connectionName = "";
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
{
|
||||||
switch (mode) {
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
case Favorites:
|
switch (mode) {
|
||||||
DBHelper::reasignOrderToComicsInFavorites(allComicIds, db);
|
case Favorites:
|
||||||
break;
|
DBHelper::reasignOrderToComicsInFavorites(allComicIds, db);
|
||||||
case Label:
|
break;
|
||||||
DBHelper::reasignOrderToComicsInLabel(sourceId, allComicIds, db);
|
case Label:
|
||||||
break;
|
DBHelper::reasignOrderToComicsInLabel(sourceId, allComicIds, db);
|
||||||
case ReadingList:
|
break;
|
||||||
DBHelper::reasignOrderToComicsInReadingList(sourceId, allComicIds, db);
|
case ReadingList:
|
||||||
break;
|
DBHelper::reasignOrderToComicsInReadingList(sourceId, allComicIds, db);
|
||||||
default:
|
break;
|
||||||
break;
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
//endMoveRows();
|
//endMoveRows();
|
||||||
|
|
||||||
@ -441,8 +443,9 @@ void ComicModel::setupFolderModelData(unsigned long long int folderId, const QSt
|
|||||||
_data.clear();
|
_data.clear();
|
||||||
|
|
||||||
_databasePath = databasePath;
|
_databasePath = databasePath;
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
QString connectionName = "";
|
||||||
{
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
||||||
QSqlQuery selectQuery(db);
|
QSqlQuery selectQuery(db);
|
||||||
selectQuery.prepare("SELECT 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 "
|
selectQuery.prepare("SELECT 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 "
|
||||||
"FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) "
|
"FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) "
|
||||||
@ -450,13 +453,10 @@ void ComicModel::setupFolderModelData(unsigned long long int folderId, const QSt
|
|||||||
selectQuery.bindValue(":parentId", folderId);
|
selectQuery.bindValue(":parentId", folderId);
|
||||||
selectQuery.exec();
|
selectQuery.exec();
|
||||||
setupModelData(selectQuery);
|
setupModelData(selectQuery);
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
db.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
endResetModel();
|
endResetModel();
|
||||||
|
|
||||||
/*if(_data.length()==0)
|
|
||||||
emit isEmpty();*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComicModel::setupLabelModelData(unsigned long long parentLabel, const QString &databasePath)
|
void ComicModel::setupLabelModelData(unsigned long long parentLabel, const QString &databasePath)
|
||||||
@ -470,8 +470,9 @@ void ComicModel::setupLabelModelData(unsigned long long parentLabel, const QStri
|
|||||||
_data.clear();
|
_data.clear();
|
||||||
|
|
||||||
_databasePath = databasePath;
|
_databasePath = databasePath;
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
QString connectionName = "";
|
||||||
{
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
||||||
QSqlQuery selectQuery(db);
|
QSqlQuery selectQuery(db);
|
||||||
selectQuery.prepare("SELECT 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 "
|
selectQuery.prepare("SELECT 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 "
|
||||||
"FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) "
|
"FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) "
|
||||||
@ -481,13 +482,10 @@ void ComicModel::setupLabelModelData(unsigned long long parentLabel, const QStri
|
|||||||
selectQuery.bindValue(":parentLabelId", parentLabel);
|
selectQuery.bindValue(":parentLabelId", parentLabel);
|
||||||
selectQuery.exec();
|
selectQuery.exec();
|
||||||
setupModelDataForList(selectQuery);
|
setupModelDataForList(selectQuery);
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
db.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
endResetModel();
|
endResetModel();
|
||||||
|
|
||||||
/*if(_data.length()==0)
|
|
||||||
emit isEmpty();*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComicModel::setupReadingListModelData(unsigned long long parentReadingList, const QString &databasePath)
|
void ComicModel::setupReadingListModelData(unsigned long long parentReadingList, const QString &databasePath)
|
||||||
@ -500,8 +498,9 @@ void ComicModel::setupReadingListModelData(unsigned long long parentReadingList,
|
|||||||
_data.clear();
|
_data.clear();
|
||||||
|
|
||||||
_databasePath = databasePath;
|
_databasePath = databasePath;
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
QString connectionName = "";
|
||||||
{
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
||||||
QList<qulonglong> ids;
|
QList<qulonglong> ids;
|
||||||
ids << parentReadingList;
|
ids << parentReadingList;
|
||||||
|
|
||||||
@ -535,9 +534,9 @@ void ComicModel::setupReadingListModelData(unsigned long long parentReadingList,
|
|||||||
|
|
||||||
_data = tempData << _data;
|
_data = tempData << _data;
|
||||||
}
|
}
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
db.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
endResetModel();
|
endResetModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -551,8 +550,9 @@ void ComicModel::setupFavoritesModelData(const QString &databasePath)
|
|||||||
_data.clear();
|
_data.clear();
|
||||||
|
|
||||||
_databasePath = databasePath;
|
_databasePath = databasePath;
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
QString connectionName = "";
|
||||||
{
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
||||||
QSqlQuery selectQuery(db);
|
QSqlQuery selectQuery(db);
|
||||||
selectQuery.prepare("SELECT 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 "
|
selectQuery.prepare("SELECT 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 "
|
||||||
"FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) "
|
"FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) "
|
||||||
@ -562,13 +562,10 @@ void ComicModel::setupFavoritesModelData(const QString &databasePath)
|
|||||||
selectQuery.bindValue(":parentDefaultListId", 1);
|
selectQuery.bindValue(":parentDefaultListId", 1);
|
||||||
selectQuery.exec();
|
selectQuery.exec();
|
||||||
setupModelDataForList(selectQuery);
|
setupModelDataForList(selectQuery);
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
db.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
endResetModel();
|
endResetModel();
|
||||||
|
|
||||||
/*if(_data.length()==0)
|
|
||||||
emit isEmpty();*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComicModel::setupReadingModelData(const QString &databasePath)
|
void ComicModel::setupReadingModelData(const QString &databasePath)
|
||||||
@ -581,8 +578,9 @@ void ComicModel::setupReadingModelData(const QString &databasePath)
|
|||||||
_data.clear();
|
_data.clear();
|
||||||
|
|
||||||
_databasePath = databasePath;
|
_databasePath = databasePath;
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
QString connectionName = "";
|
||||||
{
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
||||||
QSqlQuery selectQuery(db);
|
QSqlQuery selectQuery(db);
|
||||||
selectQuery.prepare("SELECT 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 "
|
selectQuery.prepare("SELECT 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 "
|
||||||
"FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) "
|
"FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) "
|
||||||
@ -591,32 +589,22 @@ void ComicModel::setupReadingModelData(const QString &databasePath)
|
|||||||
selectQuery.exec();
|
selectQuery.exec();
|
||||||
|
|
||||||
setupModelDataForList(selectQuery);
|
setupModelDataForList(selectQuery);
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
db.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
endResetModel();
|
endResetModel();
|
||||||
|
|
||||||
/*if(_data.length()==0)
|
|
||||||
emit isEmpty();*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComicModel::setupModelData(const SearchModifiers modifier, const QString &filter, const QString &databasePath)
|
void ComicModel::setupModelData(const SearchModifiers modifier, const QString &filter, const QString &databasePath)
|
||||||
{
|
{
|
||||||
//QFile f(QCoreApplication::applicationDirPath()+"/performance.txt");
|
|
||||||
//f.open(QIODevice::Append);
|
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
//QElapsedTimer timer;
|
|
||||||
//timer.start();
|
|
||||||
qDeleteAll(_data);
|
qDeleteAll(_data);
|
||||||
_data.clear();
|
_data.clear();
|
||||||
|
|
||||||
//QTextStream txtS(&f);
|
|
||||||
//txtS << "TABLEMODEL: Tiempo de borrado: " << timer.elapsed() << "ms\r\n";
|
|
||||||
_databasePath = databasePath;
|
_databasePath = databasePath;
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
QString connectionName = "";
|
||||||
|
|
||||||
{
|
{
|
||||||
//crear la consulta
|
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
||||||
//timer.restart();
|
|
||||||
QSqlQuery selectQuery(db);
|
QSqlQuery selectQuery(db);
|
||||||
|
|
||||||
switch (modifier) {
|
switch (modifier) {
|
||||||
@ -653,14 +641,10 @@ void ComicModel::setupModelData(const SearchModifiers modifier, const QString &f
|
|||||||
|
|
||||||
QLOG_DEBUG() << selectQuery.lastError() << "--";
|
QLOG_DEBUG() << selectQuery.lastError() << "--";
|
||||||
|
|
||||||
//txtS << "TABLEMODEL: Tiempo de consulta: " << timer.elapsed() << "ms\r\n";
|
|
||||||
//timer.restart();
|
|
||||||
setupModelData(selectQuery);
|
setupModelData(selectQuery);
|
||||||
//txtS << "TABLEMODEL: Tiempo de creaci�n del modelo: " << timer.elapsed() << "ms\r\n";
|
connectionName = db.connectionName();
|
||||||
//selectQuery.finish();
|
|
||||||
}
|
}
|
||||||
db.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
endResetModel();
|
endResetModel();
|
||||||
|
|
||||||
emit searchNumResults(_data.length());
|
emit searchNumResults(_data.length());
|
||||||
@ -715,20 +699,28 @@ void ComicModel::setupModelDataForList(QSqlQuery &sqlquery)
|
|||||||
|
|
||||||
ComicDB ComicModel::getComic(const QModelIndex &mi)
|
ComicDB ComicModel::getComic(const QModelIndex &mi)
|
||||||
{
|
{
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
ComicDB c;
|
||||||
ComicDB c = DBHelper::loadComic(_data.at(mi.row())->data(ComicModel::Id).toULongLong(), db);
|
QString connectionName = "";
|
||||||
db.close();
|
{
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
c = DBHelper::loadComic(_data.at(mi.row())->data(ComicModel::Id).toULongLong(), db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
ComicDB ComicModel::_getComic(const QModelIndex &mi)
|
ComicDB ComicModel::_getComic(const QModelIndex &mi)
|
||||||
{
|
{
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
ComicDB c;
|
||||||
ComicDB c = DBHelper::loadComic(_data.at(mi.row())->data(ComicModel::Id).toULongLong(), db);
|
QString connectionName = "";
|
||||||
db.close();
|
{
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
c = DBHelper::loadComic(_data.at(mi.row())->data(ComicModel::Id).toULongLong(), db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
@ -757,18 +749,21 @@ QVector<YACReaderComicReadStatus> ComicModel::setAllComicsRead(YACReaderComicRea
|
|||||||
|
|
||||||
QList<ComicDB> ComicModel::getAllComics()
|
QList<ComicDB> ComicModel::getAllComics()
|
||||||
{
|
{
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
|
||||||
db.transaction();
|
|
||||||
|
|
||||||
QList<ComicDB> comics;
|
QList<ComicDB> comics;
|
||||||
int numComics = _data.count();
|
QString connectionName = "";
|
||||||
for (int i = 0; i < numComics; i++) {
|
{
|
||||||
comics.append(DBHelper::loadComic(_data.value(i)->data(ComicModel::Id).toULongLong(), db));
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
}
|
db.transaction();
|
||||||
|
|
||||||
db.commit();
|
int numComics = _data.count();
|
||||||
db.close();
|
for (int i = 0; i < numComics; i++) {
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
comics.append(DBHelper::loadComic(_data.value(i)->data(ComicModel::Id).toULongLong(), db));
|
||||||
|
}
|
||||||
|
|
||||||
|
db.commit();
|
||||||
|
connectionName = db.connectionName();
|
||||||
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
|
|
||||||
return comics;
|
return comics;
|
||||||
}
|
}
|
||||||
@ -776,44 +771,40 @@ QList<ComicDB> ComicModel::getAllComics()
|
|||||||
QList<ComicDB> ComicModel::getComics(QList<QModelIndex> list)
|
QList<ComicDB> ComicModel::getComics(QList<QModelIndex> list)
|
||||||
{
|
{
|
||||||
QList<ComicDB> comics;
|
QList<ComicDB> comics;
|
||||||
|
for (auto itr = list.constBegin(); itr != list.constEnd(); itr++) {
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
|
||||||
db.transaction();
|
|
||||||
QList<QModelIndex>::const_iterator itr;
|
|
||||||
for (itr = list.constBegin(); itr != list.constEnd(); itr++) {
|
|
||||||
comics.append(_getComic(*itr));
|
comics.append(_getComic(*itr));
|
||||||
}
|
}
|
||||||
db.commit();
|
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
return comics;
|
return comics;
|
||||||
}
|
}
|
||||||
//TODO
|
//TODO
|
||||||
QVector<YACReaderComicReadStatus> ComicModel::setComicsRead(QList<QModelIndex> list, YACReaderComicReadStatus read)
|
QVector<YACReaderComicReadStatus> ComicModel::setComicsRead(QList<QModelIndex> list, YACReaderComicReadStatus read)
|
||||||
{
|
{
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
QString connectionName = "";
|
||||||
db.transaction();
|
{
|
||||||
foreach (QModelIndex mi, list) {
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
if (read == YACReader::Read) {
|
db.transaction();
|
||||||
_data.value(mi.row())->setData(ComicModel::ReadColumn, QVariant(true));
|
foreach (QModelIndex mi, list) {
|
||||||
ComicDB c = DBHelper::loadComic(_data.value(mi.row())->data(ComicModel::Id).toULongLong(), db);
|
if (read == YACReader::Read) {
|
||||||
c.info.read = true;
|
_data.value(mi.row())->setData(ComicModel::ReadColumn, QVariant(true));
|
||||||
DBHelper::update(&(c.info), db);
|
ComicDB c = DBHelper::loadComic(_data.value(mi.row())->data(ComicModel::Id).toULongLong(), db);
|
||||||
}
|
c.info.read = true;
|
||||||
if (read == YACReader::Unread) {
|
DBHelper::update(&(c.info), db);
|
||||||
_data.value(mi.row())->setData(ComicModel::ReadColumn, QVariant(false));
|
}
|
||||||
_data.value(mi.row())->setData(ComicModel::CurrentPage, QVariant(1));
|
if (read == YACReader::Unread) {
|
||||||
_data.value(mi.row())->setData(ComicModel::HasBeenOpened, QVariant(false));
|
_data.value(mi.row())->setData(ComicModel::ReadColumn, QVariant(false));
|
||||||
ComicDB c = DBHelper::loadComic(_data.value(mi.row())->data(ComicModel::Id).toULongLong(), db);
|
_data.value(mi.row())->setData(ComicModel::CurrentPage, QVariant(1));
|
||||||
c.info.read = false;
|
_data.value(mi.row())->setData(ComicModel::HasBeenOpened, QVariant(false));
|
||||||
c.info.currentPage = 1;
|
ComicDB c = DBHelper::loadComic(_data.value(mi.row())->data(ComicModel::Id).toULongLong(), db);
|
||||||
c.info.hasBeenOpened = false;
|
c.info.read = false;
|
||||||
DBHelper::update(&(c.info), db);
|
c.info.currentPage = 1;
|
||||||
|
c.info.hasBeenOpened = false;
|
||||||
|
DBHelper::update(&(c.info), db);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
db.commit();
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
db.commit();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
emit dataChanged(index(list.first().row(), ComicModel::ReadColumn), index(list.last().row(), ComicModel::HasBeenOpened), QVector<int>() << ReadColumnRole << CurrentPageRole << HasBeenOpenedRole);
|
emit dataChanged(index(list.first().row(), ComicModel::ReadColumn), index(list.last().row(), ComicModel::HasBeenOpened), QVector<int>() << ReadColumnRole << CurrentPageRole << HasBeenOpenedRole);
|
||||||
|
|
||||||
@ -821,23 +812,25 @@ QVector<YACReaderComicReadStatus> ComicModel::setComicsRead(QList<QModelIndex> l
|
|||||||
}
|
}
|
||||||
qint64 ComicModel::asignNumbers(QList<QModelIndex> list, int startingNumber)
|
qint64 ComicModel::asignNumbers(QList<QModelIndex> list, int startingNumber)
|
||||||
{
|
{
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
qint64 idFirst;
|
||||||
db.transaction();
|
QString connectionName = "";
|
||||||
qint64 idFirst = _data.value(list[0].row())->data(ComicModel::Id).toULongLong();
|
{
|
||||||
int i = 0;
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
foreach (QModelIndex mi, list) {
|
db.transaction();
|
||||||
ComicDB c = DBHelper::loadComic(_data.value(mi.row())->data(ComicModel::Id).toULongLong(), db);
|
idFirst = _data.value(list[0].row())->data(ComicModel::Id).toULongLong();
|
||||||
c.info.number = startingNumber + i;
|
int i = 0;
|
||||||
c.info.edited = true;
|
foreach (QModelIndex mi, list) {
|
||||||
DBHelper::update(&(c.info), db);
|
ComicDB c = DBHelper::loadComic(_data.value(mi.row())->data(ComicModel::Id).toULongLong(), db);
|
||||||
i++;
|
c.info.number = startingNumber + i;
|
||||||
|
c.info.edited = true;
|
||||||
|
DBHelper::update(&(c.info), db);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
db.commit();
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
|
|
||||||
db.commit();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
//emit dataChanged(index(0,ComicModel::Number),index(_data.count()-1,ComicModel::HasBeenOpened));
|
|
||||||
|
|
||||||
return idFirst;
|
return idFirst;
|
||||||
}
|
}
|
||||||
@ -867,19 +860,22 @@ QList<QModelIndex> ComicModel::getIndexesFromIds(const QList<qulonglong> &comicI
|
|||||||
|
|
||||||
void ComicModel::startTransaction()
|
void ComicModel::startTransaction()
|
||||||
{
|
{
|
||||||
dbTransaction = DataBaseManagement::loadDatabase(_databasePath);
|
auto dbTransaction = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
_databaseConnection = dbTransaction.connectionName();
|
||||||
dbTransaction.transaction();
|
dbTransaction.transaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComicModel::finishTransaction()
|
void ComicModel::finishTransaction()
|
||||||
{
|
{
|
||||||
dbTransaction.commit();
|
{
|
||||||
dbTransaction.close();
|
QSqlDatabase::database(_databaseConnection).commit();
|
||||||
QSqlDatabase::removeDatabase(dbTransaction.connectionName());
|
}
|
||||||
|
QSqlDatabase::removeDatabase(_databaseConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComicModel::removeInTransaction(int row)
|
void ComicModel::removeInTransaction(int row)
|
||||||
{
|
{
|
||||||
|
auto dbTransaction = QSqlDatabase::database(_databaseConnection);
|
||||||
ComicDB c = DBHelper::loadComic(_data.at(row)->data(ComicModel::Id).toULongLong(), dbTransaction);
|
ComicDB c = DBHelper::loadComic(_data.at(row)->data(ComicModel::Id).toULongLong(), dbTransaction);
|
||||||
|
|
||||||
DBHelper::removeFromDB(&c, dbTransaction);
|
DBHelper::removeFromDB(&c, dbTransaction);
|
||||||
@ -890,27 +886,6 @@ void ComicModel::removeInTransaction(int row)
|
|||||||
|
|
||||||
endRemoveRows();
|
endRemoveRows();
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
void ComicModel::remove(ComicDB * comic, int row)
|
|
||||||
{
|
|
||||||
beginRemoveRows(QModelIndex(),row,row);
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
|
||||||
|
|
||||||
DBHelper::removeFromDB(comic,db);
|
|
||||||
|
|
||||||
removeRow(row);
|
|
||||||
delete _data.at(row);
|
|
||||||
_data.removeAt(row);
|
|
||||||
|
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
endRemoveRows();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
/*ComicDB TableModel::getComic(int row)
|
|
||||||
{
|
|
||||||
return getComic(index(row,0));
|
|
||||||
}*/
|
|
||||||
|
|
||||||
void ComicModel::remove(int row)
|
void ComicModel::remove(int row)
|
||||||
{
|
{
|
||||||
@ -938,17 +913,18 @@ void ComicModel::reload(const ComicDB &comic)
|
|||||||
void ComicModel::resetComicRating(const QModelIndex &mi)
|
void ComicModel::resetComicRating(const QModelIndex &mi)
|
||||||
{
|
{
|
||||||
ComicDB comic = getComic(mi);
|
ComicDB comic = getComic(mi);
|
||||||
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
comic.info.rating = 0;
|
||||||
|
_data[mi.row()]->setData(ComicModel::Rating, 0);
|
||||||
|
DBHelper::update(&(comic.info), db);
|
||||||
|
|
||||||
comic.info.rating = 0;
|
emit dataChanged(mi, mi);
|
||||||
_data[mi.row()]->setData(ComicModel::Rating, 0);
|
connectionName = db.connectionName();
|
||||||
DBHelper::update(&(comic.info), db);
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
emit dataChanged(mi, mi);
|
|
||||||
|
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QUrl ComicModel::getCoverUrlPathForComicHash(const QString &hash) const
|
QUrl ComicModel::getCoverUrlPathForComicHash(const QString &hash) const
|
||||||
@ -964,13 +940,14 @@ void ComicModel::addComicsToFavorites(const QList<qulonglong> &comicIds)
|
|||||||
void ComicModel::addComicsToFavorites(const QList<QModelIndex> &comicsList)
|
void ComicModel::addComicsToFavorites(const QList<QModelIndex> &comicsList)
|
||||||
{
|
{
|
||||||
QList<ComicDB> comics = getComics(comicsList);
|
QList<ComicDB> comics = getComics(comicsList);
|
||||||
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
DBHelper::insertComicsInFavorites(comics, db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
DBHelper::insertComicsInFavorites(comics, db);
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComicModel::addComicsToLabel(const QList<qulonglong> &comicIds, qulonglong labelId)
|
void ComicModel::addComicsToLabel(const QList<qulonglong> &comicIds, qulonglong labelId)
|
||||||
@ -981,13 +958,14 @@ void ComicModel::addComicsToLabel(const QList<qulonglong> &comicIds, qulonglong
|
|||||||
void ComicModel::addComicsToLabel(const QList<QModelIndex> &comicsList, qulonglong labelId)
|
void ComicModel::addComicsToLabel(const QList<QModelIndex> &comicsList, qulonglong labelId)
|
||||||
{
|
{
|
||||||
QList<ComicDB> comics = getComics(comicsList);
|
QList<ComicDB> comics = getComics(comicsList);
|
||||||
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
DBHelper::insertComicsInLabel(comics, labelId, db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
DBHelper::insertComicsInLabel(comics, labelId, db);
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComicModel::addComicsToReadingList(const QList<qulonglong> &comicIds, qulonglong readingListId)
|
void ComicModel::addComicsToReadingList(const QList<qulonglong> &comicIds, qulonglong readingListId)
|
||||||
@ -998,25 +976,27 @@ void ComicModel::addComicsToReadingList(const QList<qulonglong> &comicIds, qulon
|
|||||||
void ComicModel::addComicsToReadingList(const QList<QModelIndex> &comicsList, qulonglong readingListId)
|
void ComicModel::addComicsToReadingList(const QList<QModelIndex> &comicsList, qulonglong readingListId)
|
||||||
{
|
{
|
||||||
QList<ComicDB> comics = getComics(comicsList);
|
QList<ComicDB> comics = getComics(comicsList);
|
||||||
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
DBHelper::insertComicsInReadingList(comics, readingListId, db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
DBHelper::insertComicsInReadingList(comics, readingListId, db);
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComicModel::deleteComicsFromFavorites(const QList<QModelIndex> &comicsList)
|
void ComicModel::deleteComicsFromFavorites(const QList<QModelIndex> &comicsList)
|
||||||
{
|
{
|
||||||
QList<ComicDB> comics = getComics(comicsList);
|
QList<ComicDB> comics = getComics(comicsList);
|
||||||
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
DBHelper::deleteComicsFromFavorites(comics, db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
DBHelper::deleteComicsFromFavorites(comics, db);
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
if (mode == Favorites)
|
if (mode == Favorites)
|
||||||
deleteComicsFromModel(comicsList);
|
deleteComicsFromModel(comicsList);
|
||||||
@ -1025,13 +1005,14 @@ void ComicModel::deleteComicsFromFavorites(const QList<QModelIndex> &comicsList)
|
|||||||
void ComicModel::deleteComicsFromLabel(const QList<QModelIndex> &comicsList, qulonglong labelId)
|
void ComicModel::deleteComicsFromLabel(const QList<QModelIndex> &comicsList, qulonglong labelId)
|
||||||
{
|
{
|
||||||
QList<ComicDB> comics = getComics(comicsList);
|
QList<ComicDB> comics = getComics(comicsList);
|
||||||
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
DBHelper::deleteComicsFromLabel(comics, labelId, db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
DBHelper::deleteComicsFromLabel(comics, labelId, db);
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
deleteComicsFromModel(comicsList);
|
deleteComicsFromModel(comicsList);
|
||||||
}
|
}
|
||||||
@ -1039,13 +1020,14 @@ void ComicModel::deleteComicsFromLabel(const QList<QModelIndex> &comicsList, qul
|
|||||||
void ComicModel::deleteComicsFromReadingList(const QList<QModelIndex> &comicsList, qulonglong readingListId)
|
void ComicModel::deleteComicsFromReadingList(const QList<QModelIndex> &comicsList, qulonglong readingListId)
|
||||||
{
|
{
|
||||||
QList<ComicDB> comics = getComics(comicsList);
|
QList<ComicDB> comics = getComics(comicsList);
|
||||||
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
DBHelper::deleteComicsFromReadingList(comics, readingListId, db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
DBHelper::deleteComicsFromReadingList(comics, readingListId, db);
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
deleteComicsFromModel(comicsList);
|
deleteComicsFromModel(comicsList);
|
||||||
}
|
}
|
||||||
@ -1068,13 +1050,14 @@ void ComicModel::deleteComicsFromModel(const QList<QModelIndex> &comicsList)
|
|||||||
bool ComicModel::isFavorite(const QModelIndex &index)
|
bool ComicModel::isFavorite(const QModelIndex &index)
|
||||||
{
|
{
|
||||||
bool isFavorite;
|
bool isFavorite;
|
||||||
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
isFavorite = DBHelper::isFavoriteComic(_data[index.row()]->data(Id).toLongLong(), db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
isFavorite = DBHelper::isFavoriteComic(_data[index.row()]->data(Id).toLongLong(), db);
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
return isFavorite;
|
return isFavorite;
|
||||||
}
|
}
|
||||||
@ -1082,16 +1065,17 @@ bool ComicModel::isFavorite(const QModelIndex &index)
|
|||||||
void ComicModel::updateRating(int rating, QModelIndex mi)
|
void ComicModel::updateRating(int rating, QModelIndex mi)
|
||||||
{
|
{
|
||||||
ComicDB comic = getComic(mi);
|
ComicDB comic = getComic(mi);
|
||||||
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
//TODO optimize update
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
comic.info.rating = rating;
|
||||||
//TODO optimize update
|
_data[mi.row()]->setData(ComicModel::Rating, rating);
|
||||||
|
DBHelper::update(&(comic.info), db);
|
||||||
|
|
||||||
comic.info.rating = rating;
|
emit dataChanged(mi, mi);
|
||||||
_data[mi.row()]->setData(ComicModel::Rating, rating);
|
connectionName = db.connectionName();
|
||||||
DBHelper::update(&(comic.info), db);
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
emit dataChanged(mi, mi);
|
|
||||||
|
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
}
|
}
|
||||||
|
@ -150,8 +150,7 @@ private:
|
|||||||
QList<ComicItem *> _data;
|
QList<ComicItem *> _data;
|
||||||
|
|
||||||
QString _databasePath;
|
QString _databasePath;
|
||||||
|
QString _databaseConnection;
|
||||||
QSqlDatabase dbTransaction;
|
|
||||||
|
|
||||||
bool enableResorting;
|
bool enableResorting;
|
||||||
Mode mode;
|
Mode mode;
|
||||||
|
@ -97,13 +97,10 @@ QSqlDatabase DataBaseManagement::loadDatabase(QString path)
|
|||||||
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", path + threadId);
|
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", path + threadId);
|
||||||
db.setDatabaseName(path + "/library.ydb");
|
db.setDatabaseName(path + "/library.ydb");
|
||||||
if (!db.open()) {
|
if (!db.open()) {
|
||||||
//se devuelve una base de datos vacía e inválida
|
|
||||||
|
|
||||||
return QSqlDatabase();
|
return QSqlDatabase();
|
||||||
}
|
}
|
||||||
QSqlQuery pragma("PRAGMA foreign_keys = ON", db);
|
QSqlQuery pragma("PRAGMA foreign_keys = ON", db);
|
||||||
//pragma.finish();
|
|
||||||
//devuelve la base de datos
|
|
||||||
return db;
|
return db;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,11 +115,8 @@ QSqlDatabase DataBaseManagement::loadDatabaseFromFile(QString filePath)
|
|||||||
|
|
||||||
return QSqlDatabase();
|
return QSqlDatabase();
|
||||||
}
|
}
|
||||||
{
|
QSqlQuery pragma("PRAGMA foreign_keys = ON", db);
|
||||||
QSqlQuery pragma("PRAGMA foreign_keys = ON", db);
|
|
||||||
}
|
|
||||||
//pragma.finish();
|
|
||||||
//devuelve la base de datos
|
|
||||||
return db;
|
return db;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -324,46 +318,34 @@ bool DataBaseManagement::createV8Tables(QSqlDatabase &database)
|
|||||||
|
|
||||||
void DataBaseManagement::exportComicsInfo(QString source, QString dest)
|
void DataBaseManagement::exportComicsInfo(QString source, QString dest)
|
||||||
{
|
{
|
||||||
//QSqlDatabase sourceDB = loadDatabase(source);
|
QString connectionName = "";
|
||||||
QSqlDatabase destDB = loadDatabaseFromFile(dest);
|
|
||||||
//sourceDB.open();
|
|
||||||
{
|
{
|
||||||
|
QSqlDatabase destDB = loadDatabaseFromFile(dest);
|
||||||
|
|
||||||
QSqlQuery attach(destDB);
|
QSqlQuery attach(destDB);
|
||||||
attach.prepare("ATTACH DATABASE '" + QDir().toNativeSeparators(dest) + "' AS dest;");
|
attach.prepare("ATTACH DATABASE '" + QDir().toNativeSeparators(dest) + "' AS dest;");
|
||||||
//attach.bindValue(":dest",QDir().toNativeSeparators(dest));
|
|
||||||
attach.exec();
|
attach.exec();
|
||||||
//attach.finish();
|
|
||||||
|
|
||||||
QSqlQuery attach2(destDB);
|
QSqlQuery attach2(destDB);
|
||||||
attach2.prepare("ATTACH DATABASE '" + QDir().toNativeSeparators(source) + "' AS source;");
|
attach2.prepare("ATTACH DATABASE '" + QDir().toNativeSeparators(source) + "' AS source;");
|
||||||
attach2.exec();
|
attach2.exec();
|
||||||
//attach2.finish();
|
|
||||||
|
|
||||||
//sourceDB.close();
|
|
||||||
QSqlQuery queryDBInfo(destDB);
|
QSqlQuery queryDBInfo(destDB);
|
||||||
queryDBInfo.prepare("CREATE TABLE dest.db_info (version TEXT NOT NULL)");
|
queryDBInfo.prepare("CREATE TABLE dest.db_info (version TEXT NOT NULL)");
|
||||||
queryDBInfo.exec();
|
queryDBInfo.exec();
|
||||||
//queryDBInfo.finish();
|
|
||||||
|
|
||||||
/*QSqlQuery queryComicsInfo(sourceDB);
|
|
||||||
queryComicsInfo.prepare("CREATE TABLE dest.comic_info (id INTEGER PRIMARY KEY, hash TEXT NOT NULL, edited BOOLEAN DEFAULT FALSE, title TEXT, read BOOLEAN)");
|
|
||||||
queryComicsInfo.exec();*/
|
|
||||||
|
|
||||||
QSqlQuery query("INSERT INTO dest.db_info (version) "
|
QSqlQuery query("INSERT INTO dest.db_info (version) "
|
||||||
"VALUES ('" VERSION "')",
|
"VALUES ('" VERSION "')",
|
||||||
destDB);
|
destDB);
|
||||||
//query.finish();
|
|
||||||
|
|
||||||
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");
|
||||||
exportData.exec();
|
exportData.exec();
|
||||||
//exportData.finish();
|
connectionName = destDB.connectionName();
|
||||||
}
|
}
|
||||||
|
|
||||||
//sourceDB.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
destDB.close();
|
|
||||||
QSqlDatabase::removeDatabase(dest);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DataBaseManagement::importComicsInfo(QString source, QString dest)
|
bool DataBaseManagement::importComicsInfo(QString source, QString dest)
|
||||||
@ -374,10 +356,13 @@ bool DataBaseManagement::importComicsInfo(QString source, QString dest)
|
|||||||
|
|
||||||
bool b = false;
|
bool b = false;
|
||||||
|
|
||||||
QSqlDatabase sourceDB = loadDatabaseFromFile(source);
|
QString sourceDBconnection = "";
|
||||||
QSqlDatabase destDB = loadDatabaseFromFile(dest);
|
QString destDBconnection = "";
|
||||||
|
|
||||||
{
|
{
|
||||||
|
QSqlDatabase sourceDB = loadDatabaseFromFile(source);
|
||||||
|
QSqlDatabase destDB = loadDatabaseFromFile(dest);
|
||||||
|
|
||||||
QSqlQuery pragma("PRAGMA synchronous=OFF", destDB);
|
QSqlQuery pragma("PRAGMA synchronous=OFF", destDB);
|
||||||
|
|
||||||
QSqlQuery newInfo(sourceDB);
|
QSqlQuery newInfo(sourceDB);
|
||||||
@ -538,31 +523,30 @@ bool DataBaseManagement::importComicsInfo(QString source, QString dest)
|
|||||||
|
|
||||||
insert.exec();
|
insert.exec();
|
||||||
}
|
}
|
||||||
//update.finish();
|
|
||||||
//insert.finish();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
destDB.commit();
|
||||||
|
QString hash;
|
||||||
|
foreach (hash, hashes) {
|
||||||
|
QSqlQuery getComic(destDB);
|
||||||
|
getComic.prepare("SELECT c.path,ci.coverPage FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) where ci.hash = :hash");
|
||||||
|
getComic.bindValue(":hash", hash);
|
||||||
|
getComic.exec();
|
||||||
|
if (getComic.next()) {
|
||||||
|
QString basePath = QString(dest).remove("/.yacreaderlibrary/library.ydb");
|
||||||
|
QString path = basePath + getComic.record().value("path").toString();
|
||||||
|
int coverPage = getComic.record().value("coverPage").toInt();
|
||||||
|
ThumbnailCreator tc(path, basePath + "/.yacreaderlibrary/covers/" + hash + ".jpg", coverPage);
|
||||||
|
tc.create();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sourceDBconnection = sourceDB.connectionName();
|
||||||
|
destDBconnection = sourceDB.connectionName();
|
||||||
}
|
}
|
||||||
|
|
||||||
destDB.commit();
|
QSqlDatabase::removeDatabase(sourceDBconnection);
|
||||||
QString hash;
|
QSqlDatabase::removeDatabase(destDBconnection);
|
||||||
foreach (hash, hashes) {
|
|
||||||
QSqlQuery getComic(destDB);
|
|
||||||
getComic.prepare("SELECT c.path,ci.coverPage FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) where ci.hash = :hash");
|
|
||||||
getComic.bindValue(":hash", hash);
|
|
||||||
getComic.exec();
|
|
||||||
if (getComic.next()) {
|
|
||||||
QString basePath = QString(dest).remove("/.yacreaderlibrary/library.ydb");
|
|
||||||
QString path = basePath + getComic.record().value("path").toString();
|
|
||||||
int coverPage = getComic.record().value("coverPage").toInt();
|
|
||||||
ThumbnailCreator tc(path, basePath + "/.yacreaderlibrary/covers/" + hash + ".jpg", coverPage);
|
|
||||||
tc.create();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
destDB.close();
|
|
||||||
sourceDB.close();
|
|
||||||
QSqlDatabase::removeDatabase(source);
|
|
||||||
QSqlDatabase::removeDatabase(dest);
|
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
//TODO fix these bindings
|
//TODO fix these bindings
|
||||||
@ -666,19 +650,23 @@ void DataBaseManagement::bindDouble(const QString &name, const QSqlRecord &recor
|
|||||||
|
|
||||||
QString DataBaseManagement::checkValidDB(const QString &fullPath)
|
QString DataBaseManagement::checkValidDB(const QString &fullPath)
|
||||||
{
|
{
|
||||||
QSqlDatabase db = loadDatabaseFromFile(fullPath);
|
|
||||||
QString versionString = "";
|
QString versionString = "";
|
||||||
if (db.isValid() && db.isOpen()) {
|
QString connectionName = "";
|
||||||
QSqlQuery version(db);
|
{
|
||||||
version.prepare("SELECT * FROM db_info");
|
QSqlDatabase db = loadDatabaseFromFile(fullPath);
|
||||||
version.exec();
|
|
||||||
|
|
||||||
if (version.next())
|
if (db.isValid() && db.isOpen()) {
|
||||||
versionString = version.record().value("version").toString();
|
QSqlQuery version(db);
|
||||||
|
version.prepare("SELECT * FROM db_info");
|
||||||
|
version.exec();
|
||||||
|
|
||||||
|
if (version.next())
|
||||||
|
versionString = version.record().value("version").toString();
|
||||||
|
}
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
|
|
||||||
db.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
return versionString;
|
return versionString;
|
||||||
}
|
}
|
||||||
@ -731,116 +719,120 @@ bool DataBaseManagement::updateToCurrentVersion(const QString &path)
|
|||||||
if (compareVersions(DataBaseManagement::checkValidDB(fullPath), "9.5.0") < 0)
|
if (compareVersions(DataBaseManagement::checkValidDB(fullPath), "9.5.0") < 0)
|
||||||
pre9_5 = true;
|
pre9_5 = true;
|
||||||
|
|
||||||
QSqlDatabase db = loadDatabaseFromFile(fullPath);
|
QString connectionName = "";
|
||||||
bool returnValue = false;
|
bool returnValue = false;
|
||||||
if (db.isValid() && db.isOpen()) {
|
|
||||||
QSqlQuery updateVersion(db);
|
|
||||||
updateVersion.prepare("UPDATE db_info SET "
|
|
||||||
"version = :version");
|
|
||||||
updateVersion.bindValue(":version", VERSION);
|
|
||||||
updateVersion.exec();
|
|
||||||
|
|
||||||
if (updateVersion.numRowsAffected() > 0)
|
{
|
||||||
returnValue = true;
|
QSqlDatabase db = loadDatabaseFromFile(fullPath);
|
||||||
|
if (db.isValid() && db.isOpen()) {
|
||||||
|
QSqlQuery updateVersion(db);
|
||||||
|
updateVersion.prepare("UPDATE db_info SET "
|
||||||
|
"version = :version");
|
||||||
|
updateVersion.bindValue(":version", VERSION);
|
||||||
|
updateVersion.exec();
|
||||||
|
|
||||||
if (pre7) //TODO: execute only if previous version was < 7.0
|
if (updateVersion.numRowsAffected() > 0)
|
||||||
{
|
returnValue = true;
|
||||||
//new 7.0 fields
|
|
||||||
QStringList columnDefs;
|
|
||||||
columnDefs << "hasBeenOpened BOOLEAN DEFAULT 0"
|
|
||||||
<< "rating INTEGER DEFAULT 0"
|
|
||||||
<< "currentPage INTEGER DEFAULT 1"
|
|
||||||
<< "bookmark1 INTEGER DEFAULT -1"
|
|
||||||
<< "bookmark2 INTEGER DEFAULT -1"
|
|
||||||
<< "bookmark3 INTEGER DEFAULT -1"
|
|
||||||
<< "brightness INTEGER DEFAULT -1"
|
|
||||||
<< "contrast INTEGER DEFAULT -1"
|
|
||||||
<< "gamma INTEGER DEFAULT -1";
|
|
||||||
|
|
||||||
bool successAddingColumns = addColumns("comic_info", columnDefs, db);
|
if (pre7) //TODO: execute only if previous version was < 7.0
|
||||||
returnValue = returnValue && successAddingColumns;
|
|
||||||
}
|
|
||||||
//TODO update hasBeenOpened value
|
|
||||||
|
|
||||||
if (pre7_1) {
|
|
||||||
{
|
{
|
||||||
|
//new 7.0 fields
|
||||||
QStringList columnDefs;
|
QStringList columnDefs;
|
||||||
columnDefs << "finished BOOLEAN DEFAULT 0"
|
columnDefs << "hasBeenOpened BOOLEAN DEFAULT 0"
|
||||||
<< "completed BOOLEAN DEFAULT 1";
|
<< "rating INTEGER DEFAULT 0"
|
||||||
bool successAddingColumns = addColumns("folder", columnDefs, db);
|
<< "currentPage INTEGER DEFAULT 1"
|
||||||
returnValue = returnValue && successAddingColumns;
|
<< "bookmark1 INTEGER DEFAULT -1"
|
||||||
}
|
<< "bookmark2 INTEGER DEFAULT -1"
|
||||||
|
<< "bookmark3 INTEGER DEFAULT -1"
|
||||||
|
<< "brightness INTEGER DEFAULT -1"
|
||||||
|
<< "contrast INTEGER DEFAULT -1"
|
||||||
|
<< "gamma INTEGER DEFAULT -1";
|
||||||
|
|
||||||
{ //comic_info
|
|
||||||
QStringList columnDefs;
|
|
||||||
columnDefs << "comicVineID TEXT DEFAULT NULL";
|
|
||||||
bool successAddingColumns = addColumns("comic_info", columnDefs, db);
|
bool successAddingColumns = addColumns("comic_info", columnDefs, db);
|
||||||
returnValue = returnValue && successAddingColumns;
|
returnValue = returnValue && successAddingColumns;
|
||||||
}
|
}
|
||||||
}
|
//TODO update hasBeenOpened value
|
||||||
|
|
||||||
if (pre8) {
|
if (pre7_1) {
|
||||||
bool successCreatingNewTables = createV8Tables(db);
|
{
|
||||||
returnValue = returnValue && successCreatingNewTables;
|
QStringList columnDefs;
|
||||||
}
|
columnDefs << "finished BOOLEAN DEFAULT 0"
|
||||||
|
<< "completed BOOLEAN DEFAULT 1";
|
||||||
if (pre9_5) {
|
bool successAddingColumns = addColumns("folder", columnDefs, db);
|
||||||
{ //folder
|
returnValue = returnValue && successAddingColumns;
|
||||||
QStringList columnDefs;
|
|
||||||
//a full library update is needed after updating the table
|
|
||||||
columnDefs << "numChildren INTEGER";
|
|
||||||
columnDefs << "firstChildHash TEXT";
|
|
||||||
columnDefs << "customImage TEXT";
|
|
||||||
bool successAddingColumns = addColumns("folder", columnDefs, db);
|
|
||||||
returnValue = returnValue && successAddingColumns;
|
|
||||||
}
|
|
||||||
|
|
||||||
{ //comic_info
|
|
||||||
QStringList columnDefs;
|
|
||||||
columnDefs << "lastTimeOpened INTEGER";
|
|
||||||
columnDefs << "coverSizeRatio REAL";
|
|
||||||
columnDefs << "originalCoverSize TEXT";
|
|
||||||
bool successAddingColumns = addColumns("comic_info", columnDefs, db);
|
|
||||||
returnValue = returnValue && successAddingColumns;
|
|
||||||
|
|
||||||
QSqlQuery queryIndexLastTimeOpened(db);
|
|
||||||
bool successCreatingIndex = queryIndexLastTimeOpened.exec("CREATE INDEX last_time_opened_index ON comic_info (lastTimeOpened)");
|
|
||||||
returnValue = returnValue && successCreatingIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
//update folders info
|
|
||||||
{
|
|
||||||
DBHelper::updateChildrenInfo(db);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
QSqlQuery selectQuery(db);
|
|
||||||
selectQuery.prepare("SELECT id, hash FROM comic_info");
|
|
||||||
selectQuery.exec();
|
|
||||||
|
|
||||||
db.transaction();
|
|
||||||
|
|
||||||
QSqlQuery updateCoverInfo(db);
|
|
||||||
updateCoverInfo.prepare("UPDATE comic_info SET coverSizeRatio = :coverSizeRatio WHERE id = :id");
|
|
||||||
|
|
||||||
QImageReader thumbnail;
|
|
||||||
while (selectQuery.next()) {
|
|
||||||
thumbnail.setFileName(path % "/covers/" % selectQuery.value(1).toString() % ".jpg");
|
|
||||||
|
|
||||||
float coverSizeRatio = static_cast<float>(thumbnail.size().width()) / thumbnail.size().height();
|
|
||||||
updateCoverInfo.bindValue(":coverSizeRatio", coverSizeRatio);
|
|
||||||
updateCoverInfo.bindValue(":id", selectQuery.value(0));
|
|
||||||
|
|
||||||
updateCoverInfo.exec();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
db.commit();
|
{ //comic_info
|
||||||
|
QStringList columnDefs;
|
||||||
|
columnDefs << "comicVineID TEXT DEFAULT NULL";
|
||||||
|
bool successAddingColumns = addColumns("comic_info", columnDefs, db);
|
||||||
|
returnValue = returnValue && successAddingColumns;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pre8) {
|
||||||
|
bool successCreatingNewTables = createV8Tables(db);
|
||||||
|
returnValue = returnValue && successCreatingNewTables;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pre9_5) {
|
||||||
|
{ //folder
|
||||||
|
QStringList columnDefs;
|
||||||
|
//a full library update is needed after updating the table
|
||||||
|
columnDefs << "numChildren INTEGER";
|
||||||
|
columnDefs << "firstChildHash TEXT";
|
||||||
|
columnDefs << "customImage TEXT";
|
||||||
|
bool successAddingColumns = addColumns("folder", columnDefs, db);
|
||||||
|
returnValue = returnValue && successAddingColumns;
|
||||||
|
}
|
||||||
|
|
||||||
|
{ //comic_info
|
||||||
|
QStringList columnDefs;
|
||||||
|
columnDefs << "lastTimeOpened INTEGER";
|
||||||
|
columnDefs << "coverSizeRatio REAL";
|
||||||
|
columnDefs << "originalCoverSize TEXT";
|
||||||
|
bool successAddingColumns = addColumns("comic_info", columnDefs, db);
|
||||||
|
returnValue = returnValue && successAddingColumns;
|
||||||
|
|
||||||
|
QSqlQuery queryIndexLastTimeOpened(db);
|
||||||
|
bool successCreatingIndex = queryIndexLastTimeOpened.exec("CREATE INDEX last_time_opened_index ON comic_info (lastTimeOpened)");
|
||||||
|
returnValue = returnValue && successCreatingIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
//update folders info
|
||||||
|
{
|
||||||
|
DBHelper::updateChildrenInfo(db);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
QSqlQuery selectQuery(db);
|
||||||
|
selectQuery.prepare("SELECT id, hash FROM comic_info");
|
||||||
|
selectQuery.exec();
|
||||||
|
|
||||||
|
db.transaction();
|
||||||
|
|
||||||
|
QSqlQuery updateCoverInfo(db);
|
||||||
|
updateCoverInfo.prepare("UPDATE comic_info SET coverSizeRatio = :coverSizeRatio WHERE id = :id");
|
||||||
|
|
||||||
|
QImageReader thumbnail;
|
||||||
|
while (selectQuery.next()) {
|
||||||
|
thumbnail.setFileName(path % "/covers/" % selectQuery.value(1).toString() % ".jpg");
|
||||||
|
|
||||||
|
float coverSizeRatio = static_cast<float>(thumbnail.size().width()) / thumbnail.size().height();
|
||||||
|
updateCoverInfo.bindValue(":coverSizeRatio", coverSizeRatio);
|
||||||
|
updateCoverInfo.bindValue(":id", selectQuery.value(0));
|
||||||
|
|
||||||
|
updateCoverInfo.exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
db.commit();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
|
|
||||||
db.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
return returnValue;
|
return returnValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -291,16 +291,17 @@ void FolderModel::setupModelData(QString path)
|
|||||||
|
|
||||||
//cargar la base de datos
|
//cargar la base de datos
|
||||||
_databasePath = path;
|
_databasePath = path;
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(path);
|
|
||||||
//crear la consulta
|
//crear la consulta
|
||||||
|
QString connectionName = "";
|
||||||
{
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(path);
|
||||||
QSqlQuery selectQuery("select * from folder where id <> 1 order by parentId,name", db);
|
QSqlQuery selectQuery("select * from folder where id <> 1 order by parentId,name", db);
|
||||||
|
|
||||||
setupModelData(selectQuery, rootItem);
|
setupModelData(selectQuery, rootItem);
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
//selectQuery.finish();
|
//selectQuery.finish();
|
||||||
db.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
endResetModel();
|
endResetModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -407,38 +408,44 @@ void FolderModel::resetFilter()
|
|||||||
|
|
||||||
void FolderModel::updateFolderCompletedStatus(const QModelIndexList &list, bool status)
|
void FolderModel::updateFolderCompletedStatus(const QModelIndexList &list, bool status)
|
||||||
{
|
{
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
QString connectionName = "";
|
||||||
db.transaction();
|
{
|
||||||
foreach (QModelIndex mi, list) {
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
auto item = static_cast<FolderItem *>(mi.internalPointer());
|
db.transaction();
|
||||||
item->setData(FolderModel::Completed, status);
|
foreach (QModelIndex mi, list) {
|
||||||
|
auto item = static_cast<FolderItem *>(mi.internalPointer());
|
||||||
|
item->setData(FolderModel::Completed, status);
|
||||||
|
|
||||||
Folder f = DBHelper::loadFolder(item->id, db);
|
Folder f = DBHelper::loadFolder(item->id, db);
|
||||||
f.setCompleted(status);
|
f.setCompleted(status);
|
||||||
DBHelper::update(f, db);
|
DBHelper::update(f, db);
|
||||||
|
}
|
||||||
|
db.commit();
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
db.commit();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
emit dataChanged(index(list.first().row(), FolderModel::Name), index(list.last().row(), FolderModel::Completed));
|
emit dataChanged(index(list.first().row(), FolderModel::Name), index(list.last().row(), FolderModel::Completed));
|
||||||
}
|
}
|
||||||
|
|
||||||
void FolderModel::updateFolderFinishedStatus(const QModelIndexList &list, bool status)
|
void FolderModel::updateFolderFinishedStatus(const QModelIndexList &list, bool status)
|
||||||
{
|
{
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
QString connectionName = "";
|
||||||
db.transaction();
|
{
|
||||||
foreach (QModelIndex mi, list) {
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
auto item = static_cast<FolderItem *>(mi.internalPointer());
|
db.transaction();
|
||||||
item->setData(FolderModel::Finished, status);
|
foreach (QModelIndex mi, list) {
|
||||||
|
auto item = static_cast<FolderItem *>(mi.internalPointer());
|
||||||
|
item->setData(FolderModel::Finished, status);
|
||||||
|
|
||||||
Folder f = DBHelper::loadFolder(item->id, db);
|
Folder f = DBHelper::loadFolder(item->id, db);
|
||||||
f.setFinished(status);
|
f.setFinished(status);
|
||||||
DBHelper::update(f, db);
|
DBHelper::update(f, db);
|
||||||
|
}
|
||||||
|
db.commit();
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
db.commit();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
emit dataChanged(index(list.first().row(), FolderModel::Name), index(list.last().row(), FolderModel::Completed));
|
emit dataChanged(index(list.first().row(), FolderModel::Name), index(list.last().row(), FolderModel::Completed));
|
||||||
}
|
}
|
||||||
@ -451,15 +458,17 @@ QStringList FolderModel::getSubfoldersNames(const QModelIndex &mi)
|
|||||||
auto item = static_cast<FolderItem *>(mi.internalPointer());
|
auto item = static_cast<FolderItem *>(mi.internalPointer());
|
||||||
id = item->id;
|
id = item->id;
|
||||||
}
|
}
|
||||||
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
db.transaction();
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
result = DBHelper::loadSubfoldersNames(id, db);
|
||||||
db.transaction();
|
|
||||||
|
|
||||||
result = DBHelper::loadSubfoldersNames(id, db);
|
db.commit();
|
||||||
|
connectionName = db.connectionName();
|
||||||
db.commit();
|
}
|
||||||
db.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
//TODO sort result))
|
//TODO sort result))
|
||||||
qSort(result.begin(), result.end(), naturalSortLessThanCI);
|
qSort(result.begin(), result.end(), naturalSortLessThanCI);
|
||||||
@ -481,55 +490,57 @@ void FolderModel::fetchMoreFromDB(const QModelIndex &parent)
|
|||||||
endRemoveRows();
|
endRemoveRows();
|
||||||
}
|
}
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
|
||||||
QList<FolderItem *> items;
|
QList<FolderItem *> items;
|
||||||
QList<FolderItem *> nextLevelItems;
|
QList<FolderItem *> nextLevelItems;
|
||||||
|
|
||||||
QSqlQuery selectQuery(db);
|
QSqlQuery selectQuery(db);
|
||||||
selectQuery.prepare("select * from folder where id <> 1 and parentId = :parentId order by parentId,name");
|
selectQuery.prepare("select * from folder where id <> 1 and parentId = :parentId order by parentId,name");
|
||||||
|
|
||||||
items << item;
|
items << item;
|
||||||
bool firstLevelUpdated = false;
|
bool firstLevelUpdated = false;
|
||||||
while (items.size() > 0) {
|
while (items.size() > 0) {
|
||||||
nextLevelItems.clear();
|
nextLevelItems.clear();
|
||||||
foreach (FolderItem *item, items) {
|
foreach (FolderItem *item, items) {
|
||||||
QLOG_DEBUG() << "ID " << item->id;
|
QLOG_DEBUG() << "ID " << item->id;
|
||||||
selectQuery.bindValue(":parentId", item->id);
|
selectQuery.bindValue(":parentId", item->id);
|
||||||
|
|
||||||
selectQuery.exec();
|
selectQuery.exec();
|
||||||
|
|
||||||
if (!firstLevelUpdated) {
|
if (!firstLevelUpdated) {
|
||||||
//NO size support
|
//NO size support
|
||||||
int numResults = 0;
|
int numResults = 0;
|
||||||
while (selectQuery.next())
|
while (selectQuery.next())
|
||||||
numResults++;
|
numResults++;
|
||||||
|
|
||||||
if (!selectQuery.seek(-1))
|
if (!selectQuery.seek(-1))
|
||||||
selectQuery.exec();
|
selectQuery.exec();
|
||||||
//END no size support
|
//END no size support
|
||||||
|
|
||||||
beginInsertRows(parent, 0, numResults - 1);
|
beginInsertRows(parent, 0, numResults - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
updateFolderModelData(selectQuery, item);
|
||||||
|
|
||||||
|
if (!firstLevelUpdated) {
|
||||||
|
endInsertRows();
|
||||||
|
firstLevelUpdated = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
nextLevelItems << item->children();
|
||||||
}
|
}
|
||||||
|
|
||||||
updateFolderModelData(selectQuery, item);
|
items.clear();
|
||||||
|
items = nextLevelItems;
|
||||||
if (!firstLevelUpdated) {
|
|
||||||
endInsertRows();
|
|
||||||
firstLevelUpdated = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
nextLevelItems << item->children();
|
|
||||||
}
|
}
|
||||||
|
connectionName = db.connectionName();
|
||||||
items.clear();
|
|
||||||
items = nextLevelItems;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QLOG_DEBUG() << "item->childCount()-1" << item->childCount() - 1;
|
QLOG_DEBUG() << "item->childCount()-1" << item->childCount() - 1;
|
||||||
|
|
||||||
db.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QModelIndex FolderModel::addFolderAtParent(const QString &folderName, const QModelIndex &parent)
|
QModelIndex FolderModel::addFolderAtParent(const QString &folderName, const QModelIndex &parent)
|
||||||
@ -545,11 +556,14 @@ QModelIndex FolderModel::addFolderAtParent(const QString &folderName, const QMod
|
|||||||
newFolder.name = folderName;
|
newFolder.name = folderName;
|
||||||
newFolder.parentId = parentItem->id;
|
newFolder.parentId = parentItem->id;
|
||||||
newFolder.path = parentItem->data(1).toString() + "/" + folderName;
|
newFolder.path = parentItem->data(1).toString() + "/" + folderName;
|
||||||
|
QString connectionName = "";
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
{
|
||||||
newFolder.id = DBHelper::insert(&newFolder, db);
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
DBHelper::updateChildrenInfo(parentItem->id, db);
|
newFolder.id = DBHelper::insert(&newFolder, db);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
DBHelper::updateChildrenInfo(parentItem->id, db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
|
|
||||||
int destRow = 0;
|
int destRow = 0;
|
||||||
|
|
||||||
@ -585,19 +599,27 @@ void FolderModel::deleteFolder(const QModelIndex &mi)
|
|||||||
Folder f;
|
Folder f;
|
||||||
f.setId(item->id);
|
f.setId(item->id);
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
QString connectionName = "";
|
||||||
DBHelper::removeFromDB(&f, db);
|
{
|
||||||
DBHelper::updateChildrenInfo(item->parent()->id, db);
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
DBHelper::removeFromDB(&f, db);
|
||||||
|
DBHelper::updateChildrenInfo(item->parent()->id, db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
|
|
||||||
endRemoveRows();
|
endRemoveRows();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FolderModel::updateFolderChildrenInfo(qulonglong folderId)
|
void FolderModel::updateFolderChildrenInfo(qulonglong folderId)
|
||||||
{
|
{
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
QString connectionName = "";
|
||||||
DBHelper::updateChildrenInfo(folderId, db);
|
{
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
DBHelper::updateChildrenInfo(folderId, db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
}
|
}
|
||||||
|
|
||||||
//PROXY
|
//PROXY
|
||||||
@ -658,10 +680,10 @@ void FolderModelProxy::setupFilteredModelData()
|
|||||||
|
|
||||||
auto model = static_cast<FolderModel *>(sourceModel());
|
auto model = static_cast<FolderModel *>(sourceModel());
|
||||||
|
|
||||||
//cargar la base de datos
|
QString connectionName = "";
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(model->_databasePath);
|
|
||||||
//crear la consulta
|
|
||||||
{
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(model->_databasePath);
|
||||||
|
|
||||||
QSqlQuery selectQuery(db); //TODO check
|
QSqlQuery selectQuery(db); //TODO check
|
||||||
if (!includeComics) {
|
if (!includeComics) {
|
||||||
selectQuery.prepare("select * from folder where id <> 1 and upper(name) like upper(:filter) order by parentId,name ");
|
selectQuery.prepare("select * from folder where id <> 1 and upper(name) like upper(:filter) order by parentId,name ");
|
||||||
@ -700,10 +722,9 @@ void FolderModelProxy::setupFilteredModelData()
|
|||||||
selectQuery.exec();
|
selectQuery.exec();
|
||||||
|
|
||||||
setupFilteredModelData(selectQuery, rootItem);
|
setupFilteredModelData(selectQuery, rootItem);
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
//selectQuery.finish();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
endResetModel();
|
endResetModel();
|
||||||
}
|
}
|
||||||
|
@ -372,69 +372,68 @@ void ReadingListModel::setupReadingListsData(QString path)
|
|||||||
|
|
||||||
void ReadingListModel::addNewLabel(const QString &name, YACReader::LabelColors color)
|
void ReadingListModel::addNewLabel(const QString &name, YACReader::LabelColors color)
|
||||||
{
|
{
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
QString connectionName = "";
|
||||||
qulonglong id = DBHelper::insertLabel(name, color, db);
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
qulonglong id = DBHelper::insertLabel(name, color, db);
|
||||||
|
|
||||||
int newPos = addLabelIntoList(new LabelItem(QList<QVariant>() << name << YACReader::colorToName(color) << id << color));
|
int newPos = addLabelIntoList(new LabelItem(QList<QVariant>() << name << YACReader::colorToName(color) << id << color));
|
||||||
beginInsertRows(QModelIndex(), specialLists.count() + 1 + newPos + 1, specialLists.count() + 1 + newPos + 1);
|
beginInsertRows(QModelIndex(), specialLists.count() + 1 + newPos + 1, specialLists.count() + 1 + newPos + 1);
|
||||||
|
|
||||||
endInsertRows();
|
endInsertRows();
|
||||||
|
connectionName = db.connectionName();
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReadingListModel::addReadingList(const QString &name)
|
void ReadingListModel::addReadingList(const QString &name)
|
||||||
{
|
{
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
beginInsertRows(QModelIndex(), 0, 0); //TODO calculate the right coordinates before inserting
|
||||||
|
|
||||||
beginInsertRows(QModelIndex(), 0, 0); //TODO calculate the right coordinates before inserting
|
qulonglong id = DBHelper::insertReadingList(name, db);
|
||||||
|
ReadingListItem *newItem;
|
||||||
|
rootItem->appendChild(newItem = new ReadingListItem(QList<QVariant>()
|
||||||
|
<< name
|
||||||
|
<< id
|
||||||
|
<< false
|
||||||
|
<< true
|
||||||
|
<< 0));
|
||||||
|
|
||||||
qulonglong id = DBHelper::insertReadingList(name, db);
|
items.insert(id, newItem);
|
||||||
ReadingListItem *newItem;
|
|
||||||
rootItem->appendChild(newItem = new ReadingListItem(QList<QVariant>()
|
|
||||||
<< name
|
|
||||||
<< id
|
|
||||||
<< false
|
|
||||||
<< true
|
|
||||||
<< 0));
|
|
||||||
|
|
||||||
items.insert(id, newItem);
|
endInsertRows();
|
||||||
|
connectionName = db.connectionName();
|
||||||
/*int pos = rootItem->children().indexOf(newItem);
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
pos += specialLists.count()+1+labels.count()+labels.count()>0?1:0;*/
|
|
||||||
|
|
||||||
endInsertRows();
|
|
||||||
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReadingListModel::addReadingListAt(const QString &name, const QModelIndex &mi)
|
void ReadingListModel::addReadingListAt(const QString &name, const QModelIndex &mi)
|
||||||
{
|
{
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
|
||||||
beginInsertRows(mi, 0, 0); //TODO calculate the right coordinates before inserting
|
beginInsertRows(mi, 0, 0); //TODO calculate the right coordinates before inserting
|
||||||
|
|
||||||
auto readingListParent = static_cast<ReadingListItem *>(mi.internalPointer());
|
auto readingListParent = static_cast<ReadingListItem *>(mi.internalPointer());
|
||||||
qulonglong id = DBHelper::insertReadingSubList(name, mi.data(IDRole).toULongLong(), readingListParent->childCount(), db);
|
qulonglong id = DBHelper::insertReadingSubList(name, mi.data(IDRole).toULongLong(), readingListParent->childCount(), db);
|
||||||
ReadingListItem *newItem;
|
ReadingListItem *newItem;
|
||||||
|
|
||||||
readingListParent->appendChild(newItem = new ReadingListItem(QList<QVariant>()
|
readingListParent->appendChild(newItem = new ReadingListItem(QList<QVariant>()
|
||||||
<< name
|
<< name
|
||||||
<< id
|
<< id
|
||||||
<< false
|
<< false
|
||||||
<< true
|
<< true
|
||||||
<< readingListParent->childCount()));
|
<< readingListParent->childCount()));
|
||||||
|
|
||||||
items.insert(id, newItem);
|
items.insert(id, newItem);
|
||||||
|
endInsertRows();
|
||||||
/*int pos = readingListParent->children().indexOf(newItem);
|
connectionName = db.connectionName();
|
||||||
|
}
|
||||||
pos += specialLists.count()+1+labels.count()+labels.count()>0?1:0;*/
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
|
|
||||||
endInsertRows();
|
|
||||||
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ReadingListModel::isEditable(const QModelIndex &mi)
|
bool ReadingListModel::isEditable(const QModelIndex &mi)
|
||||||
@ -477,29 +476,31 @@ void ReadingListModel::rename(const QModelIndex &mi, const QString &name)
|
|||||||
{
|
{
|
||||||
if (!isEditable(mi))
|
if (!isEditable(mi))
|
||||||
return;
|
return;
|
||||||
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
auto item = static_cast<ListItem *>(mi.internalPointer());
|
||||||
|
|
||||||
auto item = static_cast<ListItem *>(mi.internalPointer());
|
if (typeid(*item) == typeid(ReadingListItem)) {
|
||||||
|
auto rli = static_cast<ReadingListItem *>(item);
|
||||||
|
rli->setName(name);
|
||||||
|
DBHelper::renameList(item->getId(), name, db);
|
||||||
|
|
||||||
if (typeid(*item) == typeid(ReadingListItem)) {
|
if (rli->parent->getId() != 0) {
|
||||||
auto rli = static_cast<ReadingListItem *>(item);
|
//TODO
|
||||||
rli->setName(name);
|
//move row depending on the name
|
||||||
DBHelper::renameList(item->getId(), name, db);
|
} else
|
||||||
|
emit dataChanged(index(mi.row(), 0), index(mi.row(), 0));
|
||||||
if (rli->parent->getId() != 0) {
|
} else if (typeid(*item) == typeid(LabelItem)) {
|
||||||
//TODO
|
auto li = static_cast<LabelItem *>(item);
|
||||||
//move row depending on the name
|
li->setName(name);
|
||||||
} else
|
DBHelper::renameLabel(item->getId(), name, db);
|
||||||
emit dataChanged(index(mi.row(), 0), index(mi.row(), 0));
|
emit dataChanged(index(mi.row(), 0), index(mi.row(), 0));
|
||||||
} else if (typeid(*item) == typeid(LabelItem)) {
|
}
|
||||||
auto li = static_cast<LabelItem *>(item);
|
connectionName = db.connectionName();
|
||||||
li->setName(name);
|
|
||||||
DBHelper::renameLabel(item->getId(), name, db);
|
|
||||||
emit dataChanged(index(mi.row(), 0), index(mi.row(), 0));
|
|
||||||
}
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReadingListModel::deleteItem(const QModelIndex &mi)
|
void ReadingListModel::deleteItem(const QModelIndex &mi)
|
||||||
@ -507,28 +508,30 @@ void ReadingListModel::deleteItem(const QModelIndex &mi)
|
|||||||
if (isEditable(mi)) {
|
if (isEditable(mi)) {
|
||||||
QLOG_DEBUG() << "parent row :" << mi.parent().data() << "-" << mi.row();
|
QLOG_DEBUG() << "parent row :" << mi.parent().data() << "-" << mi.row();
|
||||||
beginRemoveRows(mi.parent(), mi.row(), mi.row());
|
beginRemoveRows(mi.parent(), mi.row(), mi.row());
|
||||||
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
auto item = static_cast<ListItem *>(mi.internalPointer());
|
||||||
|
|
||||||
auto item = static_cast<ListItem *>(mi.internalPointer());
|
if (typeid(*item) == typeid(ReadingListItem)) {
|
||||||
|
auto rli = static_cast<ReadingListItem *>(item);
|
||||||
if (typeid(*item) == typeid(ReadingListItem)) {
|
QLOG_DEBUG() << "num children : " << rli->parent->childCount();
|
||||||
auto rli = static_cast<ReadingListItem *>(item);
|
rli->parent->removeChild(rli);
|
||||||
QLOG_DEBUG() << "num children : " << rli->parent->childCount();
|
QLOG_DEBUG() << "num children : " << rli->parent->childCount();
|
||||||
rli->parent->removeChild(rli);
|
DBHelper::removeListFromDB(item->getId(), db);
|
||||||
QLOG_DEBUG() << "num children : " << rli->parent->childCount();
|
if (rli->parent->getId() != 0) {
|
||||||
DBHelper::removeListFromDB(item->getId(), db);
|
reorderingChildren(rli->parent->children());
|
||||||
if (rli->parent->getId() != 0) {
|
}
|
||||||
reorderingChildren(rli->parent->children());
|
QLOG_DEBUG() << "num children : " << rli->parent->childCount();
|
||||||
|
} else if (typeid(*item) == typeid(LabelItem)) {
|
||||||
|
auto li = static_cast<LabelItem *>(item);
|
||||||
|
labels.removeOne(li);
|
||||||
|
DBHelper::removeLabelFromDB(item->getId(), db);
|
||||||
}
|
}
|
||||||
QLOG_DEBUG() << "num children : " << rli->parent->childCount();
|
connectionName = db.connectionName();
|
||||||
} else if (typeid(*item) == typeid(LabelItem)) {
|
|
||||||
auto li = static_cast<LabelItem *>(item);
|
|
||||||
labels.removeOne(li);
|
|
||||||
DBHelper::removeLabelFromDB(item->getId(), db);
|
|
||||||
}
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
endRemoveRows();
|
endRemoveRows();
|
||||||
}
|
}
|
||||||
@ -705,10 +708,13 @@ void ReadingListModel::reorderingChildren(QList<ReadingListItem *> children)
|
|||||||
item->setOrdering(i++);
|
item->setOrdering(i++);
|
||||||
childrenIds << item->getId();
|
childrenIds << item->getId();
|
||||||
}
|
}
|
||||||
|
QString connectionName = "";
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
{
|
||||||
DBHelper::reasignOrderToSublists(childrenIds, db);
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
DBHelper::reasignOrderToSublists(childrenIds, db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ReadingListModel::rowIsSpecialList(int row, const QModelIndex &parent) const
|
bool ReadingListModel::rowIsSpecialList(int row, const QModelIndex &parent) const
|
||||||
|
@ -35,12 +35,15 @@ YACReaderLibraries DBHelper::getLibraries()
|
|||||||
QList<LibraryItem *> DBHelper::getFolderSubfoldersFromLibrary(qulonglong libraryId, qulonglong folderId)
|
QList<LibraryItem *> DBHelper::getFolderSubfoldersFromLibrary(qulonglong libraryId, qulonglong folderId)
|
||||||
{
|
{
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
QString connectionName = "";
|
||||||
|
QList<LibraryItem *> list;
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
|
list = DBHelper::getFoldersFromParent(folderId, db, false);
|
||||||
|
|
||||||
QList<LibraryItem *> list = DBHelper::getFoldersFromParent(folderId, db, false);
|
connectionName = db.connectionName();
|
||||||
|
}
|
||||||
db.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
QList<LibraryItem *> DBHelper::getFolderComicsFromLibrary(qulonglong libraryId, qulonglong folderId)
|
QList<LibraryItem *> DBHelper::getFolderComicsFromLibrary(qulonglong libraryId, qulonglong folderId)
|
||||||
@ -51,42 +54,43 @@ QList<LibraryItem *> DBHelper::getFolderComicsFromLibrary(qulonglong libraryId,
|
|||||||
QList<LibraryItem *> DBHelper::getFolderComicsFromLibrary(qulonglong libraryId, qulonglong folderId, bool sort)
|
QList<LibraryItem *> DBHelper::getFolderComicsFromLibrary(qulonglong libraryId, qulonglong folderId, bool sort)
|
||||||
{
|
{
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
QString connectionName = "";
|
||||||
|
QList<LibraryItem *> list;
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
|
list = DBHelper::getComicsFromParent(folderId, db, sort);
|
||||||
|
|
||||||
QList<LibraryItem *> list = DBHelper::getComicsFromParent(folderId, db, sort);
|
connectionName = db.connectionName();
|
||||||
|
}
|
||||||
db.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
quint32 DBHelper::getNumChildrenFromFolder(qulonglong libraryId, qulonglong folderId)
|
quint32 DBHelper::getNumChildrenFromFolder(qulonglong libraryId, qulonglong folderId)
|
||||||
{
|
{
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
|
||||||
|
|
||||||
quint32 result = 0;
|
quint32 result = 0;
|
||||||
|
QString connectionName = "";
|
||||||
|
|
||||||
{
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
|
|
||||||
QSqlQuery selectQuery(db);
|
QSqlQuery selectQuery(db);
|
||||||
selectQuery.prepare("SELECT count(*) FROM folder WHERE parentId = :parentId and id <> 1");
|
selectQuery.prepare("SELECT count(*) FROM folder WHERE parentId = :parentId and id <> 1");
|
||||||
selectQuery.bindValue(":parentId", folderId);
|
selectQuery.bindValue(":parentId", folderId);
|
||||||
selectQuery.exec();
|
selectQuery.exec();
|
||||||
|
|
||||||
result += selectQuery.record().value(0).toULongLong();
|
result += selectQuery.record().value(0).toULongLong();
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
QSqlQuery selectQuery(db);
|
|
||||||
selectQuery.prepare("SELECT count(*) FROM comic c WHERE c.parentId = :parentId");
|
selectQuery.prepare("SELECT count(*) FROM comic c WHERE c.parentId = :parentId");
|
||||||
selectQuery.bindValue(":parentId", folderId);
|
selectQuery.bindValue(":parentId", folderId);
|
||||||
selectQuery.exec();
|
selectQuery.exec();
|
||||||
|
|
||||||
result += selectQuery.record().value(0).toULongLong();
|
result += selectQuery.record().value(0).toULongLong();
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
|
|
||||||
db.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -94,45 +98,57 @@ quint32 DBHelper::getNumChildrenFromFolder(qulonglong libraryId, qulonglong fold
|
|||||||
qulonglong DBHelper::getParentFromComicFolderId(qulonglong libraryId, qulonglong id)
|
qulonglong DBHelper::getParentFromComicFolderId(qulonglong libraryId, qulonglong id)
|
||||||
{
|
{
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
QString connectionName = "";
|
||||||
|
Folder f;
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
|
|
||||||
Folder f = DBHelper::loadFolder(id, db);
|
f = DBHelper::loadFolder(id, db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
|
}
|
||||||
|
|
||||||
db.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
return f.parentId;
|
return f.parentId;
|
||||||
}
|
}
|
||||||
ComicDB DBHelper::getComicInfo(qulonglong libraryId, qulonglong id)
|
ComicDB DBHelper::getComicInfo(qulonglong libraryId, qulonglong id)
|
||||||
{
|
{
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
QString connectionName = "";
|
||||||
|
ComicDB comic;
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
|
|
||||||
ComicDB comic = DBHelper::loadComic(id, db);
|
comic = DBHelper::loadComic(id, db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
db.close();
|
}
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
return comic;
|
return comic;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ComicDB> DBHelper::getSiblings(qulonglong libraryId, qulonglong parentId)
|
QList<ComicDB> DBHelper::getSiblings(qulonglong libraryId, qulonglong parentId)
|
||||||
{
|
{
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
QString connectionName = "";
|
||||||
|
QList<ComicDB> comics;
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
|
comics = DBHelper::getSortedComicsFromParent(parentId, db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
|
}
|
||||||
|
|
||||||
QList<ComicDB> comics = DBHelper::getSortedComicsFromParent(parentId, db);
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
return comics;
|
return comics;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString DBHelper::getFolderName(qulonglong libraryId, qulonglong id)
|
QString DBHelper::getFolderName(qulonglong libraryId, qulonglong id)
|
||||||
{
|
{
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
|
||||||
|
|
||||||
QString name = "";
|
QString name = "";
|
||||||
|
QString connectionName = "";
|
||||||
|
|
||||||
{
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
QSqlQuery selectQuery(db); //TODO check
|
QSqlQuery selectQuery(db); //TODO check
|
||||||
selectQuery.prepare("SELECT name FROM folder WHERE id = :id");
|
selectQuery.prepare("SELECT name FROM folder WHERE id = :id");
|
||||||
selectQuery.bindValue(":id", id);
|
selectQuery.bindValue(":id", id);
|
||||||
@ -141,10 +157,10 @@ QString DBHelper::getFolderName(qulonglong libraryId, qulonglong id)
|
|||||||
if (selectQuery.next()) {
|
if (selectQuery.next()) {
|
||||||
name = selectQuery.value(0).toString();
|
name = selectQuery.value(0).toString();
|
||||||
}
|
}
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
|
|
||||||
db.close();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
QList<QString> DBHelper::getLibrariesNames()
|
QList<QString> DBHelper::getLibrariesNames()
|
||||||
@ -161,11 +177,12 @@ QString DBHelper::getLibraryName(int id)
|
|||||||
QList<ComicDB> DBHelper::getLabelComics(qulonglong libraryId, qulonglong labelId)
|
QList<ComicDB> DBHelper::getLabelComics(qulonglong libraryId, qulonglong labelId)
|
||||||
{
|
{
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
|
||||||
|
|
||||||
QList<ComicDB> list;
|
QList<ComicDB> list;
|
||||||
|
QString connectionName = "";
|
||||||
|
|
||||||
{
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
QSqlQuery selectQuery(db);
|
QSqlQuery selectQuery(db);
|
||||||
selectQuery.prepare("SELECT c.id,c.fileName,ci.title,ci.currentPage,ci.numPages,ci.hash,ci.read,ci.coverSizeRatio "
|
selectQuery.prepare("SELECT c.id,c.fileName,ci.title,ci.currentPage,ci.numPages,ci.hash,ci.read,ci.coverSizeRatio "
|
||||||
"FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) "
|
"FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) "
|
||||||
@ -190,11 +207,9 @@ QList<ComicDB> DBHelper::getLabelComics(qulonglong libraryId, qulonglong labelId
|
|||||||
|
|
||||||
list.append(comic);
|
list.append(comic);
|
||||||
}
|
}
|
||||||
|
connectionName = db.connectionName();
|
||||||
db.close();
|
|
||||||
}
|
}
|
||||||
//TODO ?
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
//QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
@ -202,13 +217,13 @@ QList<ComicDB> DBHelper::getLabelComics(qulonglong libraryId, qulonglong labelId
|
|||||||
QList<ComicDB> DBHelper::getFavorites(qulonglong libraryId)
|
QList<ComicDB> DBHelper::getFavorites(qulonglong libraryId)
|
||||||
{
|
{
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
|
||||||
|
|
||||||
QList<ComicDB> list;
|
QList<ComicDB> list;
|
||||||
|
|
||||||
const int FAV_ID = 1;
|
const int FAV_ID = 1;
|
||||||
|
QString connectionName = "";
|
||||||
|
|
||||||
{
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
QSqlQuery selectQuery(db);
|
QSqlQuery selectQuery(db);
|
||||||
selectQuery.prepare("SELECT c.id,c.fileName,ci.title,ci.currentPage,ci.numPages,ci.hash,ci.read,ci.coverSizeRatio "
|
selectQuery.prepare("SELECT c.id,c.fileName,ci.title,ci.currentPage,ci.numPages,ci.hash,ci.read,ci.coverSizeRatio "
|
||||||
"FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) "
|
"FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) "
|
||||||
@ -234,10 +249,10 @@ QList<ComicDB> DBHelper::getFavorites(qulonglong libraryId)
|
|||||||
list.append(comic);
|
list.append(comic);
|
||||||
}
|
}
|
||||||
|
|
||||||
db.close();
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
//TODO ?
|
//TODO ?
|
||||||
//QSqlDatabase::removeDatabase(db.connectionName());
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
@ -245,11 +260,11 @@ QList<ComicDB> DBHelper::getFavorites(qulonglong libraryId)
|
|||||||
QList<ComicDB> DBHelper::getReading(qulonglong libraryId)
|
QList<ComicDB> DBHelper::getReading(qulonglong libraryId)
|
||||||
{
|
{
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
|
||||||
|
|
||||||
QList<ComicDB> list;
|
QList<ComicDB> list;
|
||||||
|
QString connectionName = "";
|
||||||
|
|
||||||
{
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
QSqlQuery selectQuery(db);
|
QSqlQuery selectQuery(db);
|
||||||
selectQuery.prepare("SELECT c.id,c.parentId,c.fileName,ci.title,ci.currentPage,ci.numPages,ci.hash,ci.read,ci.coverSizeRatio "
|
selectQuery.prepare("SELECT c.id,c.parentId,c.fileName,ci.title,ci.currentPage,ci.numPages,ci.hash,ci.read,ci.coverSizeRatio "
|
||||||
"FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) "
|
"FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) "
|
||||||
@ -272,11 +287,10 @@ QList<ComicDB> DBHelper::getReading(qulonglong libraryId)
|
|||||||
|
|
||||||
list.append(comic);
|
list.append(comic);
|
||||||
}
|
}
|
||||||
|
connectionName = db.connectionName();
|
||||||
db.close();
|
|
||||||
}
|
}
|
||||||
//TODO ?
|
//TODO ?
|
||||||
//QSqlDatabase::removeDatabase(db.connectionName());
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
@ -284,35 +298,38 @@ QList<ComicDB> DBHelper::getReading(qulonglong libraryId)
|
|||||||
QList<ReadingList> DBHelper::getReadingLists(qulonglong libraryId)
|
QList<ReadingList> DBHelper::getReadingLists(qulonglong libraryId)
|
||||||
{
|
{
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
QString connectionName = "";
|
||||||
|
|
||||||
QList<ReadingList> list;
|
QList<ReadingList> list;
|
||||||
|
|
||||||
QSqlQuery selectQuery("SELECT * from reading_list WHERE parentId IS NULL ORDER BY name DESC", db);
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
|
|
||||||
selectQuery.exec();
|
QSqlQuery selectQuery("SELECT * from reading_list WHERE parentId IS NULL ORDER BY name DESC", db);
|
||||||
|
|
||||||
QSqlRecord record = selectQuery.record();
|
selectQuery.exec();
|
||||||
|
|
||||||
int name = record.indexOf("name");
|
QSqlRecord record = selectQuery.record();
|
||||||
int id = record.indexOf("id");
|
|
||||||
int ordering = record.indexOf("ordering");
|
|
||||||
|
|
||||||
while (selectQuery.next()) {
|
int name = record.indexOf("name");
|
||||||
ReadingList item(selectQuery.value(name).toString(), selectQuery.value(id).toLongLong(), selectQuery.value(ordering).toInt());
|
int id = record.indexOf("id");
|
||||||
|
int ordering = record.indexOf("ordering");
|
||||||
|
|
||||||
if (list.isEmpty()) {
|
while (selectQuery.next()) {
|
||||||
list.append(item);
|
ReadingList item(selectQuery.value(name).toString(), selectQuery.value(id).toLongLong(), selectQuery.value(ordering).toInt());
|
||||||
} else {
|
|
||||||
int i = 0;
|
if (list.isEmpty()) {
|
||||||
while (i < list.length() && naturalSortLessThanCI(list.at(i).getName(), item.getName()))
|
list.append(item);
|
||||||
i++;
|
} else {
|
||||||
list.insert(i, item);
|
int i = 0;
|
||||||
|
while (i < list.length() && naturalSortLessThanCI(list.at(i).getName(), item.getName()))
|
||||||
|
i++;
|
||||||
|
list.insert(i, item);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO ?
|
//TODO ?
|
||||||
//QSqlDatabase::removeDatabase(db.connectionName());
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
@ -320,11 +337,11 @@ QList<ReadingList> DBHelper::getReadingLists(qulonglong libraryId)
|
|||||||
QList<ComicDB> DBHelper::getReadingListFullContent(qulonglong libraryId, qulonglong readingListId)
|
QList<ComicDB> DBHelper::getReadingListFullContent(qulonglong libraryId, qulonglong readingListId)
|
||||||
{
|
{
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
|
||||||
|
|
||||||
QList<ComicDB> list;
|
QList<ComicDB> list;
|
||||||
|
QString connectionName = "";
|
||||||
|
|
||||||
{
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
QList<qulonglong> ids;
|
QList<qulonglong> ids;
|
||||||
ids << readingListId;
|
ids << readingListId;
|
||||||
|
|
||||||
@ -364,10 +381,11 @@ QList<ComicDB> DBHelper::getReadingListFullContent(qulonglong libraryId, qulongl
|
|||||||
list.append(comic);
|
list.append(comic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO ?
|
//TODO ?
|
||||||
//QSqlDatabase::removeDatabase(db.connectionName());
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
@ -476,12 +494,13 @@ void DBHelper::update(ComicDB *comic, QSqlDatabase &db)
|
|||||||
void DBHelper::update(qulonglong libraryId, ComicInfo &comicInfo)
|
void DBHelper::update(qulonglong libraryId, ComicInfo &comicInfo)
|
||||||
{
|
{
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
QString connectionName = "";
|
||||||
|
{
|
||||||
DBHelper::update(&comicInfo, db);
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
|
DBHelper::update(&comicInfo, db);
|
||||||
db.close();
|
connectionName = db.connectionName();
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DBHelper::update(ComicInfo *comicInfo, QSqlDatabase &db)
|
void DBHelper::update(ComicInfo *comicInfo, QSqlDatabase &db)
|
||||||
@ -680,32 +699,38 @@ void DBHelper::updateChildrenInfo(QSqlDatabase &db)
|
|||||||
void DBHelper::updateProgress(qulonglong libraryId, const ComicInfo &comicInfo)
|
void DBHelper::updateProgress(qulonglong libraryId, const ComicInfo &comicInfo)
|
||||||
{
|
{
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
|
|
||||||
ComicDB comic = DBHelper::loadComic(comicInfo.id, db);
|
ComicDB comic = DBHelper::loadComic(comicInfo.id, db);
|
||||||
comic.info.currentPage = comicInfo.currentPage;
|
comic.info.currentPage = comicInfo.currentPage;
|
||||||
comic.info.hasBeenOpened = comicInfo.currentPage > 0 || comic.info.hasBeenOpened;
|
comic.info.hasBeenOpened = comicInfo.currentPage > 0 || comic.info.hasBeenOpened;
|
||||||
comic.info.read = comic.info.read || comic.info.currentPage == comic.info.numPages;
|
comic.info.read = comic.info.read || comic.info.currentPage == comic.info.numPages;
|
||||||
|
|
||||||
DBHelper::updateReadingRemoteProgress(comic.info, db);
|
DBHelper::updateReadingRemoteProgress(comic.info, db);
|
||||||
|
|
||||||
db.close();
|
connectionName = db.connectionName();
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
}
|
||||||
|
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DBHelper::setComicAsReading(qulonglong libraryId, const ComicInfo &comicInfo)
|
void DBHelper::setComicAsReading(qulonglong libraryId, const ComicInfo &comicInfo)
|
||||||
{
|
{
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
|
|
||||||
ComicDB comic = DBHelper::loadComic(comicInfo.id, db);
|
ComicDB comic = DBHelper::loadComic(comicInfo.id, db);
|
||||||
comic.info.hasBeenOpened = true;
|
comic.info.hasBeenOpened = true;
|
||||||
comic.info.read = comic.info.read || comic.info.currentPage == comic.info.numPages;
|
comic.info.read = comic.info.read || comic.info.currentPage == comic.info.numPages;
|
||||||
|
|
||||||
DBHelper::updateReadingRemoteProgress(comic.info, db);
|
DBHelper::updateReadingRemoteProgress(comic.info, db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
db.close();
|
}
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DBHelper::updateReadingRemoteProgress(const ComicInfo &comicInfo, QSqlDatabase &db)
|
void DBHelper::updateReadingRemoteProgress(const ComicInfo &comicInfo, QSqlDatabase &db)
|
||||||
@ -733,31 +758,33 @@ void DBHelper::updateReadingRemoteProgress(const ComicInfo &comicInfo, QSqlDatab
|
|||||||
void DBHelper::updateFromRemoteClient(qulonglong libraryId, const ComicInfo &comicInfo)
|
void DBHelper::updateFromRemoteClient(qulonglong libraryId, const ComicInfo &comicInfo)
|
||||||
{
|
{
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
|
|
||||||
ComicDB comic = DBHelper::loadComic(comicInfo.id, db);
|
ComicDB comic = DBHelper::loadComic(comicInfo.id, db);
|
||||||
|
|
||||||
if (comic.info.hash == comicInfo.hash) {
|
if (comic.info.hash == comicInfo.hash) {
|
||||||
if (comicInfo.currentPage > 0) {
|
if (comicInfo.currentPage > 0) {
|
||||||
comic.info.currentPage = comicInfo.currentPage;
|
comic.info.currentPage = comicInfo.currentPage;
|
||||||
|
|
||||||
if (comic.info.currentPage == comic.info.numPages)
|
if (comic.info.currentPage == comic.info.numPages)
|
||||||
comic.info.read = true;
|
comic.info.read = true;
|
||||||
|
|
||||||
comic.info.hasBeenOpened = true;
|
comic.info.hasBeenOpened = true;
|
||||||
|
|
||||||
if (comic.info.lastTimeOpened.toULongLong() < comicInfo.lastTimeOpened.toULongLong())
|
if (comic.info.lastTimeOpened.toULongLong() < comicInfo.lastTimeOpened.toULongLong())
|
||||||
comic.info.lastTimeOpened = comicInfo.lastTimeOpened;
|
comic.info.lastTimeOpened = comicInfo.lastTimeOpened;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (comicInfo.rating > 0)
|
||||||
|
comic.info.rating = comicInfo.rating;
|
||||||
|
|
||||||
|
DBHelper::updateReadingRemoteProgress(comic.info, db);
|
||||||
}
|
}
|
||||||
|
connectionName = db.connectionName();
|
||||||
if (comicInfo.rating > 0)
|
|
||||||
comic.info.rating = comicInfo.rating;
|
|
||||||
|
|
||||||
DBHelper::updateReadingRemoteProgress(comic.info, db);
|
|
||||||
}
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DBHelper::updateFromRemoteClientWithHash(const ComicInfo &comicInfo)
|
void DBHelper::updateFromRemoteClientWithHash(const ComicInfo &comicInfo)
|
||||||
@ -765,116 +792,13 @@ void DBHelper::updateFromRemoteClientWithHash(const ComicInfo &comicInfo)
|
|||||||
YACReaderLibraries libraries = DBHelper::getLibraries();
|
YACReaderLibraries libraries = DBHelper::getLibraries();
|
||||||
|
|
||||||
QStringList names = libraries.getNames();
|
QStringList names = libraries.getNames();
|
||||||
|
QString connectionName = "";
|
||||||
|
|
||||||
foreach (QString name, names) {
|
foreach (QString name, names) {
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraries.getId(name));
|
QString libraryPath = DBHelper::getLibraries().getPath(libraries.getId(name));
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
ComicInfo info = loadComicInfo(comicInfo.hash, db);
|
|
||||||
|
|
||||||
if (!info.existOnDb) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (comicInfo.currentPage > 0) {
|
|
||||||
info.currentPage = comicInfo.currentPage;
|
|
||||||
|
|
||||||
if (info.currentPage == info.numPages)
|
|
||||||
info.read = true;
|
|
||||||
|
|
||||||
info.hasBeenOpened = true;
|
|
||||||
|
|
||||||
if (info.lastTimeOpened.toULongLong() < comicInfo.lastTimeOpened.toULongLong())
|
|
||||||
info.lastTimeOpened = comicInfo.lastTimeOpened;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (comicInfo.rating > 0)
|
|
||||||
info.rating = comicInfo.rating;
|
|
||||||
|
|
||||||
DBHelper::update(&info, db);
|
|
||||||
|
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void DBHelper::updateFromRemoteClient(const QMap<qulonglong, QList<ComicInfo>> &comics)
|
|
||||||
{
|
|
||||||
foreach (qulonglong libraryId, comics.keys()) {
|
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
|
||||||
|
|
||||||
db.transaction();
|
|
||||||
|
|
||||||
QSqlQuery updateComicInfo(db);
|
|
||||||
updateComicInfo.prepare("UPDATE comic_info SET "
|
|
||||||
"read = :read, "
|
|
||||||
"currentPage = :currentPage, "
|
|
||||||
"hasBeenOpened = :hasBeenOpened, "
|
|
||||||
"lastTimeOpened = :lastTimeOpened, "
|
|
||||||
"rating = :rating"
|
|
||||||
" WHERE id = :id ");
|
|
||||||
|
|
||||||
foreach (ComicInfo comicInfo, comics[libraryId]) {
|
|
||||||
ComicDB comic = DBHelper::loadComic(comicInfo.id, db);
|
|
||||||
|
|
||||||
if (comic.info.hash == comicInfo.hash) {
|
|
||||||
if (comicInfo.currentPage > 0) {
|
|
||||||
comic.info.currentPage = comicInfo.currentPage;
|
|
||||||
|
|
||||||
if (comic.info.currentPage == comic.info.numPages)
|
|
||||||
comic.info.read = true;
|
|
||||||
|
|
||||||
comic.info.hasBeenOpened = true;
|
|
||||||
|
|
||||||
if (comic.info.lastTimeOpened.toULongLong() < comicInfo.lastTimeOpened.toULongLong())
|
|
||||||
comic.info.lastTimeOpened = comicInfo.lastTimeOpened;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (comicInfo.rating > 0)
|
|
||||||
comic.info.rating = comicInfo.rating;
|
|
||||||
|
|
||||||
updateComicInfo.bindValue(":read", comic.info.read ? 1 : 0);
|
|
||||||
updateComicInfo.bindValue(":currentPage", comic.info.currentPage);
|
|
||||||
updateComicInfo.bindValue(":hasBeenOpened", comic.info.hasBeenOpened ? 1 : 0);
|
|
||||||
updateComicInfo.bindValue(":lastTimeOpened", QDateTime::currentMSecsSinceEpoch() / 1000);
|
|
||||||
updateComicInfo.bindValue(":id", comic.info.id);
|
|
||||||
updateComicInfo.bindValue(":rating", comic.info.rating);
|
|
||||||
updateComicInfo.exec();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
db.commit();
|
|
||||||
|
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void DBHelper::updateFromRemoteClientWithHash(const QList<ComicInfo> &comics)
|
|
||||||
{
|
|
||||||
YACReaderLibraries libraries = DBHelper::getLibraries();
|
|
||||||
|
|
||||||
QStringList names = libraries.getNames();
|
|
||||||
|
|
||||||
foreach (QString name, names) {
|
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraries.getId(name));
|
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
|
||||||
|
|
||||||
db.transaction();
|
|
||||||
|
|
||||||
QSqlQuery updateComicInfo(db);
|
|
||||||
updateComicInfo.prepare("UPDATE comic_info SET "
|
|
||||||
"read = :read, "
|
|
||||||
"currentPage = :currentPage, "
|
|
||||||
"hasBeenOpened = :hasBeenOpened, "
|
|
||||||
"lastTimeOpened = :lastTimeOpened, "
|
|
||||||
"rating = :rating"
|
|
||||||
" WHERE id = :id ");
|
|
||||||
|
|
||||||
foreach (ComicInfo comicInfo, comics) {
|
|
||||||
ComicInfo info = loadComicInfo(comicInfo.hash, db);
|
ComicInfo info = loadComicInfo(comicInfo.hash, db);
|
||||||
|
|
||||||
if (!info.existOnDb) {
|
if (!info.existOnDb) {
|
||||||
@ -893,23 +817,131 @@ void DBHelper::updateFromRemoteClientWithHash(const QList<ComicInfo> &comics)
|
|||||||
info.lastTimeOpened = comicInfo.lastTimeOpened;
|
info.lastTimeOpened = comicInfo.lastTimeOpened;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (comicInfo.rating > 0) {
|
if (comicInfo.rating > 0)
|
||||||
info.rating = comicInfo.rating;
|
info.rating = comicInfo.rating;
|
||||||
|
|
||||||
|
DBHelper::update(&info, db);
|
||||||
|
connectionName = db.connectionName();
|
||||||
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DBHelper::updateFromRemoteClient(const QMap<qulonglong, QList<ComicInfo>> &comics)
|
||||||
|
{
|
||||||
|
foreach (qulonglong libraryId, comics.keys()) {
|
||||||
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
|
|
||||||
|
db.transaction();
|
||||||
|
|
||||||
|
QSqlQuery updateComicInfo(db);
|
||||||
|
updateComicInfo.prepare("UPDATE comic_info SET "
|
||||||
|
"read = :read, "
|
||||||
|
"currentPage = :currentPage, "
|
||||||
|
"hasBeenOpened = :hasBeenOpened, "
|
||||||
|
"lastTimeOpened = :lastTimeOpened, "
|
||||||
|
"rating = :rating"
|
||||||
|
" WHERE id = :id ");
|
||||||
|
|
||||||
|
foreach (ComicInfo comicInfo, comics[libraryId]) {
|
||||||
|
ComicDB comic = DBHelper::loadComic(comicInfo.id, db);
|
||||||
|
|
||||||
|
if (comic.info.hash == comicInfo.hash) {
|
||||||
|
if (comicInfo.currentPage > 0) {
|
||||||
|
comic.info.currentPage = comicInfo.currentPage;
|
||||||
|
|
||||||
|
if (comic.info.currentPage == comic.info.numPages)
|
||||||
|
comic.info.read = true;
|
||||||
|
|
||||||
|
comic.info.hasBeenOpened = true;
|
||||||
|
|
||||||
|
if (comic.info.lastTimeOpened.toULongLong() < comicInfo.lastTimeOpened.toULongLong())
|
||||||
|
comic.info.lastTimeOpened = comicInfo.lastTimeOpened;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (comicInfo.rating > 0)
|
||||||
|
comic.info.rating = comicInfo.rating;
|
||||||
|
|
||||||
|
updateComicInfo.bindValue(":read", comic.info.read ? 1 : 0);
|
||||||
|
updateComicInfo.bindValue(":currentPage", comic.info.currentPage);
|
||||||
|
updateComicInfo.bindValue(":hasBeenOpened", comic.info.hasBeenOpened ? 1 : 0);
|
||||||
|
updateComicInfo.bindValue(":lastTimeOpened", QDateTime::currentMSecsSinceEpoch() / 1000);
|
||||||
|
updateComicInfo.bindValue(":id", comic.info.id);
|
||||||
|
updateComicInfo.bindValue(":rating", comic.info.rating);
|
||||||
|
updateComicInfo.exec();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updateComicInfo.bindValue(":read", info.read ? 1 : 0);
|
db.commit();
|
||||||
updateComicInfo.bindValue(":currentPage", info.currentPage);
|
connectionName = db.connectionName();
|
||||||
updateComicInfo.bindValue(":hasBeenOpened", info.hasBeenOpened ? 1 : 0);
|
|
||||||
updateComicInfo.bindValue(":lastTimeOpened", QDateTime::currentMSecsSinceEpoch() / 1000);
|
|
||||||
updateComicInfo.bindValue(":id", info.id);
|
|
||||||
updateComicInfo.bindValue(":rating", info.rating);
|
|
||||||
updateComicInfo.exec();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
db.commit();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
db.close();
|
void DBHelper::updateFromRemoteClientWithHash(const QList<ComicInfo> &comics)
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
{
|
||||||
|
YACReaderLibraries libraries = DBHelper::getLibraries();
|
||||||
|
|
||||||
|
QStringList names = libraries.getNames();
|
||||||
|
|
||||||
|
foreach (QString name, names) {
|
||||||
|
QString libraryPath = DBHelper::getLibraries().getPath(libraries.getId(name));
|
||||||
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
|
|
||||||
|
db.transaction();
|
||||||
|
|
||||||
|
QSqlQuery updateComicInfo(db);
|
||||||
|
updateComicInfo.prepare("UPDATE comic_info SET "
|
||||||
|
"read = :read, "
|
||||||
|
"currentPage = :currentPage, "
|
||||||
|
"hasBeenOpened = :hasBeenOpened, "
|
||||||
|
"lastTimeOpened = :lastTimeOpened, "
|
||||||
|
"rating = :rating"
|
||||||
|
" WHERE id = :id ");
|
||||||
|
|
||||||
|
foreach (ComicInfo comicInfo, comics) {
|
||||||
|
ComicInfo info = loadComicInfo(comicInfo.hash, db);
|
||||||
|
|
||||||
|
if (!info.existOnDb) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (comicInfo.currentPage > 0) {
|
||||||
|
info.currentPage = comicInfo.currentPage;
|
||||||
|
|
||||||
|
if (info.currentPage == info.numPages)
|
||||||
|
info.read = true;
|
||||||
|
|
||||||
|
info.hasBeenOpened = true;
|
||||||
|
|
||||||
|
if (info.lastTimeOpened.toULongLong() < comicInfo.lastTimeOpened.toULongLong())
|
||||||
|
info.lastTimeOpened = comicInfo.lastTimeOpened;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (comicInfo.rating > 0) {
|
||||||
|
info.rating = comicInfo.rating;
|
||||||
|
}
|
||||||
|
|
||||||
|
updateComicInfo.bindValue(":read", info.read ? 1 : 0);
|
||||||
|
updateComicInfo.bindValue(":currentPage", info.currentPage);
|
||||||
|
updateComicInfo.bindValue(":hasBeenOpened", info.hasBeenOpened ? 1 : 0);
|
||||||
|
updateComicInfo.bindValue(":lastTimeOpened", QDateTime::currentMSecsSinceEpoch() / 1000);
|
||||||
|
updateComicInfo.bindValue(":id", info.id);
|
||||||
|
updateComicInfo.bindValue(":rating", info.rating);
|
||||||
|
updateComicInfo.exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
db.commit();
|
||||||
|
connectionName = db.connectionName();
|
||||||
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1405,47 +1437,48 @@ QList<LibraryItem *> DBHelper::getComicsFromParent(qulonglong parentId, QSqlData
|
|||||||
QList<Label> DBHelper::getLabels(qulonglong libraryId)
|
QList<Label> DBHelper::getLabels(qulonglong libraryId)
|
||||||
{
|
{
|
||||||
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
QString libraryPath = DBHelper::getLibraries().getPath(libraryId);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
QString connectionName = "";
|
||||||
|
|
||||||
QSqlQuery selectQuery("SELECT * FROM label ORDER BY ordering,name", db); //TODO add some kind of
|
|
||||||
QList<Label> labels;
|
QList<Label> labels;
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary");
|
||||||
|
|
||||||
QSqlRecord record = selectQuery.record();
|
QSqlQuery selectQuery("SELECT * FROM label ORDER BY ordering,name", db); //TODO add some kind of
|
||||||
|
QSqlRecord record = selectQuery.record();
|
||||||
|
|
||||||
int name = record.indexOf("name");
|
int name = record.indexOf("name");
|
||||||
int id = record.indexOf("id");
|
int id = record.indexOf("id");
|
||||||
int ordering = record.indexOf("ordering");
|
int ordering = record.indexOf("ordering");
|
||||||
|
|
||||||
while (selectQuery.next()) {
|
while (selectQuery.next()) {
|
||||||
Label item(selectQuery.value(name).toString(),
|
Label item(selectQuery.value(name).toString(),
|
||||||
selectQuery.value(id).toLongLong(),
|
selectQuery.value(id).toLongLong(),
|
||||||
static_cast<YACReader::LabelColors>(selectQuery.value(ordering).toInt()));
|
static_cast<YACReader::LabelColors>(selectQuery.value(ordering).toInt()));
|
||||||
|
|
||||||
if (labels.isEmpty()) {
|
if (labels.isEmpty()) {
|
||||||
labels << item;
|
|
||||||
} else {
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
while (i < labels.count() && (labels.at(i).getColorID() < item.getColorID()))
|
|
||||||
i++;
|
|
||||||
|
|
||||||
if (i < labels.count()) {
|
|
||||||
if (labels.at(i).getColorID() == item.getColorID()) //sort by name
|
|
||||||
{
|
|
||||||
while (i < labels.count() && labels.at(i).getColorID() == item.getColorID() && naturalSortLessThanCI(labels.at(i).getName(), item.getName()))
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (i >= labels.count()) {
|
|
||||||
labels << item;
|
labels << item;
|
||||||
} else {
|
} else {
|
||||||
labels.insert(i, item);
|
int i = 0;
|
||||||
|
|
||||||
|
while (i < labels.count() && (labels.at(i).getColorID() < item.getColorID()))
|
||||||
|
i++;
|
||||||
|
|
||||||
|
if (i < labels.count()) {
|
||||||
|
if (labels.at(i).getColorID() == item.getColorID()) //sort by name
|
||||||
|
{
|
||||||
|
while (i < labels.count() && labels.at(i).getColorID() == item.getColorID() && naturalSortLessThanCI(labels.at(i).getName(), item.getName()))
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (i >= labels.count()) {
|
||||||
|
labels << item;
|
||||||
|
} else {
|
||||||
|
labels.insert(i, item);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(db.connectionName());
|
|
||||||
|
|
||||||
return labels;
|
return labels;
|
||||||
}
|
}
|
||||||
|
@ -64,19 +64,21 @@ void LibraryCreator::updateFolder(const QString &source, const QString &target,
|
|||||||
}
|
}
|
||||||
|
|
||||||
QLOG_DEBUG() << "folders found in relative path : " << folders << "-" << relativeFolderPath;
|
QLOG_DEBUG() << "folders found in relative path : " << folders << "-" << relativeFolderPath;
|
||||||
|
QString connectionName = "";
|
||||||
|
{
|
||||||
|
QSqlDatabase db = DataBaseManagement::loadDatabase(target);
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(target);
|
foreach (QString folderName, folders) {
|
||||||
|
if (folderName.isEmpty()) {
|
||||||
foreach (QString folderName, folders) {
|
break;
|
||||||
if (folderName.isEmpty()) {
|
}
|
||||||
break;
|
qulonglong parentId = _currentPathFolders.last().id;
|
||||||
|
_currentPathFolders.append(DBHelper::loadFolder(folderName, parentId, db));
|
||||||
|
QLOG_DEBUG() << "Folder appended : " << _currentPathFolders.last().id << " " << _currentPathFolders.last().name << " with parent" << _currentPathFolders.last().parentId;
|
||||||
}
|
}
|
||||||
qulonglong parentId = _currentPathFolders.last().id;
|
connectionName = db.connectionName();
|
||||||
_currentPathFolders.append(DBHelper::loadFolder(folderName, parentId, db));
|
|
||||||
QLOG_DEBUG() << "Folder appended : " << _currentPathFolders.last().id << " " << _currentPathFolders.last().name << " with parent" << _currentPathFolders.last().parentId;
|
|
||||||
}
|
}
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
QSqlDatabase::removeDatabase(_database.connectionName());
|
|
||||||
|
|
||||||
QLOG_DEBUG() << "Relative path : " << relativeFolderPath;
|
QLOG_DEBUG() << "Relative path : " << relativeFolderPath;
|
||||||
|
|
||||||
@ -127,25 +129,28 @@ void LibraryCreator::run()
|
|||||||
dir.mkpath(_target + "/covers");
|
dir.mkpath(_target + "/covers");
|
||||||
|
|
||||||
//se crea la base de datos .yacreaderlibrary/library.ydb
|
//se crea la base de datos .yacreaderlibrary/library.ydb
|
||||||
_database = DataBaseManagement::createDatabase("library", _target); //
|
{
|
||||||
if (!_database.isOpen()) {
|
auto _database = DataBaseManagement::createDatabase("library", _target); //
|
||||||
QLOG_ERROR() << "Unable to create data base" << _database.lastError().databaseText() + "-" + _database.lastError().driverText();
|
_databaseConnection = _database.connectionName();
|
||||||
emit failedCreatingDB(_database.lastError().databaseText() + "-" + _database.lastError().driverText());
|
if (!_database.isOpen()) {
|
||||||
emit finished();
|
QLOG_ERROR() << "Unable to create data base" << _database.lastError().databaseText() + "-" + _database.lastError().driverText();
|
||||||
creation = false;
|
emit failedCreatingDB(_database.lastError().databaseText() + "-" + _database.lastError().driverText());
|
||||||
return;
|
emit finished();
|
||||||
|
creation = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*QSqlQuery pragma("PRAGMA foreign_keys = ON",_database);*/
|
||||||
|
_database.transaction();
|
||||||
|
//se crea la librería
|
||||||
|
create(QDir(_source));
|
||||||
|
|
||||||
|
DBHelper::updateChildrenInfo(_database);
|
||||||
|
|
||||||
|
_database.commit();
|
||||||
|
_database.close();
|
||||||
}
|
}
|
||||||
|
QSqlDatabase::removeDatabase(_databaseConnection);
|
||||||
/*QSqlQuery pragma("PRAGMA foreign_keys = ON",_database);*/
|
|
||||||
_database.transaction();
|
|
||||||
//se crea la librería
|
|
||||||
create(QDir(_source));
|
|
||||||
|
|
||||||
DBHelper::updateChildrenInfo(_database);
|
|
||||||
|
|
||||||
_database.commit();
|
|
||||||
_database.close();
|
|
||||||
QSqlDatabase::removeDatabase(_database.connectionName());
|
|
||||||
emit(created());
|
emit(created());
|
||||||
QLOG_INFO() << "Create library END";
|
QLOG_INFO() << "Create library END";
|
||||||
} else {
|
} else {
|
||||||
@ -155,33 +160,38 @@ void LibraryCreator::run()
|
|||||||
_currentPathFolders.append(Folder(1, 1, "root", "/"));
|
_currentPathFolders.append(Folder(1, 1, "root", "/"));
|
||||||
QLOG_DEBUG() << "update whole library";
|
QLOG_DEBUG() << "update whole library";
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
auto _database = DataBaseManagement::loadDatabase(_target);
|
||||||
|
_databaseConnection = _database.connectionName();
|
||||||
|
|
||||||
_database = DataBaseManagement::loadDatabase(_target);
|
//_database.setDatabaseName(_target+"/library.ydb");
|
||||||
//_database.setDatabaseName(_target+"/library.ydb");
|
if (!_database.open()) {
|
||||||
if (!_database.open()) {
|
QLOG_ERROR() << "Unable to open data base" << _database.lastError().databaseText() + "-" + _database.lastError().driverText();
|
||||||
QLOG_ERROR() << "Unable to open data base" << _database.lastError().databaseText() + "-" + _database.lastError().driverText();
|
emit failedOpeningDB(_database.lastError().databaseText() + "-" + _database.lastError().driverText());
|
||||||
emit failedOpeningDB(_database.lastError().databaseText() + "-" + _database.lastError().driverText());
|
emit finished();
|
||||||
emit finished();
|
creation = false;
|
||||||
creation = false;
|
return;
|
||||||
return;
|
}
|
||||||
}
|
QSqlQuery pragma("PRAGMA foreign_keys = ON", _database);
|
||||||
QSqlQuery pragma("PRAGMA foreign_keys = ON", _database);
|
_database.transaction();
|
||||||
_database.transaction();
|
|
||||||
|
|
||||||
if (partialUpdate) {
|
if (partialUpdate) {
|
||||||
update(QDir(_sourceFolder));
|
update(QDir(_sourceFolder));
|
||||||
} else {
|
} else {
|
||||||
update(QDir(_source));
|
update(QDir(_source));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (partialUpdate)
|
||||||
|
DBHelper::updateChildrenInfo(folderDestinationModelIndex.data(FolderModel::IdRole).toULongLong(), _database);
|
||||||
|
else
|
||||||
|
DBHelper::updateChildrenInfo(_database);
|
||||||
|
|
||||||
|
_database.commit();
|
||||||
|
_database.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (partialUpdate)
|
QSqlDatabase::removeDatabase(_databaseConnection);
|
||||||
DBHelper::updateChildrenInfo(folderDestinationModelIndex.data(FolderModel::IdRole).toULongLong(), _database);
|
|
||||||
else
|
|
||||||
DBHelper::updateChildrenInfo(_database);
|
|
||||||
|
|
||||||
_database.commit();
|
|
||||||
_database.close();
|
|
||||||
QSqlDatabase::removeDatabase(_database.databaseName());
|
|
||||||
//si estabamos en modo creación, se está añadiendo una librería que ya existía y se ha actualizado antes de añadirse.
|
//si estabamos en modo creación, se está añadiendo una librería que ya existía y se ha actualizado antes de añadirse.
|
||||||
if (!partialUpdate) {
|
if (!partialUpdate) {
|
||||||
if (!creation) {
|
if (!creation) {
|
||||||
@ -203,13 +213,14 @@ void LibraryCreator::run()
|
|||||||
|
|
||||||
void LibraryCreator::stop()
|
void LibraryCreator::stop()
|
||||||
{
|
{
|
||||||
_database.commit();
|
QSqlDatabase::database(_databaseConnection).commit();
|
||||||
stopRunning = true;
|
stopRunning = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//retorna el id del ultimo de los folders
|
//retorna el id del ultimo de los folders
|
||||||
qulonglong LibraryCreator::insertFolders()
|
qulonglong LibraryCreator::insertFolders()
|
||||||
{
|
{
|
||||||
|
auto _database = QSqlDatabase::database(_databaseConnection);
|
||||||
QList<Folder>::iterator i;
|
QList<Folder>::iterator i;
|
||||||
int currentId = 0;
|
int currentId = 0;
|
||||||
for (i = _currentPathFolders.begin(); i != _currentPathFolders.end(); ++i) {
|
for (i = _currentPathFolders.begin(); i != _currentPathFolders.end(); ++i) {
|
||||||
@ -266,6 +277,7 @@ bool LibraryCreator::checkCover(const QString &hash)
|
|||||||
|
|
||||||
void LibraryCreator::insertComic(const QString &relativePath, const QFileInfo &fileInfo)
|
void LibraryCreator::insertComic(const QString &relativePath, const QFileInfo &fileInfo)
|
||||||
{
|
{
|
||||||
|
auto _database = QSqlDatabase::database(_databaseConnection);
|
||||||
//Se calcula el hash del cómic
|
//Se calcula el hash del cómic
|
||||||
|
|
||||||
QCryptographicHash crypto(QCryptographicHash::Sha1);
|
QCryptographicHash crypto(QCryptographicHash::Sha1);
|
||||||
@ -305,6 +317,7 @@ void LibraryCreator::insertComic(const QString &relativePath, const QFileInfo &f
|
|||||||
|
|
||||||
void LibraryCreator::update(QDir dirS)
|
void LibraryCreator::update(QDir dirS)
|
||||||
{
|
{
|
||||||
|
auto _database = QSqlDatabase::database(_databaseConnection);
|
||||||
//QLOG_TRACE() << "Updating" << dirS.absolutePath();
|
//QLOG_TRACE() << "Updating" << dirS.absolutePath();
|
||||||
//QLOG_TRACE() << "Getting info from dir" << dirS.absolutePath();
|
//QLOG_TRACE() << "Getting info from dir" << dirS.absolutePath();
|
||||||
dirS.setNameFilters(_nameFilter);
|
dirS.setNameFilters(_nameFilter);
|
||||||
|
@ -38,7 +38,7 @@ private:
|
|||||||
QString _target;
|
QString _target;
|
||||||
QString _sourceFolder; //used for partial updates
|
QString _sourceFolder; //used for partial updates
|
||||||
QStringList _nameFilter;
|
QStringList _nameFilter;
|
||||||
QSqlDatabase _database;
|
QString _databaseConnection;
|
||||||
QList<Folder> _currentPathFolders; //lista de folders en el orden en el que están siendo explorados, el último es el folder actual
|
QList<Folder> _currentPathFolders; //lista de folders en el orden en el que están siendo explorados, el último es el folder actual
|
||||||
//recursive method
|
//recursive method
|
||||||
void create(QDir currentDirectory);
|
void create(QDir currentDirectory);
|
||||||
|
@ -552,17 +552,20 @@ void PropertiesDialog::setComics(QList<ComicDB> comics)
|
|||||||
|
|
||||||
void PropertiesDialog::updateComics()
|
void PropertiesDialog::updateComics()
|
||||||
{
|
{
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
QString connectionName = "";
|
||||||
db.open();
|
{
|
||||||
db.transaction();
|
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
|
||||||
QList<ComicDB>::iterator itr;
|
db.open();
|
||||||
for (itr = comics.begin(); itr != comics.end(); itr++) {
|
db.transaction();
|
||||||
if (itr->info.edited)
|
QList<ComicDB>::iterator itr;
|
||||||
DBHelper::update(&(itr->info), db);
|
for (itr = comics.begin(); itr != comics.end(); itr++) {
|
||||||
|
if (itr->info.edited)
|
||||||
|
DBHelper::update(&(itr->info), db);
|
||||||
|
}
|
||||||
|
db.commit();
|
||||||
|
connectionName = db.connectionName();
|
||||||
}
|
}
|
||||||
db.commit();
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
db.close();
|
|
||||||
QSqlDatabase::removeDatabase(databasePath);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PropertiesDialog::setMultipleCover()
|
void PropertiesDialog::setMultipleCover()
|
||||||
|
Reference in New Issue
Block a user