mirror of
https://github.com/YACReader/yacreader
synced 2025-06-04 01:28:55 -04:00
completada la b?squeda con el soporte para incluir el nombre de los archivos, aunque falta por a?adir el scroll autom?tico arreglada la actualizaci?n de las librer?as, ahora se a?ade el nodo ra?z a la tabla folder, el nodo ra?z ahora tiene id=1 y padre 1, se debe excluir de todas las b?squedas
175 lines
4.3 KiB
C++
175 lines
4.3 KiB
C++
#include "comic.h"
|
|
|
|
#include <QSqlQuery>
|
|
#include <QSqlRecord>
|
|
#include <QVariant>
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//COMIC------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
Comic::Comic()
|
|
{
|
|
|
|
}
|
|
|
|
Comic::Comic(qulonglong cparentId, QString cname, QString cpath, QString chash, QSqlDatabase & database)
|
|
{
|
|
parentId = cparentId;
|
|
name = cname;
|
|
path = cpath;
|
|
|
|
if(!info.load(chash,database))
|
|
{
|
|
info.hash = chash;
|
|
_hasCover = false;
|
|
}
|
|
else
|
|
_hasCover = true;
|
|
}
|
|
|
|
QList<LibraryItem *> Comic::getComicsFromParent(qulonglong parentId, QSqlDatabase & db)
|
|
{
|
|
QList<LibraryItem *> list;
|
|
|
|
QSqlQuery selectQuery(db); //TODO check
|
|
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();
|
|
|
|
Comic * currentItem;
|
|
while (selectQuery.next())
|
|
{
|
|
QList<QVariant> data;
|
|
QSqlRecord record = selectQuery.record();
|
|
for(int i=0;i<record.count();i++)
|
|
data << record.value(i);
|
|
//TODO sort by sort indicator and name
|
|
currentItem = new Comic();
|
|
currentItem->id = record.value(0).toLongLong();
|
|
currentItem->parentId = record.value(1).toLongLong();
|
|
currentItem->name = record.value(2).toString();
|
|
currentItem->info.load(record.value(3).toString(),db);
|
|
int lessThan = 0;
|
|
if(list.isEmpty())
|
|
list.append(currentItem);
|
|
else
|
|
{
|
|
Comic * last = static_cast<Comic *>(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);
|
|
|
|
}
|
|
}
|
|
|
|
return list;
|
|
}
|
|
|
|
bool Comic::load(qulonglong id, QSqlDatabase & db)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
qulonglong Comic::insert(QSqlDatabase & db)
|
|
{
|
|
//TODO comprobar si ya hay comic info con ese hash
|
|
|
|
if(!info.existOnDb)
|
|
{
|
|
QSqlQuery comicInfoInsert(db);
|
|
comicInfoInsert.prepare("INSERT INTO comic_info (hash) "
|
|
"VALUES (:hash)");
|
|
comicInfoInsert.bindValue(":hash", info.hash);
|
|
comicInfoInsert.exec();
|
|
info.id =comicInfoInsert.lastInsertId().toLongLong();
|
|
_hasCover = false;
|
|
}
|
|
else
|
|
_hasCover = true; //TODO check on disk...
|
|
|
|
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().toLongLong();
|
|
}
|
|
|
|
void Comic::update(QSqlDatabase & db)
|
|
{
|
|
|
|
}
|
|
|
|
void Comic::removeFromDB(QSqlDatabase & db)
|
|
{
|
|
QSqlQuery query(db);
|
|
query.prepare("DELETE FROM comic WHERE id = :id");
|
|
query.bindValue(":id", id);
|
|
query.exec();
|
|
}
|
|
|
|
bool Comic::isDir()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//COMIC_INFO-------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
ComicInfo::ComicInfo()
|
|
:existOnDb(false)
|
|
{
|
|
|
|
}
|
|
|
|
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())
|
|
{
|
|
QSqlRecord record = findComicInfo.record();
|
|
|
|
this->hash = hash;
|
|
this->id = record.value(0).toLongLong();
|
|
this->name = record.value(2).toString();
|
|
this->read = record.value(3).toBool();
|
|
existOnDb = true;
|
|
return true;
|
|
}
|
|
|
|
existOnDb = false;
|
|
return false;
|
|
}
|
|
|
|
qulonglong ComicInfo::insert(QSqlDatabase & db)
|
|
{
|
|
return 0;
|
|
}
|
|
void ComicInfo::removeFromDB(QSqlDatabase & db)
|
|
{
|
|
|
|
}
|
|
void ComicInfo::update(QSqlDatabase & db)
|
|
{
|
|
|
|
}
|