mirror of
https://github.com/YACReader/yacreader
synced 2025-05-28 03:10:27 -04:00
export comics info listo
cambio de acceso a las columnas de las querys (enteros por literales)
This commit is contained in:
parent
5f89443060
commit
cd2b9f798a
@ -45,7 +45,7 @@ QList<LibraryItem *> Comic::getComicsFromParent(qulonglong parentId, QSqlDatabas
|
|||||||
data << record.value(i);
|
data << record.value(i);
|
||||||
//TODO sort by sort indicator and name
|
//TODO sort by sort indicator and name
|
||||||
currentItem = new Comic();
|
currentItem = new Comic();
|
||||||
currentItem->id = record.value(0).toLongLong();
|
currentItem->id = record.value("id").toLongLong();
|
||||||
currentItem->parentId = record.value(1).toLongLong();
|
currentItem->parentId = record.value(1).toLongLong();
|
||||||
currentItem->name = record.value(2).toString();
|
currentItem->name = record.value(2).toString();
|
||||||
currentItem->path = record.value(3).toString();
|
currentItem->path = record.value(3).toString();
|
||||||
@ -88,10 +88,10 @@ bool Comic::load(qulonglong id, QSqlDatabase & db)
|
|||||||
if(selectQuery.next())
|
if(selectQuery.next())
|
||||||
{
|
{
|
||||||
QSqlRecord record = selectQuery.record();
|
QSqlRecord record = selectQuery.record();
|
||||||
id = record.value(0).toLongLong();
|
id = record.value("id").toLongLong();
|
||||||
parentId = record.value(1).toLongLong();
|
parentId = record.value("parentId").toLongLong();
|
||||||
name = record.value(2).toString();
|
name = record.value("name").toString();
|
||||||
info.load(record.value(4).toString(),db);
|
info.load(record.value("hash").toString(),db);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -101,6 +101,7 @@ bool Comic::load(qulonglong id, QSqlDatabase & db)
|
|||||||
qulonglong Comic::insert(QSqlDatabase & db)
|
qulonglong Comic::insert(QSqlDatabase & db)
|
||||||
{
|
{
|
||||||
//TODO comprobar si ya hay comic info con ese hash
|
//TODO comprobar si ya hay comic info con ese hash
|
||||||
|
//TODO cambiar por info.insert(db)
|
||||||
|
|
||||||
if(!info.existOnDb)
|
if(!info.existOnDb)
|
||||||
{
|
{
|
||||||
@ -166,9 +167,10 @@ bool ComicInfo::load(QString hash, QSqlDatabase & db)
|
|||||||
QSqlRecord record = findComicInfo.record();
|
QSqlRecord record = findComicInfo.record();
|
||||||
|
|
||||||
this->hash = hash;
|
this->hash = hash;
|
||||||
this->id = record.value(0).toLongLong();
|
this->id = record.value("id").toLongLong();
|
||||||
this->name = record.value(2).toString();
|
this->title = record.value("title").toString();
|
||||||
this->read = record.value(3).toBool();
|
this->read = record.value("read").toBool();
|
||||||
|
this->edited = record.value("edited").toBool();
|
||||||
existOnDb = true;
|
existOnDb = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -189,8 +191,8 @@ void ComicInfo::update(QSqlDatabase & db)
|
|||||||
{
|
{
|
||||||
//db.open();
|
//db.open();
|
||||||
QSqlQuery findComicInfo(db);
|
QSqlQuery findComicInfo(db);
|
||||||
findComicInfo.prepare("UPDATE comic_info SET name = :name, read = :read WHERE id = :id ");
|
findComicInfo.prepare("UPDATE comic_info SET title = :title, read = :read WHERE id = :id ");
|
||||||
findComicInfo.bindValue(":name", name);
|
findComicInfo.bindValue(":title", title);
|
||||||
findComicInfo.bindValue(":read", read?1:0);
|
findComicInfo.bindValue(":read", read?1:0);
|
||||||
findComicInfo.bindValue(":id", id);
|
findComicInfo.bindValue(":id", id);
|
||||||
findComicInfo.exec();
|
findComicInfo.exec();
|
||||||
|
@ -17,8 +17,9 @@ public:
|
|||||||
|
|
||||||
qulonglong id;
|
qulonglong id;
|
||||||
bool read;
|
bool read;
|
||||||
|
bool edited;
|
||||||
QString hash;
|
QString hash;
|
||||||
QString name;
|
QString title;
|
||||||
|
|
||||||
bool existOnDb;
|
bool existOnDb;
|
||||||
};
|
};
|
||||||
|
@ -18,9 +18,14 @@ TreeModel * DataBaseManagement::newTreeModel(QString path)
|
|||||||
}
|
}
|
||||||
|
|
||||||
QSqlDatabase DataBaseManagement::createDatabase(QString name, QString path)
|
QSqlDatabase DataBaseManagement::createDatabase(QString name, QString path)
|
||||||
|
{
|
||||||
|
return createDatabase(QDir::cleanPath(path) + "/" + name + ".ydb");
|
||||||
|
}
|
||||||
|
|
||||||
|
QSqlDatabase DataBaseManagement::createDatabase(QString dest)
|
||||||
{
|
{
|
||||||
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
|
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
|
||||||
db.setDatabaseName(QDir::cleanPath(path) + "/" + name + ".ydb");
|
db.setDatabaseName(dest);
|
||||||
if (!db.open())
|
if (!db.open())
|
||||||
qDebug() << db.lastError();
|
qDebug() << db.lastError();
|
||||||
else {
|
else {
|
||||||
@ -63,7 +68,7 @@ bool DataBaseManagement::createTables(QSqlDatabase & database)
|
|||||||
|
|
||||||
//COMIC INFO (representa la información de un cómic, cada cómic tendrá un idéntificador único formado por un hash sha1'de los primeros 512kb' + su tamaño en bytes)
|
//COMIC INFO (representa la información de un cómic, cada cómic tendrá un idéntificador único formado por un hash sha1'de los primeros 512kb' + su tamaño en bytes)
|
||||||
QSqlQuery queryComicInfo(database);
|
QSqlQuery queryComicInfo(database);
|
||||||
queryComicInfo.prepare("CREATE TABLE comic_info (id INTEGER PRIMARY KEY, hash TEXT NOT NULL, name TEXT, read BOOLEAN)");
|
queryComicInfo.prepare("CREATE TABLE comic_info (id INTEGER PRIMARY KEY, hash TEXT NOT NULL, edited BOOLEAN DEFAULT 0, title TEXT, read BOOLEAN)");
|
||||||
success = success && queryComicInfo.exec();
|
success = success && queryComicInfo.exec();
|
||||||
|
|
||||||
//COMIC (representa un cómic en disco, contiene el nombre de fichero)
|
//COMIC (representa un cómic en disco, contiene el nombre de fichero)
|
||||||
@ -85,13 +90,80 @@ bool DataBaseManagement::createTables(QSqlDatabase & database)
|
|||||||
|
|
||||||
void DataBaseManagement::exportComicsInfo(QString source, QString dest)
|
void DataBaseManagement::exportComicsInfo(QString source, QString dest)
|
||||||
{
|
{
|
||||||
QSqlDatabase source = loadDatabase(source);
|
QSqlDatabase sourceDB = loadDatabase(source);
|
||||||
QSqlDatabase dest = loadDatabase(dest);
|
QSqlDatabase destDB = QSqlDatabase::addDatabase("QSQLITE");
|
||||||
|
destDB.setDatabaseName(dest);
|
||||||
|
destDB.open();
|
||||||
|
sourceDB.open();
|
||||||
|
|
||||||
|
QSqlQuery attach(sourceDB);
|
||||||
|
attach.prepare("ATTACH DATABASE '"+QDir().toNativeSeparators(dest) +"' AS dest;");
|
||||||
|
//attach.bindValue(":dest",QDir().toNativeSeparators(dest));
|
||||||
|
attach.exec();
|
||||||
|
|
||||||
|
QSqlQuery attach2(sourceDB);
|
||||||
|
attach2.prepare("ATTACH DATABASE '"+QDir().toNativeSeparators(source) +"' AS source;");
|
||||||
|
attach2.exec();
|
||||||
|
|
||||||
|
//sourceDB.close();
|
||||||
|
QSqlQuery queryDBInfo(sourceDB);
|
||||||
|
queryDBInfo.prepare("CREATE TABLE dest.db_info (version TEXT NOT NULL)");
|
||||||
|
queryDBInfo.exec();
|
||||||
|
|
||||||
|
/*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) "
|
||||||
|
"VALUES ('5.0.0')",sourceDB);
|
||||||
|
|
||||||
|
QSqlQuery exportData(sourceDB);
|
||||||
|
exportData.prepare("create table dest.comic_info as select * from source.comic_info where source.comic_info.edited = 1");
|
||||||
|
exportData.exec();
|
||||||
|
|
||||||
|
QString error = exportData.lastError().databaseText();
|
||||||
|
QString error2 = exportData.lastError().text();
|
||||||
|
|
||||||
|
sourceDB.close();
|
||||||
|
destDB.close();
|
||||||
|
|
||||||
}
|
}
|
||||||
void DataBaseManagement::importComicsInfo(QString source, QString dest)
|
void DataBaseManagement::importComicsInfo(QString source, QString dest)
|
||||||
{
|
{
|
||||||
QSqlDatabase source = loadDatabase(source);
|
QSqlDatabase sourceDB = loadDatabase(source);
|
||||||
QSqlDatabase dest = loadDatabase(dest);
|
QSqlDatabase destDB = loadDatabase(dest);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//COMICS_INFO_EXPORTER
|
||||||
|
ComicsInfoExporter::ComicsInfoExporter()
|
||||||
|
:QThread()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComicsInfoExporter::exportComicsInfo(QSqlDatabase & source, QSqlDatabase & dest)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComicsInfoExporter::run()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//COMICS_INFO_IMPORTER
|
||||||
|
ComicsInfoImporter::ComicsInfoImporter()
|
||||||
|
:QThread()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComicsInfoImporter::importComicsInfo(QSqlDatabase & source, QSqlDatabase & dest)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComicsInfoImporter::run()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
@ -7,6 +7,26 @@
|
|||||||
|
|
||||||
#include "treemodel.h"
|
#include "treemodel.h"
|
||||||
|
|
||||||
|
class ComicsInfoExporter : public QThread
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
ComicsInfoExporter();
|
||||||
|
void exportComicsInfo(QSqlDatabase & source, QSqlDatabase & dest);
|
||||||
|
private:
|
||||||
|
void run();
|
||||||
|
};
|
||||||
|
|
||||||
|
class ComicsInfoImporter : public QThread
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
ComicsInfoImporter();
|
||||||
|
void importComicsInfo(QSqlDatabase & source, QSqlDatabase & dest);
|
||||||
|
private:
|
||||||
|
void run();
|
||||||
|
};
|
||||||
|
|
||||||
class DataBaseManagement : public QObject
|
class DataBaseManagement : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -17,12 +37,13 @@ public:
|
|||||||
TreeModel * newTreeModel(QString path);
|
TreeModel * newTreeModel(QString path);
|
||||||
//crea una base de datos y todas sus tablas
|
//crea una base de datos y todas sus tablas
|
||||||
static QSqlDatabase createDatabase(QString name, QString path);
|
static QSqlDatabase createDatabase(QString name, QString path);
|
||||||
|
static QSqlDatabase createDatabase(QString dest);
|
||||||
//carga una base de datos desde la ruta path
|
//carga una base de datos desde la ruta path
|
||||||
static QSqlDatabase loadDatabase(QString path);
|
static QSqlDatabase loadDatabase(QString path);
|
||||||
static bool createTables(QSqlDatabase & database);
|
static bool createTables(QSqlDatabase & database);
|
||||||
|
|
||||||
void exportComicsInfo(QString source, QString dest);
|
static void exportComicsInfo(QString source, QString dest);
|
||||||
void importComicsInfo(QString source, QString dest);
|
static void importComicsInfo(QString source, QString dest);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -33,7 +33,7 @@ QList<LibraryItem *> Folder::getFoldersFromParent(qulonglong parentId, QSqlDatab
|
|||||||
for(int i=0;i<record.count();i++)
|
for(int i=0;i<record.count();i++)
|
||||||
data << record.value(i);
|
data << record.value(i);
|
||||||
//TODO sort by sort indicator and name
|
//TODO sort by sort indicator and name
|
||||||
currentItem = new Folder(record.value(0).toLongLong(),record.value(1).toLongLong(),record.value(2).toString(),record.value(2).toString());
|
currentItem = new Folder(record.value("id").toLongLong(),record.value("parentId").toLongLong(),record.value("name").toString(),record.value("path").toString());
|
||||||
int lessThan = 0;
|
int lessThan = 0;
|
||||||
if(list.isEmpty())
|
if(list.isEmpty())
|
||||||
list.append(currentItem);
|
list.append(currentItem);
|
||||||
|
@ -169,7 +169,7 @@ void TableModel::setupModelData(unsigned long long int folderId,QSqlDatabase & d
|
|||||||
//f.close();
|
//f.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString TableModel::getComicPath(QModelIndex & mi)
|
QString TableModel::getComicPath(QModelIndex mi)
|
||||||
{
|
{
|
||||||
if(mi.isValid())
|
if(mi.isValid())
|
||||||
return _data.at(mi.row())->data(3).toString();
|
return _data.at(mi.row())->data(3).toString();
|
||||||
|
@ -34,7 +34,7 @@ public:
|
|||||||
|
|
||||||
//Métodos de conveniencia
|
//Métodos de conveniencia
|
||||||
QStringList getPaths(const QString & _source);
|
QStringList getPaths(const QString & _source);
|
||||||
QString getComicPath(QModelIndex & mi);
|
QString getComicPath(QModelIndex mi);
|
||||||
Comic getComic(const QModelIndex & mi); //--> para la edición
|
Comic getComic(const QModelIndex & mi); //--> para la edición
|
||||||
QVector<bool> getReadList();
|
QVector<bool> getReadList();
|
||||||
QVector<bool> setAllComicsRead(bool read);
|
QVector<bool> setAllComicsRead(bool read);
|
||||||
|
@ -235,13 +235,15 @@ void TreeModel::setupModelData(QSqlQuery &sqlquery, TreeItem *parent)
|
|||||||
|
|
||||||
while (sqlquery.next()) {
|
while (sqlquery.next()) {
|
||||||
QList<QVariant> data;
|
QList<QVariant> data;
|
||||||
data << sqlquery.value(2).toString();
|
QSqlRecord record = sqlquery.record();
|
||||||
data << sqlquery.value(3).toString();
|
|
||||||
|
data << record.value("name").toString();
|
||||||
|
data << record.value("path").toString();
|
||||||
TreeItem * item = new TreeItem(data);
|
TreeItem * item = new TreeItem(data);
|
||||||
|
|
||||||
item->id = sqlquery.value(0).toLongLong();
|
item->id = record.value("id").toLongLong();
|
||||||
//la inserción de hijos se hace de forma ordenada
|
//la inserción de hijos se hace de forma ordenada
|
||||||
items.value(sqlquery.value(1).toLongLong())->appendChild(item);
|
items.value(record.value("parentId").toLongLong())->appendChild(item);
|
||||||
//se añade el item al map, de forma que se pueda encontrar como padre en siguientes iteraciones
|
//se añade el item al map, de forma que se pueda encontrar como padre en siguientes iteraciones
|
||||||
items.insert(item->id,item);
|
items.insert(item->id,item);
|
||||||
}
|
}
|
||||||
@ -300,13 +302,15 @@ void TreeModel::setupFilteredModelData(QSqlQuery &sqlquery, TreeItem *parent)
|
|||||||
while (sqlquery.next()) { //se procesan todos los folders que cumplen con el filtro
|
while (sqlquery.next()) { //se procesan todos los folders que cumplen con el filtro
|
||||||
//datos de la base de datos
|
//datos de la base de datos
|
||||||
QList<QVariant> data;
|
QList<QVariant> data;
|
||||||
data << sqlquery.value(2).toString();
|
QSqlRecord record = sqlquery.record();
|
||||||
data << sqlquery.value(3).toString();
|
|
||||||
|
data << record.value("name").toString();
|
||||||
|
data << record.value("path").toString();
|
||||||
TreeItem * item = new TreeItem(data);
|
TreeItem * item = new TreeItem(data);
|
||||||
item->id = sqlquery.value(0).toLongLong();
|
item->id = sqlquery.value(0).toLongLong();
|
||||||
|
|
||||||
//id del padre
|
//id del padre
|
||||||
quint64 parentId = sqlquery.value(1).toLongLong();
|
quint64 parentId = record.value("parentId").toLongLong();
|
||||||
|
|
||||||
//se añade el item al map, de forma que se pueda encontrar como padre en siguientes iteraciones
|
//se añade el item al map, de forma que se pueda encontrar como padre en siguientes iteraciones
|
||||||
if(!filteredItems.contains(item->id))
|
if(!filteredItems.contains(item->id))
|
||||||
|
@ -1150,6 +1150,7 @@ void LibraryWindow::hideComicFlow(bool hide)
|
|||||||
|
|
||||||
void LibraryWindow::showExportComicsInfo()
|
void LibraryWindow::showExportComicsInfo()
|
||||||
{
|
{
|
||||||
|
exportComicsInfoDialog->source = currentPath() + "/.yacreaderlibrary/library.ydb";
|
||||||
exportComicsInfoDialog->show();
|
exportComicsInfoDialog->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,7 +237,7 @@ void PropertiesDialog::setComics(QList<Comic> comics)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
Comic comic = comics.at(0);
|
Comic comic = comics.at(0);
|
||||||
title->setText(comic.info.name);
|
title->setText(comic.info.title);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user