mirror of
https://github.com/YACReader/yacreader
synced 2025-06-04 01:28:55 -04:00
Eliminado el uso de framework sql de ComicDB y ComicInfo
This commit is contained in:
parent
1faf36bbb1
commit
9853abf8ac
@ -1,7 +1,5 @@
|
|||||||
#include "comic_db.h"
|
#include "comic_db.h"
|
||||||
|
|
||||||
#include <QSqlQuery>
|
|
||||||
#include <QSqlRecord>
|
|
||||||
#include <QVariant>
|
#include <QVariant>
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -12,130 +10,6 @@ ComicDB::ComicDB()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ComicDB::ComicDB(qulonglong cparentId, QString cname, QString cpath, QString chash, QSqlDatabase & database)
|
|
||||||
{
|
|
||||||
parentId = cparentId;
|
|
||||||
name = cname;
|
|
||||||
path = cpath;
|
|
||||||
|
|
||||||
if(!info.load(chash,database))
|
|
||||||
{
|
|
||||||
info.hash = chash;
|
|
||||||
info.coverPage = new int(1);
|
|
||||||
_hasCover = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
_hasCover = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
QList<LibraryItem *> ComicDB::getComicsFromParent(qulonglong parentId, QSqlDatabase & db, bool sort)
|
|
||||||
{
|
|
||||||
QList<LibraryItem *> list;
|
|
||||||
|
|
||||||
QSqlQuery selectQuery(db);
|
|
||||||
selectQuery.prepare("select c.id,c.parentId,c.fileName,c.path,ci.hash from comic c inner join comic_info ci on (c.comicInfoId = ci.id) where c.parentId = :parentId");
|
|
||||||
selectQuery.bindValue(":parentId", parentId);
|
|
||||||
selectQuery.exec();
|
|
||||||
|
|
||||||
ComicDB * currentItem;
|
|
||||||
while (selectQuery.next())
|
|
||||||
{
|
|
||||||
QList<QVariant> data;
|
|
||||||
QSqlRecord record = selectQuery.record();
|
|
||||||
for(int i=0;i<record.count();i++)
|
|
||||||
data << record.value(i);
|
|
||||||
|
|
||||||
currentItem = new ComicDB();
|
|
||||||
currentItem->id = record.value("id").toULongLong();
|
|
||||||
currentItem->parentId = record.value(1).toULongLong();
|
|
||||||
currentItem->name = record.value(2).toString();
|
|
||||||
currentItem->path = record.value(3).toString();
|
|
||||||
currentItem->info.load(record.value(4).toString(),db);
|
|
||||||
int lessThan = 0;
|
|
||||||
if(list.isEmpty() || !sort)
|
|
||||||
list.append(currentItem);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ComicDB * last = static_cast<ComicDB *>(list.back());
|
|
||||||
QString nameLast = last->name;
|
|
||||||
QString nameCurrent = currentItem->name;
|
|
||||||
QList<LibraryItem *>::iterator i;
|
|
||||||
i = list.end();
|
|
||||||
i--;
|
|
||||||
while ((0 > (lessThan = nameCurrent.localeAwareCompare(nameLast))) && i != list.begin()) //se usa la misma ordenación que en QDir
|
|
||||||
{
|
|
||||||
i--;
|
|
||||||
nameLast = (*i)->name;
|
|
||||||
}
|
|
||||||
if(lessThan>0) //si se ha encontrado un elemento menor que current, se inserta justo después
|
|
||||||
list.insert(++i,currentItem);
|
|
||||||
else
|
|
||||||
list.insert(i,currentItem);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//selectQuery.finish();
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ComicDB::load(qulonglong idc, QSqlDatabase & db)
|
|
||||||
{
|
|
||||||
|
|
||||||
QSqlQuery selectQuery(db);
|
|
||||||
selectQuery.prepare("select c.id,c.parentId,c.fileName,c.path,ci.hash from comic c inner join comic_info ci on (c.comicInfoId = ci.id) where c.id = :id");
|
|
||||||
selectQuery.bindValue(":id", idc);
|
|
||||||
selectQuery.exec();
|
|
||||||
this->id = idc;
|
|
||||||
if(selectQuery.next())
|
|
||||||
{
|
|
||||||
QSqlRecord record = selectQuery.record();
|
|
||||||
//id = record.value("id").toULongLong();
|
|
||||||
parentId = record.value("parentId").toULongLong();
|
|
||||||
name = record.value("name").toString();
|
|
||||||
path = record.value("path").toString();
|
|
||||||
info.load(record.value("hash").toString(),db);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
//selectQuery.finish();
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
qulonglong ComicDB::insert(QSqlDatabase & db)
|
|
||||||
{
|
|
||||||
//TODO cambiar por info.insert(db)
|
|
||||||
|
|
||||||
if(!info.existOnDb)
|
|
||||||
{
|
|
||||||
QSqlQuery comicInfoInsert(db);
|
|
||||||
comicInfoInsert.prepare("INSERT INTO comic_info (hash,numPages) "
|
|
||||||
"VALUES (:hash,:numPages)");
|
|
||||||
comicInfoInsert.bindValue(":hash", info.hash);
|
|
||||||
comicInfoInsert.bindValue(":numPages", *info.numPages);
|
|
||||||
comicInfoInsert.exec();
|
|
||||||
info.id =comicInfoInsert.lastInsertId().toULongLong();
|
|
||||||
_hasCover = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
_hasCover = true;
|
|
||||||
|
|
||||||
QSqlQuery query(db);
|
|
||||||
query.prepare("INSERT INTO comic (parentId, comicInfoId, fileName, path) "
|
|
||||||
"VALUES (:parentId,:comicInfoId,:name, :path)");
|
|
||||||
query.bindValue(":parentId", parentId);
|
|
||||||
query.bindValue(":comicInfoId", info.id);
|
|
||||||
query.bindValue(":name", name);
|
|
||||||
query.bindValue(":path", path);
|
|
||||||
query.exec();
|
|
||||||
return query.lastInsertId().toULongLong();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ComicDB::update(QSqlDatabase & db)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ComicDB::isDir()
|
bool ComicDB::isDir()
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -287,6 +161,39 @@ ComicInfo::ComicInfo(const ComicInfo & comicInfo)
|
|||||||
synopsis(NULL),
|
synopsis(NULL),
|
||||||
characters(NULL),
|
characters(NULL),
|
||||||
notes(NULL)
|
notes(NULL)
|
||||||
|
{
|
||||||
|
operator=(comicInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
ComicInfo::~ComicInfo()
|
||||||
|
{
|
||||||
|
delete title;
|
||||||
|
delete coverPage;
|
||||||
|
delete numPages;
|
||||||
|
delete number;
|
||||||
|
delete isBis;
|
||||||
|
delete count;
|
||||||
|
delete volume;
|
||||||
|
delete storyArc;
|
||||||
|
delete arcNumber;
|
||||||
|
delete arcCount;
|
||||||
|
delete genere;
|
||||||
|
delete writer;
|
||||||
|
delete penciller;
|
||||||
|
delete inker;
|
||||||
|
delete colorist;
|
||||||
|
delete letterer;
|
||||||
|
delete coverArtist;
|
||||||
|
delete date;
|
||||||
|
delete publisher;
|
||||||
|
delete format;
|
||||||
|
delete color;
|
||||||
|
delete ageRating;
|
||||||
|
delete synopsis;
|
||||||
|
delete characters;
|
||||||
|
delete notes;
|
||||||
|
}
|
||||||
|
ComicInfo & ComicInfo::operator=(const ComicInfo & comicInfo)
|
||||||
{
|
{
|
||||||
copyField(title,comicInfo.title);
|
copyField(title,comicInfo.title);
|
||||||
copyField(coverPage,comicInfo.coverPage);
|
copyField(coverPage,comicInfo.coverPage);
|
||||||
@ -320,88 +227,9 @@ ComicInfo::ComicInfo(const ComicInfo & comicInfo)
|
|||||||
read = comicInfo.read;
|
read = comicInfo.read;
|
||||||
edited = comicInfo.edited;
|
edited = comicInfo.edited;
|
||||||
|
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
ComicInfo::~ComicInfo()
|
|
||||||
{
|
|
||||||
delete title;
|
|
||||||
delete coverPage;
|
|
||||||
delete numPages;
|
|
||||||
delete number;
|
|
||||||
delete isBis;
|
|
||||||
delete count;
|
|
||||||
delete volume;
|
|
||||||
delete storyArc;
|
|
||||||
delete arcNumber;
|
|
||||||
delete arcCount;
|
|
||||||
delete genere;
|
|
||||||
delete writer;
|
|
||||||
delete penciller;
|
|
||||||
delete inker;
|
|
||||||
delete colorist;
|
|
||||||
delete letterer;
|
|
||||||
delete coverArtist;
|
|
||||||
delete date;
|
|
||||||
delete publisher;
|
|
||||||
delete format;
|
|
||||||
delete color;
|
|
||||||
delete ageRating;
|
|
||||||
delete synopsis;
|
|
||||||
delete characters;
|
|
||||||
delete notes;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ComicInfo::setField(const QString & name, QString * & field, QSqlRecord & record)
|
|
||||||
{
|
|
||||||
if(!record.value(name).isNull())
|
|
||||||
{
|
|
||||||
field = new QString();
|
|
||||||
*field = record.value(name).toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ComicInfo::setField(const QString & name, int * & field, QSqlRecord & record)
|
|
||||||
{
|
|
||||||
if(!record.value(name).isNull())
|
|
||||||
{
|
|
||||||
field = new int;
|
|
||||||
*field = record.value(name).toInt();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ComicInfo::setField(const QString & name, bool * & field, QSqlRecord & record)
|
|
||||||
{
|
|
||||||
if(!record.value(name).isNull())
|
|
||||||
{
|
|
||||||
field = new bool;
|
|
||||||
*field = record.value(name).toBool();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ComicInfo::bindField(const QString & name, QString * field, QSqlQuery & query)
|
|
||||||
{
|
|
||||||
if(field != NULL)
|
|
||||||
{
|
|
||||||
query.bindValue(name,*field);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ComicInfo::bindField(const QString & name, int * field, QSqlQuery & query)
|
|
||||||
{
|
|
||||||
if(field != NULL)
|
|
||||||
{
|
|
||||||
query.bindValue(name,*field);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ComicInfo::bindField(const QString & name, bool * field, QSqlQuery & query)
|
|
||||||
{
|
|
||||||
if(field != NULL)
|
|
||||||
{
|
|
||||||
query.bindValue(name,*field);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ComicInfo::setValue(QString * & field, const QString & value)
|
void ComicInfo::setValue(QString * & field, const QString & value)
|
||||||
{
|
{
|
||||||
@ -442,167 +270,6 @@ void ComicInfo::copyField(bool * & field, bool * value)
|
|||||||
field = new bool(*value);
|
field = new bool(*value);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ComicInfo::load(QString hash, QSqlDatabase & db)
|
|
||||||
{
|
|
||||||
QSqlQuery findComicInfo(db);
|
|
||||||
findComicInfo.prepare("SELECT * FROM comic_info WHERE hash = :hash");
|
|
||||||
findComicInfo.bindValue(":hash", hash);
|
|
||||||
findComicInfo.exec();
|
|
||||||
|
|
||||||
|
|
||||||
if(findComicInfo.next())
|
|
||||||
{
|
|
||||||
this->hash = hash;
|
|
||||||
QSqlRecord record = findComicInfo.record();
|
|
||||||
|
|
||||||
hash = hash;
|
|
||||||
id = record.value("id").toULongLong();
|
|
||||||
read = record.value("read").toBool();
|
|
||||||
edited = record.value("edited").toBool();
|
|
||||||
|
|
||||||
setField("title",title,record);
|
|
||||||
setField("numPages",numPages,record);
|
|
||||||
|
|
||||||
setField("coverPage",coverPage,record);
|
|
||||||
|
|
||||||
setField("number",number,record);
|
|
||||||
setField("isBis",isBis,record);
|
|
||||||
setField("count",count,record);
|
|
||||||
|
|
||||||
setField("volume",volume,record);
|
|
||||||
setField("storyArc",storyArc,record);
|
|
||||||
setField("arcNumber",arcNumber,record);
|
|
||||||
setField("arcCount",arcCount,record);
|
|
||||||
|
|
||||||
setField("genere",genere,record);
|
|
||||||
|
|
||||||
setField("writer",writer,record);
|
|
||||||
setField("penciller",penciller,record);
|
|
||||||
setField("inker",inker,record);
|
|
||||||
setField("colorist",colorist,record);
|
|
||||||
setField("letterer",letterer,record);
|
|
||||||
setField("coverArtist",coverArtist,record);
|
|
||||||
|
|
||||||
setField("date",date,record);
|
|
||||||
setField("publisher",publisher,record);
|
|
||||||
setField("format",format,record);
|
|
||||||
setField("color",color,record);
|
|
||||||
setField("ageRating",ageRating,record);
|
|
||||||
|
|
||||||
setField("synopsis",synopsis,record);
|
|
||||||
setField("characters",characters,record);
|
|
||||||
setField("notes",notes,record);
|
|
||||||
|
|
||||||
return existOnDb = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return existOnDb = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
qulonglong ComicInfo::insert(QSqlDatabase & db)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
void ComicInfo::removeFromDB(QSqlDatabase & db)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
void ComicInfo::update(QSqlDatabase & db)
|
|
||||||
{
|
|
||||||
//db.open();
|
|
||||||
QSqlQuery updateComicInfo(db);
|
|
||||||
updateComicInfo.prepare("UPDATE comic_info SET "
|
|
||||||
"title = :title,"
|
|
||||||
|
|
||||||
"coverPage = :coverPage,"
|
|
||||||
"numPages = :numPages,"
|
|
||||||
|
|
||||||
"number = :number,"
|
|
||||||
"isBis = :isBis,"
|
|
||||||
"count = :count,"
|
|
||||||
|
|
||||||
"volume = :volume,"
|
|
||||||
"storyArc = :storyArc,"
|
|
||||||
"arcNumber = :arcNumber,"
|
|
||||||
"arcCount = :arcCount,"
|
|
||||||
|
|
||||||
"genere = :genere,"
|
|
||||||
|
|
||||||
"writer = :writer,"
|
|
||||||
"penciller = :penciller,"
|
|
||||||
"inker = :inker,"
|
|
||||||
"colorist = :colorist,"
|
|
||||||
"letterer = :letterer,"
|
|
||||||
"coverArtist = :coverArtist,"
|
|
||||||
|
|
||||||
"date = :date,"
|
|
||||||
"publisher = :publisher,"
|
|
||||||
"format = :format,"
|
|
||||||
"color = :color,"
|
|
||||||
"ageRating = :ageRating,"
|
|
||||||
|
|
||||||
"synopsis = :synopsis,"
|
|
||||||
"characters = :characters,"
|
|
||||||
"notes = :notes,"
|
|
||||||
|
|
||||||
"read = :read,"
|
|
||||||
"edited = :edited"
|
|
||||||
|
|
||||||
" WHERE id = :id ");
|
|
||||||
bindField(":title",title,updateComicInfo);
|
|
||||||
|
|
||||||
bindField(":coverPage",coverPage,updateComicInfo);
|
|
||||||
bindField(":numPages",numPages,updateComicInfo);
|
|
||||||
|
|
||||||
bindField(":number",number,updateComicInfo);
|
|
||||||
bindField(":isBis",isBis,updateComicInfo);
|
|
||||||
bindField(":count",count,updateComicInfo);
|
|
||||||
|
|
||||||
bindField(":volume",volume,updateComicInfo);
|
|
||||||
bindField(":storyArc",storyArc,updateComicInfo);
|
|
||||||
bindField(":arcNumber",arcNumber,updateComicInfo);
|
|
||||||
bindField(":arcCount",arcCount,updateComicInfo);
|
|
||||||
|
|
||||||
bindField(":genere",genere,updateComicInfo);
|
|
||||||
|
|
||||||
bindField(":writer",writer,updateComicInfo);
|
|
||||||
bindField(":penciller",penciller,updateComicInfo);
|
|
||||||
bindField(":inker",inker,updateComicInfo);
|
|
||||||
bindField(":colorist",colorist,updateComicInfo);
|
|
||||||
bindField(":letterer",letterer,updateComicInfo);
|
|
||||||
bindField(":coverArtist",coverArtist,updateComicInfo);
|
|
||||||
|
|
||||||
bindField(":date",date,updateComicInfo);
|
|
||||||
bindField(":publisher",publisher,updateComicInfo);
|
|
||||||
bindField(":format",format,updateComicInfo);
|
|
||||||
bindField(":color",color,updateComicInfo);
|
|
||||||
bindField(":ageRating",ageRating,updateComicInfo);
|
|
||||||
|
|
||||||
bindField(":synopsis",synopsis,updateComicInfo);
|
|
||||||
bindField(":characters",characters,updateComicInfo);
|
|
||||||
bindField(":notes",notes,updateComicInfo);
|
|
||||||
|
|
||||||
updateComicInfo.bindValue(":read", read?1:0);
|
|
||||||
updateComicInfo.bindValue(":id", id);
|
|
||||||
updateComicInfo.bindValue(":edited", edited?1:0);
|
|
||||||
updateComicInfo.exec();
|
|
||||||
//updateComicInfo.finish();
|
|
||||||
//db.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ComicInfo::updateRead(QSqlDatabase & db)
|
|
||||||
{
|
|
||||||
QSqlQuery findComicInfo(db);
|
|
||||||
findComicInfo.prepare("UPDATE comic_info SET "
|
|
||||||
"read = :read"
|
|
||||||
" WHERE id = :id ");
|
|
||||||
|
|
||||||
findComicInfo.bindValue(":read", read?1:0);
|
|
||||||
findComicInfo.bindValue(":id", id);
|
|
||||||
findComicInfo.exec();
|
|
||||||
//findComicInfo.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//set fields
|
//set fields
|
||||||
void ComicInfo::setTitle(QString value)
|
void ComicInfo::setTitle(QString value)
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
#define __COMICDB_H
|
#define __COMICDB_H
|
||||||
|
|
||||||
#include "library_item.h"
|
#include "library_item.h"
|
||||||
#include <QSqlDatabase>
|
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QPixmap>
|
#include <QPixmap>
|
||||||
#include <QImage>
|
#include <QImage>
|
||||||
@ -14,11 +13,7 @@ public:
|
|||||||
ComicInfo(const ComicInfo & comicInfo);
|
ComicInfo(const ComicInfo & comicInfo);
|
||||||
~ComicInfo();
|
~ComicInfo();
|
||||||
|
|
||||||
bool load(QString hash, QSqlDatabase & db);
|
ComicInfo & operator=(const ComicInfo & comicInfo);
|
||||||
qulonglong insert(QSqlDatabase & db);
|
|
||||||
void removeFromDB(QSqlDatabase & db);
|
|
||||||
void update(QSqlDatabase & db);
|
|
||||||
void updateRead(QSqlDatabase & db);
|
|
||||||
|
|
||||||
qulonglong id;
|
qulonglong id;
|
||||||
bool read;
|
bool read;
|
||||||
@ -97,14 +92,6 @@ public:
|
|||||||
QPixmap getCover(const QString & basePath);
|
QPixmap getCover(const QString & basePath);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setField(const QString & name, QString * & field, QSqlRecord & record);
|
|
||||||
void setField(const QString & name, int * & field, QSqlRecord & record);
|
|
||||||
void setField(const QString & name, bool * & field, QSqlRecord & record);
|
|
||||||
|
|
||||||
void bindField(const QString & name, QString * field, QSqlQuery & query);
|
|
||||||
void bindField(const QString & name, int * field, QSqlQuery & query);
|
|
||||||
void bindField(const QString & name, bool * field, QSqlQuery & query);
|
|
||||||
|
|
||||||
void setValue(QString * & field, const QString & value);
|
void setValue(QString * & field, const QString & value);
|
||||||
void setValue(int * & field, int value);
|
void setValue(int * & field, int value);
|
||||||
void setValue(bool * & field, bool value);
|
void setValue(bool * & field, bool value);
|
||||||
@ -116,19 +103,13 @@ private:
|
|||||||
|
|
||||||
class ComicDB : public LibraryItem
|
class ComicDB : public LibraryItem
|
||||||
{
|
{
|
||||||
private:
|
|
||||||
bool _hasCover;
|
|
||||||
public:
|
public:
|
||||||
ComicDB();
|
ComicDB();
|
||||||
ComicDB(qulonglong cparentId, QString cname, QString cpath, QString chash, QSqlDatabase & database);
|
|
||||||
//Comic(QString fn, QString fp):name(fn),path(fp),knownParent(false), knownId(false){};
|
|
||||||
|
|
||||||
static QList<LibraryItem *> getComicsFromParent(qulonglong parentId, QSqlDatabase & db, bool sort = true);
|
|
||||||
bool isDir();
|
bool isDir();
|
||||||
|
|
||||||
bool load(qulonglong id, QSqlDatabase & db);
|
bool _hasCover;
|
||||||
qulonglong insert(QSqlDatabase & db);
|
|
||||||
void update(QSqlDatabase & db);
|
|
||||||
bool hasCover() {return _hasCover;};
|
bool hasCover() {return _hasCover;};
|
||||||
|
|
||||||
QString toTXT();
|
QString toTXT();
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
|
|
||||||
#include "folder.h"
|
|
||||||
#include <QSqlQuery>
|
|
||||||
#include <QSqlRecord>
|
|
||||||
#include <QVariant>
|
|
@ -7,6 +7,7 @@
|
|||||||
#include "data_base_management.h"
|
#include "data_base_management.h"
|
||||||
#include "qnaturalsorting.h"
|
#include "qnaturalsorting.h"
|
||||||
#include "comic_db.h"
|
#include "comic_db.h"
|
||||||
|
#include "db_helper.h"
|
||||||
|
|
||||||
//ci.number,ci.title,c.fileName,ci.numPages,c.id,c.parentId,c.path,ci.hash,ci.read
|
//ci.number,ci.title,c.fileName,ci.numPages,c.id,c.parentId,c.path,ci.hash,ci.read
|
||||||
#define NUMBER 0
|
#define NUMBER 0
|
||||||
@ -308,10 +309,8 @@ void TableModel::setupModelData(QSqlQuery &sqlquery)
|
|||||||
|
|
||||||
ComicDB TableModel::getComic(const QModelIndex & mi)
|
ComicDB TableModel::getComic(const QModelIndex & mi)
|
||||||
{
|
{
|
||||||
ComicDB c;
|
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
c.load(_data.at(mi.row())->data(ID).toULongLong(),db);
|
ComicDB c = DBHelper::loadComic(_data.at(mi.row())->data(ID).toULongLong(),db);
|
||||||
db.close();
|
db.close();
|
||||||
QSqlDatabase::removeDatabase(_databasePath);
|
QSqlDatabase::removeDatabase(_databasePath);
|
||||||
|
|
||||||
@ -320,10 +319,8 @@ ComicDB TableModel::getComic(const QModelIndex & mi)
|
|||||||
|
|
||||||
ComicDB TableModel::_getComic(const QModelIndex & mi)
|
ComicDB TableModel::_getComic(const QModelIndex & mi)
|
||||||
{
|
{
|
||||||
ComicDB c;
|
|
||||||
|
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||||
c.load(_data.at(mi.row())->data(ID).toULongLong(),db);
|
ComicDB c = DBHelper::loadComic(_data.at(mi.row())->data(ID).toULongLong(),db);
|
||||||
db.close();
|
db.close();
|
||||||
QSqlDatabase::removeDatabase(_databasePath);
|
QSqlDatabase::removeDatabase(_databasePath);
|
||||||
|
|
||||||
@ -352,10 +349,9 @@ QVector<bool> TableModel::setAllComicsRead(bool read)
|
|||||||
{
|
{
|
||||||
readList[i] = read;
|
readList[i] = read;
|
||||||
_data.value(i)->setData(READ,QVariant(read));
|
_data.value(i)->setData(READ,QVariant(read));
|
||||||
ComicDB c;
|
ComicDB c = DBHelper::loadComic(_data.value(i)->data(ID).toULongLong(),db);
|
||||||
c.load(_data.value(i)->data(ID).toULongLong(),db);
|
|
||||||
c.info.read = read;
|
c.info.read = read;
|
||||||
c.info.update(db);
|
DBHelper::update(&(c.info),db);
|
||||||
}
|
}
|
||||||
db.commit();
|
db.commit();
|
||||||
db.close();
|
db.close();
|
||||||
@ -390,10 +386,9 @@ QVector<bool> TableModel::setComicsRead(QList<QModelIndex> list,bool read)
|
|||||||
foreach (QModelIndex mi, list)
|
foreach (QModelIndex mi, list)
|
||||||
{
|
{
|
||||||
_data.value(mi.row())->setData(READ, QVariant(read));
|
_data.value(mi.row())->setData(READ, QVariant(read));
|
||||||
ComicDB c;
|
ComicDB c = DBHelper::loadComic(_data.value(mi.row())->data(ID).toULongLong(),db);
|
||||||
c.load(_data.value(mi.row())->data(ID).toULongLong(),db);
|
|
||||||
c.info.read = read;
|
c.info.read = read;
|
||||||
c.info.update(db);
|
DBHelper::update(&(c.info),db);
|
||||||
}
|
}
|
||||||
db.commit();
|
db.commit();
|
||||||
db.close();
|
db.close();
|
||||||
@ -411,11 +406,10 @@ qint64 TableModel::asignNumbers(QList<QModelIndex> list,int startingNumber)
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
foreach (QModelIndex mi, list)
|
foreach (QModelIndex mi, list)
|
||||||
{
|
{
|
||||||
ComicDB c;
|
ComicDB c = DBHelper::loadComic(_data.value(mi.row())->data(ID).toULongLong(),db);
|
||||||
c.load(_data.value(mi.row())->data(ID).toULongLong(),db);
|
|
||||||
c.info.setNumber(startingNumber+i);
|
c.info.setNumber(startingNumber+i);
|
||||||
c.info.edited = true;
|
c.info.edited = true;
|
||||||
c.info.update(db);
|
DBHelper::update(&(c.info),db);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
#include <QSqlDatabase>
|
#include <QSqlDatabase>
|
||||||
|
#include <QSqlRecord>
|
||||||
|
#include <QSqlQuery>
|
||||||
|
|
||||||
#include "library_item.h"
|
#include "library_item.h"
|
||||||
#include "comic_db.h"
|
#include "comic_db.h"
|
||||||
@ -73,7 +75,7 @@ QList<LibraryItem *> DBHelper::getFolderComicsFromLibrary(const QString & librar
|
|||||||
QString libraryPath = DBHelper::getLibraries().value(libraryName);
|
QString libraryPath = DBHelper::getLibraries().value(libraryName);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath+"/.yacreaderlibrary");
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath+"/.yacreaderlibrary");
|
||||||
|
|
||||||
QList<LibraryItem *> list = ComicDB::getComicsFromParent(folderId,db,false);
|
QList<LibraryItem *> list = DBHelper::getComicsFromParent(folderId,db,false);
|
||||||
|
|
||||||
db.close();
|
db.close();
|
||||||
QSqlDatabase::removeDatabase(libraryPath);
|
QSqlDatabase::removeDatabase(libraryPath);
|
||||||
@ -95,8 +97,7 @@ ComicDB DBHelper::getComicInfo(const QString & libraryName, qulonglong id)
|
|||||||
QString libraryPath = DBHelper::getLibraries().value(libraryName);
|
QString libraryPath = DBHelper::getLibraries().value(libraryName);
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath+"/.yacreaderlibrary");
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath+"/.yacreaderlibrary");
|
||||||
|
|
||||||
ComicDB comic;
|
ComicDB comic = DBHelper::loadComic(id,db);
|
||||||
comic.load(id,db);
|
|
||||||
|
|
||||||
db.close();
|
db.close();
|
||||||
QSqlDatabase::removeDatabase(libraryPath);
|
QSqlDatabase::removeDatabase(libraryPath);
|
||||||
@ -151,6 +152,103 @@ void DBHelper::removeFromDB(ComicDB * comic, QSqlDatabase & db)
|
|||||||
query.exec();
|
query.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//updates
|
||||||
|
void DBHelper::update(ComicDB * comic, QSqlDatabase & db)
|
||||||
|
{
|
||||||
|
//do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
void DBHelper::update(ComicInfo * comicInfo, QSqlDatabase & db)
|
||||||
|
{
|
||||||
|
QSqlQuery updateComicInfo(db);
|
||||||
|
updateComicInfo.prepare("UPDATE comic_info SET "
|
||||||
|
"title = :title,"
|
||||||
|
|
||||||
|
"coverPage = :coverPage,"
|
||||||
|
"numPages = :numPages,"
|
||||||
|
|
||||||
|
"number = :number,"
|
||||||
|
"isBis = :isBis,"
|
||||||
|
"count = :count,"
|
||||||
|
|
||||||
|
"volume = :volume,"
|
||||||
|
"storyArc = :storyArc,"
|
||||||
|
"arcNumber = :arcNumber,"
|
||||||
|
"arcCount = :arcCount,"
|
||||||
|
|
||||||
|
"genere = :genere,"
|
||||||
|
|
||||||
|
"writer = :writer,"
|
||||||
|
"penciller = :penciller,"
|
||||||
|
"inker = :inker,"
|
||||||
|
"colorist = :colorist,"
|
||||||
|
"letterer = :letterer,"
|
||||||
|
"coverArtist = :coverArtist,"
|
||||||
|
|
||||||
|
"date = :date,"
|
||||||
|
"publisher = :publisher,"
|
||||||
|
"format = :format,"
|
||||||
|
"color = :color,"
|
||||||
|
"ageRating = :ageRating,"
|
||||||
|
|
||||||
|
"synopsis = :synopsis,"
|
||||||
|
"characters = :characters,"
|
||||||
|
"notes = :notes,"
|
||||||
|
|
||||||
|
"read = :read,"
|
||||||
|
"edited = :edited"
|
||||||
|
|
||||||
|
" WHERE id = :id ");
|
||||||
|
bindField(":title",comicInfo->title,updateComicInfo);
|
||||||
|
|
||||||
|
bindField(":coverPage",comicInfo->coverPage,updateComicInfo);
|
||||||
|
bindField(":numPages",comicInfo->numPages,updateComicInfo);
|
||||||
|
|
||||||
|
bindField(":number",comicInfo->number,updateComicInfo);
|
||||||
|
bindField(":isBis",comicInfo->isBis,updateComicInfo);
|
||||||
|
bindField(":count",comicInfo->count,updateComicInfo);
|
||||||
|
|
||||||
|
bindField(":volume",comicInfo->volume,updateComicInfo);
|
||||||
|
bindField(":storyArc",comicInfo->storyArc,updateComicInfo);
|
||||||
|
bindField(":arcNumber",comicInfo->arcNumber,updateComicInfo);
|
||||||
|
bindField(":arcCount",comicInfo->arcCount,updateComicInfo);
|
||||||
|
|
||||||
|
bindField(":genere",comicInfo->genere,updateComicInfo);
|
||||||
|
|
||||||
|
bindField(":writer",comicInfo->writer,updateComicInfo);
|
||||||
|
bindField(":penciller",comicInfo->penciller,updateComicInfo);
|
||||||
|
bindField(":inker",comicInfo->inker,updateComicInfo);
|
||||||
|
bindField(":colorist",comicInfo->colorist,updateComicInfo);
|
||||||
|
bindField(":letterer",comicInfo->letterer,updateComicInfo);
|
||||||
|
bindField(":coverArtist",comicInfo->coverArtist,updateComicInfo);
|
||||||
|
|
||||||
|
bindField(":date",comicInfo->date,updateComicInfo);
|
||||||
|
bindField(":publisher",comicInfo->publisher,updateComicInfo);
|
||||||
|
bindField(":format",comicInfo->format,updateComicInfo);
|
||||||
|
bindField(":color",comicInfo->color,updateComicInfo);
|
||||||
|
bindField(":ageRating",comicInfo->ageRating,updateComicInfo);
|
||||||
|
|
||||||
|
bindField(":synopsis",comicInfo->synopsis,updateComicInfo);
|
||||||
|
bindField(":characters",comicInfo->characters,updateComicInfo);
|
||||||
|
bindField(":notes",comicInfo->notes,updateComicInfo);
|
||||||
|
|
||||||
|
updateComicInfo.bindValue(":read", comicInfo->read?1:0);
|
||||||
|
updateComicInfo.bindValue(":id", comicInfo->id);
|
||||||
|
updateComicInfo.bindValue(":edited", comicInfo->edited?1:0);
|
||||||
|
updateComicInfo.exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DBHelper::updateRead(ComicInfo * comicInfo, QSqlDatabase & db)
|
||||||
|
{
|
||||||
|
QSqlQuery findComicInfo(db);
|
||||||
|
findComicInfo.prepare("UPDATE comic_info SET "
|
||||||
|
"read = :read"
|
||||||
|
" WHERE id = :id ");
|
||||||
|
|
||||||
|
findComicInfo.bindValue(":read", comicInfo->read?1:0);
|
||||||
|
findComicInfo.bindValue(":id", comicInfo->id);
|
||||||
|
findComicInfo.exec();
|
||||||
|
}
|
||||||
//inserts
|
//inserts
|
||||||
qulonglong DBHelper::insert(Folder * folder, QSqlDatabase & db)
|
qulonglong DBHelper::insert(Folder * folder, QSqlDatabase & db)
|
||||||
{
|
{
|
||||||
@ -164,6 +262,32 @@ qulonglong DBHelper::insert(Folder * folder, QSqlDatabase & db)
|
|||||||
return query.lastInsertId().toULongLong();
|
return query.lastInsertId().toULongLong();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qulonglong DBHelper::insert(ComicDB * comic, QSqlDatabase & db)
|
||||||
|
{
|
||||||
|
if(!comic->info.existOnDb)
|
||||||
|
{
|
||||||
|
QSqlQuery comicInfoInsert(db);
|
||||||
|
comicInfoInsert.prepare("INSERT INTO comic_info (hash,numPages) "
|
||||||
|
"VALUES (:hash,:numPages)");
|
||||||
|
comicInfoInsert.bindValue(":hash", comic->info.hash);
|
||||||
|
comicInfoInsert.bindValue(":numPages", *(comic->info.numPages));
|
||||||
|
comicInfoInsert.exec();
|
||||||
|
comic->info.id =comicInfoInsert.lastInsertId().toULongLong();
|
||||||
|
comic->_hasCover = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
comic->_hasCover = true;
|
||||||
|
|
||||||
|
QSqlQuery query(db);
|
||||||
|
query.prepare("INSERT INTO comic (parentId, comicInfoId, fileName, path) "
|
||||||
|
"VALUES (:parentId,:comicInfoId,:name, :path)");
|
||||||
|
query.bindValue(":parentId", comic->parentId);
|
||||||
|
query.bindValue(":comicInfoId", comic->info.id);
|
||||||
|
query.bindValue(":name", comic->name);
|
||||||
|
query.bindValue(":path", comic->path);
|
||||||
|
query.exec();
|
||||||
|
return query.lastInsertId().toULongLong();
|
||||||
|
}
|
||||||
//queries
|
//queries
|
||||||
QList<LibraryItem *> DBHelper::getFoldersFromParent(qulonglong parentId, QSqlDatabase & db, bool sort)
|
QList<LibraryItem *> DBHelper::getFoldersFromParent(qulonglong parentId, QSqlDatabase & db, bool sort)
|
||||||
{
|
{
|
||||||
@ -210,6 +334,55 @@ QList<LibraryItem *> DBHelper::getFoldersFromParent(qulonglong parentId, QSqlDat
|
|||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
QList<LibraryItem *> DBHelper::getComicsFromParent(qulonglong parentId, QSqlDatabase & db, bool sort)
|
||||||
|
{
|
||||||
|
QList<LibraryItem *> list;
|
||||||
|
|
||||||
|
QSqlQuery selectQuery(db);
|
||||||
|
selectQuery.prepare("select c.id,c.parentId,c.fileName,c.path,ci.hash from comic c inner join comic_info ci on (c.comicInfoId = ci.id) where c.parentId = :parentId");
|
||||||
|
selectQuery.bindValue(":parentId", parentId);
|
||||||
|
selectQuery.exec();
|
||||||
|
|
||||||
|
ComicDB * currentItem;
|
||||||
|
while (selectQuery.next())
|
||||||
|
{
|
||||||
|
QList<QVariant> data;
|
||||||
|
QSqlRecord record = selectQuery.record();
|
||||||
|
for(int i=0;i<record.count();i++)
|
||||||
|
data << record.value(i);
|
||||||
|
|
||||||
|
currentItem = new ComicDB();
|
||||||
|
currentItem->id = record.value("id").toULongLong();
|
||||||
|
currentItem->parentId = record.value(1).toULongLong();
|
||||||
|
currentItem->name = record.value(2).toString();
|
||||||
|
currentItem->path = record.value(3).toString();
|
||||||
|
currentItem->info = DBHelper::loadComicInfo(record.value(4).toString(),db);
|
||||||
|
int lessThan = 0;
|
||||||
|
if(list.isEmpty() || !sort)
|
||||||
|
list.append(currentItem);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ComicDB * last = static_cast<ComicDB *>(list.back());
|
||||||
|
QString nameLast = last->name;
|
||||||
|
QString nameCurrent = currentItem->name;
|
||||||
|
QList<LibraryItem *>::iterator i;
|
||||||
|
i = list.end();
|
||||||
|
i--;
|
||||||
|
while ((0 > (lessThan = nameCurrent.localeAwareCompare(nameLast))) && i != list.begin()) //se usa la misma ordenación que en QDir
|
||||||
|
{
|
||||||
|
i--;
|
||||||
|
nameLast = (*i)->name;
|
||||||
|
}
|
||||||
|
if(lessThan>0) //si se ha encontrado un elemento menor que current, se inserta justo después
|
||||||
|
list.insert(++i,currentItem);
|
||||||
|
else
|
||||||
|
list.insert(i,currentItem);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//selectQuery.finish();
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
//loads
|
//loads
|
||||||
Folder DBHelper::loadFolder(qulonglong id, QSqlDatabase & db)
|
Folder DBHelper::loadFolder(qulonglong id, QSqlDatabase & db)
|
||||||
@ -232,3 +405,160 @@ Folder DBHelper::loadFolder(qulonglong id, QSqlDatabase & db)
|
|||||||
|
|
||||||
return folder;
|
return folder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ComicDB DBHelper::loadComic(qulonglong id, QSqlDatabase & db)
|
||||||
|
{
|
||||||
|
ComicDB comic;
|
||||||
|
|
||||||
|
QSqlQuery selectQuery(db);
|
||||||
|
selectQuery.prepare("select c.id,c.parentId,c.fileName,c.path,ci.hash from comic c inner join comic_info ci on (c.comicInfoId = ci.id) where c.id = :id");
|
||||||
|
selectQuery.bindValue(":id", id);
|
||||||
|
selectQuery.exec();
|
||||||
|
comic.id = id;
|
||||||
|
if(selectQuery.next())
|
||||||
|
{
|
||||||
|
QSqlRecord record = selectQuery.record();
|
||||||
|
//id = record.value("id").toULongLong();
|
||||||
|
comic.parentId = record.value("parentId").toULongLong();
|
||||||
|
comic.name = record.value("name").toString();
|
||||||
|
comic.path = record.value("path").toString();
|
||||||
|
comic.info = DBHelper::loadComicInfo(record.value("hash").toString(),db);
|
||||||
|
}
|
||||||
|
|
||||||
|
return comic;
|
||||||
|
}
|
||||||
|
|
||||||
|
ComicDB DBHelper::loadComic(qulonglong cparentId, QString cname, QString cpath, QString chash, QSqlDatabase & database)
|
||||||
|
{
|
||||||
|
ComicDB comic;
|
||||||
|
|
||||||
|
comic.parentId = cparentId;
|
||||||
|
comic.name = cname;
|
||||||
|
comic.path = cpath;
|
||||||
|
|
||||||
|
comic.info = DBHelper::loadComicInfo(chash,database);
|
||||||
|
|
||||||
|
if(!comic.info.existOnDb)
|
||||||
|
{
|
||||||
|
comic.info.hash = chash;
|
||||||
|
comic.info.coverPage = new int(1);
|
||||||
|
comic._hasCover = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
comic._hasCover = true;
|
||||||
|
|
||||||
|
return comic;
|
||||||
|
}
|
||||||
|
|
||||||
|
ComicInfo DBHelper::loadComicInfo(QString hash, QSqlDatabase & db)
|
||||||
|
{
|
||||||
|
ComicInfo comicInfo;
|
||||||
|
|
||||||
|
QSqlQuery findComicInfo(db);
|
||||||
|
findComicInfo.prepare("SELECT * FROM comic_info WHERE hash = :hash");
|
||||||
|
findComicInfo.bindValue(":hash", hash);
|
||||||
|
findComicInfo.exec();
|
||||||
|
|
||||||
|
|
||||||
|
if(findComicInfo.next())
|
||||||
|
{
|
||||||
|
comicInfo.hash = hash;
|
||||||
|
QSqlRecord record = findComicInfo.record();
|
||||||
|
|
||||||
|
comicInfo.hash = hash;
|
||||||
|
comicInfo.id = record.value("id").toULongLong();
|
||||||
|
comicInfo.read = record.value("read").toBool();
|
||||||
|
comicInfo.edited = record.value("edited").toBool();
|
||||||
|
|
||||||
|
setField("title",comicInfo.title,record);
|
||||||
|
setField("numPages",comicInfo.numPages,record);
|
||||||
|
|
||||||
|
setField("coverPage",comicInfo.coverPage,record);
|
||||||
|
|
||||||
|
setField("number",comicInfo.number,record);
|
||||||
|
setField("isBis",comicInfo.isBis,record);
|
||||||
|
setField("count",comicInfo.count,record);
|
||||||
|
|
||||||
|
setField("volume",comicInfo.volume,record);
|
||||||
|
setField("storyArc",comicInfo.storyArc,record);
|
||||||
|
setField("arcNumber",comicInfo.arcNumber,record);
|
||||||
|
setField("arcCount",comicInfo.arcCount,record);
|
||||||
|
|
||||||
|
setField("genere",comicInfo.genere,record);
|
||||||
|
|
||||||
|
setField("writer",comicInfo.writer,record);
|
||||||
|
setField("penciller",comicInfo.penciller,record);
|
||||||
|
setField("inker",comicInfo.inker,record);
|
||||||
|
setField("colorist",comicInfo.colorist,record);
|
||||||
|
setField("letterer",comicInfo.letterer,record);
|
||||||
|
setField("coverArtist",comicInfo.coverArtist,record);
|
||||||
|
|
||||||
|
setField("date",comicInfo.date,record);
|
||||||
|
setField("publisher",comicInfo.publisher,record);
|
||||||
|
setField("format",comicInfo.format,record);
|
||||||
|
setField("color",comicInfo.color,record);
|
||||||
|
setField("ageRating",comicInfo.ageRating,record);
|
||||||
|
|
||||||
|
setField("synopsis",comicInfo.synopsis,record);
|
||||||
|
setField("characters",comicInfo.characters,record);
|
||||||
|
setField("notes",comicInfo.notes,record);
|
||||||
|
|
||||||
|
comicInfo.existOnDb = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
comicInfo.existOnDb = false;
|
||||||
|
|
||||||
|
return comicInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DBHelper::setField(const QString & name, QString * & field, QSqlRecord & record)
|
||||||
|
{
|
||||||
|
if(!record.value(name).isNull())
|
||||||
|
{
|
||||||
|
field = new QString();
|
||||||
|
*field = record.value(name).toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DBHelper::setField(const QString & name, int * & field, QSqlRecord & record)
|
||||||
|
{
|
||||||
|
if(!record.value(name).isNull())
|
||||||
|
{
|
||||||
|
field = new int;
|
||||||
|
*field = record.value(name).toInt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DBHelper::setField(const QString & name, bool * & field, QSqlRecord & record)
|
||||||
|
{
|
||||||
|
if(!record.value(name).isNull())
|
||||||
|
{
|
||||||
|
field = new bool;
|
||||||
|
*field = record.value(name).toBool();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DBHelper::bindField(const QString & name, QString * field, QSqlQuery & query)
|
||||||
|
{
|
||||||
|
if(field != NULL)
|
||||||
|
{
|
||||||
|
query.bindValue(name,*field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DBHelper::bindField(const QString & name, int * field, QSqlQuery & query)
|
||||||
|
{
|
||||||
|
if(field != NULL)
|
||||||
|
{
|
||||||
|
query.bindValue(name,*field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DBHelper::bindField(const QString & name, bool * field, QSqlQuery & query)
|
||||||
|
{
|
||||||
|
if(field != NULL)
|
||||||
|
{
|
||||||
|
query.bindValue(name,*field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -9,6 +9,9 @@ class ComicDB;
|
|||||||
class Folder;
|
class Folder;
|
||||||
class LibraryItem;
|
class LibraryItem;
|
||||||
class QSqlDatabase;
|
class QSqlDatabase;
|
||||||
|
class ComicInfo;
|
||||||
|
class QSqlRecord;
|
||||||
|
class QSqlQuery;
|
||||||
|
|
||||||
class DBHelper
|
class DBHelper
|
||||||
{
|
{
|
||||||
@ -28,13 +31,27 @@ public:
|
|||||||
static void removeFromDB(ComicDB * comic, QSqlDatabase & db);
|
static void removeFromDB(ComicDB * comic, QSqlDatabase & db);
|
||||||
//inserts
|
//inserts
|
||||||
static qulonglong insert(Folder * folder, QSqlDatabase & db);
|
static qulonglong insert(Folder * folder, QSqlDatabase & db);
|
||||||
|
static qulonglong insert(ComicDB * comic, QSqlDatabase & db);
|
||||||
//updates
|
//updates
|
||||||
|
static void update(ComicDB * comics, QSqlDatabase & db);
|
||||||
|
static void update(ComicInfo * comicInfo, QSqlDatabase & db);
|
||||||
|
static void updateRead(ComicInfo * comicInfo, QSqlDatabase & db);
|
||||||
//queries
|
//queries
|
||||||
static QList<LibraryItem *> getFoldersFromParent(qulonglong parentId, QSqlDatabase & db, bool sort = true);
|
static QList<LibraryItem *> getFoldersFromParent(qulonglong parentId, QSqlDatabase & db, bool sort = true);
|
||||||
|
static QList<LibraryItem *> getComicsFromParent(qulonglong parentId, QSqlDatabase & db, bool sort = true);
|
||||||
//load
|
//load
|
||||||
static Folder loadFolder(qulonglong id, QSqlDatabase & db);
|
static Folder loadFolder(qulonglong id, QSqlDatabase & db);
|
||||||
|
static ComicDB loadComic(qulonglong id, QSqlDatabase & db);
|
||||||
|
static ComicDB loadComic(qulonglong cparentId, QString cname, QString cpath, QString chash, QSqlDatabase & database);
|
||||||
|
static ComicInfo loadComicInfo(QString hash, QSqlDatabase & db);
|
||||||
|
private:
|
||||||
|
static void setField(const QString & name, QString * & field, QSqlRecord & record);
|
||||||
|
static void setField(const QString & name, int * & field, QSqlRecord & record);
|
||||||
|
static void setField(const QString & name, bool * & field, QSqlRecord & record);
|
||||||
|
|
||||||
|
static void bindField(const QString & name, QString * field, QSqlQuery & query);
|
||||||
|
static void bindField(const QString & name, int * field, QSqlQuery & query);
|
||||||
|
static void bindField(const QString & name, bool * field, QSqlQuery & query);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -194,7 +194,7 @@ void LibraryCreator::insertComic(const QString & relativePath,const QFileInfo &
|
|||||||
file.close();
|
file.close();
|
||||||
//hash Sha1 del primer 0.5MB + filesize
|
//hash Sha1 del primer 0.5MB + filesize
|
||||||
QString hash = QString(crypto.result().toHex().constData()) + QString::number(fileInfo.size());
|
QString hash = QString(crypto.result().toHex().constData()) + QString::number(fileInfo.size());
|
||||||
ComicDB comic(_currentPathFolders.last().id,fileInfo.fileName(),relativePath,hash,_database);
|
ComicDB comic = DBHelper::loadComic(_currentPathFolders.last().id,fileInfo.fileName(),relativePath,hash,_database);
|
||||||
int numPages;
|
int numPages;
|
||||||
|
|
||||||
if(! ( comic.hasCover() && checkCover(hash)))
|
if(! ( comic.hasCover() && checkCover(hash)))
|
||||||
@ -207,7 +207,7 @@ void LibraryCreator::insertComic(const QString & relativePath,const QFileInfo &
|
|||||||
emit(comicAdded(relativePath,_target+"/covers/"+hash+".jpg"));
|
emit(comicAdded(relativePath,_target+"/covers/"+hash+".jpg"));
|
||||||
}
|
}
|
||||||
comic.info.setNumPages(numPages);
|
comic.info.setNumPages(numPages);
|
||||||
comic.insert(_database);
|
DBHelper::insert(&comic,_database);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LibraryCreator::update(QDir dirS)
|
void LibraryCreator::update(QDir dirS)
|
||||||
@ -218,7 +218,7 @@ void LibraryCreator::update(QDir dirS)
|
|||||||
QFileInfoList listS = dirS.entryInfoList();
|
QFileInfoList listS = dirS.entryInfoList();
|
||||||
|
|
||||||
QList<LibraryItem *> folders = DBHelper::getFoldersFromParent(_currentPathFolders.last().id,_database);
|
QList<LibraryItem *> folders = DBHelper::getFoldersFromParent(_currentPathFolders.last().id,_database);
|
||||||
QList<LibraryItem *> comics = ComicDB::getComicsFromParent(_currentPathFolders.last().id,_database);
|
QList<LibraryItem *> comics = DBHelper::getComicsFromParent(_currentPathFolders.last().id,_database);
|
||||||
|
|
||||||
QList <LibraryItem *> listD;
|
QList <LibraryItem *> listD;
|
||||||
listD.append(folders);
|
listD.append(folders);
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include "library_creator.h"
|
#include "library_creator.h"
|
||||||
#include "yacreader_field_edit.h"
|
#include "yacreader_field_edit.h"
|
||||||
#include "yacreader_field_plain_text_edit.h"
|
#include "yacreader_field_plain_text_edit.h"
|
||||||
|
#include "db_helper.h"
|
||||||
|
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
@ -432,7 +433,7 @@ void PropertiesDialog::updateComics()
|
|||||||
for(itr = comics.begin();itr!=comics.end();itr++)
|
for(itr = comics.begin();itr!=comics.end();itr++)
|
||||||
{
|
{
|
||||||
if(itr->info.edited)
|
if(itr->info.edited)
|
||||||
itr->info.update(db);
|
DBHelper::update(&(itr->info),db);
|
||||||
}
|
}
|
||||||
db.commit();
|
db.commit();
|
||||||
db.close();
|
db.close();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user