From 0b1b3df8b2d3f588a3f4da659dd1d91c178003a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Fri, 29 Jun 2012 07:57:29 +0200 Subject: [PATCH] a?adido indicador de "loading" a los di?logos que procesan a?adido el codigo adecuado para relaizar los imports (falta incluir las opciones) comprobado que si se elimina la conexi?n a la BD despu?s del primer load, se puede manipular el archivo library.ydb --- YACReaderLibrary/create_library_dialog.cpp | 18 +- YACReaderLibrary/create_library_dialog.h | 4 +- YACReaderLibrary/db/data_base_management.cpp | 369 ++++++++++++++++--- YACReaderLibrary/db/data_base_management.h | 3 +- YACReaderLibrary/db/treemodel.cpp | 3 + YACReaderLibrary/export_library_dialog.cpp | 22 +- YACReaderLibrary/export_library_dialog.h | 4 +- YACReaderLibrary/import_library_dialog.cpp | 33 +- YACReaderLibrary/import_library_dialog.h | 6 +- YACReaderLibrary/library_window.cpp | 6 +- YACReaderLibrary/properties_dialog.h | 4 +- 11 files changed, 370 insertions(+), 102 deletions(-) diff --git a/YACReaderLibrary/create_library_dialog.cpp b/YACReaderLibrary/create_library_dialog.cpp index d13e991c..06da37b1 100644 --- a/YACReaderLibrary/create_library_dialog.cpp +++ b/YACReaderLibrary/create_library_dialog.cpp @@ -47,9 +47,13 @@ void CreateLibraryDialog::setupUI() QHBoxLayout *middleLayout = new QHBoxLayout; - processLabel = new QLabel("Procesing : "); + progressBar = new QProgressBar(this); + progressBar->setMinimum(0); + progressBar->setMaximum(0); + progressBar->setTextVisible(false); + progressBar->hide(); + currentFileLabel = new QLabel(""); - middleLayout->addWidget(processLabel); middleLayout->addWidget(currentFileLabel); middleLayout->addStretch(); @@ -63,6 +67,7 @@ void CreateLibraryDialog::setupUI() mainLayout->addLayout(libraryLayout); mainLayout->addLayout(middleLayout); mainLayout->addStretch(); + mainLayout->addWidget(progressBar); mainLayout->addLayout(bottomLayout); QHBoxLayout * imgMainLayout = new QHBoxLayout; @@ -80,6 +85,7 @@ void CreateLibraryDialog::setupUI() void CreateLibraryDialog::create() { + progressBar->show(); accept->setEnabled(false); emit(createLibrary(QDir::cleanPath(path->text()),QDir::cleanPath(path->text())+"/.yacreaderlibrary",nameEdit->text())); } @@ -102,6 +108,7 @@ void CreateLibraryDialog::showCurrentFile(QString file) } void CreateLibraryDialog::close() { + progressBar->hide(); path->clear(); nameEdit->clear(); currentFileLabel->setText(""); @@ -126,6 +133,13 @@ UpdateLibraryDialog::UpdateLibraryDialog(QWidget * parent) connect(cancel,SIGNAL(clicked()),this,SLOT(close())); mainLayout->addStretch(); + + progressBar = new QProgressBar(this); + progressBar->setMinimum(0); + progressBar->setMaximum(0); + progressBar->setTextVisible(false); + + mainLayout->addWidget(progressBar); mainLayout->addLayout(bottom); QHBoxLayout * imgMainLayout = new QHBoxLayout; diff --git a/YACReaderLibrary/create_library_dialog.h b/YACReaderLibrary/create_library_dialog.h index 424234f2..6ecf5ea0 100644 --- a/YACReaderLibrary/create_library_dialog.h +++ b/YACReaderLibrary/create_library_dialog.h @@ -6,6 +6,7 @@ #include #include #include +#include class CreateLibraryDialog : public QDialog { @@ -15,7 +16,7 @@ private: QLabel * nameLabel; QLabel * textLabel; - QLabel * processLabel; + QProgressBar *progressBar; QLabel * currentFileLabel; QLineEdit * path; QLineEdit * nameEdit; @@ -41,6 +42,7 @@ private: QLabel * message; QLabel * currentFileLabel; + QProgressBar *progressBar; QPushButton * cancel; public slots: void showCurrentFile(QString file); diff --git a/YACReaderLibrary/db/data_base_management.cpp b/YACReaderLibrary/db/data_base_management.cpp index 6debd0ec..f390cab5 100644 --- a/YACReaderLibrary/db/data_base_management.cpp +++ b/YACReaderLibrary/db/data_base_management.cpp @@ -2,13 +2,48 @@ #include +static QString fields = "title ," + + "coverPage," + "numPages," + + "number," + "isBis," + "count," + + "volume," + "storyArc," + "arcNumber," + "arcCount," + + "genere," + + "writer," + "penciller," + "inker," + "colorist," + "letterer," + "coverArtist," + + "date," + "publisher," + "format," + "color," + "ageRating," + + "synopsis," + "characters," + "notes," + + "hash"; + DataBaseManagement::DataBaseManagement() :QObject(),dataBasesList() { } -TreeModel * DataBaseManagement::newTreeModel(QString path) +/*TreeModel * DataBaseManagement::newTreeModel(QString path) { //la consulta se ejecuta... QSqlQuery selectQuery(loadDatabase(path)); @@ -16,7 +51,7 @@ TreeModel * DataBaseManagement::newTreeModel(QString path) selectQuery.exec("select * from folder order by parentId,name"); //selectQuery.finish(); return new TreeModel(selectQuery); -} +}*/ QSqlDatabase DataBaseManagement::createDatabase(QString name, QString path) { @@ -32,12 +67,15 @@ QSqlDatabase DataBaseManagement::createDatabase(QString dest) else { qDebug() << db.tables(); } + + { QSqlQuery pragma("PRAGMA foreign_keys = ON",db); //pragma.finish(); DataBaseManagement::createTables(db); QSqlQuery query("INSERT INTO folder (parentId, name, path) " "VALUES (1,'root', '/')",db); + } //query.finish(); //db.close(); @@ -60,11 +98,30 @@ QSqlDatabase DataBaseManagement::loadDatabase(QString path) return db; } +QSqlDatabase DataBaseManagement::loadDatabaseFromFile(QString filePath) +{ + //TODO check path + QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE",filePath); + db.setDatabaseName(filePath); + if (!db.open()) { + //se devuelve una base de datos vacía e inválida + + return QSqlDatabase(); + } + { + QSqlQuery pragma("PRAGMA foreign_keys = ON",db); + } + //pragma.finish(); + //devuelve la base de datos + return db; +} + bool DataBaseManagement::createTables(QSqlDatabase & database) { bool success = true; //FOLDER (representa una carpeta en disco) + { QSqlQuery queryFolder(database); queryFolder.prepare("CREATE TABLE folder (id INTEGER PRIMARY KEY, parentId INTEGER NOT NULL, name TEXT NOT NULL, path TEXT NOT NULL, FOREIGN KEY(parentId) REFERENCES folder(id) ON DELETE CASCADE)"); success = success && queryFolder.exec(); @@ -106,9 +163,9 @@ bool DataBaseManagement::createTables(QSqlDatabase & database) "characters TEXT," "notes TEXT," - "hash TEXT NOT NULL," + "hash TEXT UNIQUE NOT NULL," "edited BOOLEAN DEFAULT 0," - "read BOOLEAN)"); + "read BOOLEAN DEFAULT 0)"); success = success && queryComicInfo.exec(); //queryComicInfo.finish(); @@ -126,32 +183,30 @@ bool DataBaseManagement::createTables(QSqlDatabase & database) QSqlQuery query("INSERT INTO db_info (version) " "VALUES ('5.0.0')",database); //query.finish(); - + } return success; } - +#include void DataBaseManagement::exportComicsInfo(QString source, QString dest) { - QSqlDatabase sourceDB = loadDatabase(source); - QSqlDatabase destDB = QSqlDatabase::addDatabase("QSQLITE"); - destDB.setDatabaseName(dest); - destDB.open(); - sourceDB.open(); - - QSqlQuery attach(sourceDB); + //QSqlDatabase sourceDB = loadDatabase(source); + QSqlDatabase destDB = loadDatabaseFromFile(dest); + //sourceDB.open(); + { + QSqlQuery attach(destDB); attach.prepare("ATTACH DATABASE '"+QDir().toNativeSeparators(dest) +"' AS dest;"); //attach.bindValue(":dest",QDir().toNativeSeparators(dest)); attach.exec(); //attach.finish(); - QSqlQuery attach2(sourceDB); + QSqlQuery attach2(destDB); attach2.prepare("ATTACH DATABASE '"+QDir().toNativeSeparators(source) +"' AS source;"); attach2.exec(); //attach2.finish(); //sourceDB.close(); - QSqlQuery queryDBInfo(sourceDB); + QSqlQuery queryDBInfo(destDB); queryDBInfo.prepare("CREATE TABLE dest.db_info (version TEXT NOT NULL)"); queryDBInfo.exec(); //queryDBInfo.finish(); @@ -161,22 +216,22 @@ void DataBaseManagement::exportComicsInfo(QString source, QString dest) queryComicsInfo.exec();*/ QSqlQuery query("INSERT INTO dest.db_info (version) " - "VALUES ('5.0.0')",sourceDB); + "VALUES ('5.0.0')",destDB); //query.finish(); - QSqlQuery exportData(sourceDB); - exportData.prepare("create table dest.comic_info as select * from source.comic_info where source.comic_info.edited = 1"); + QSqlQuery exportData(destDB); + exportData.prepare("create table dest.comic_info as select " + fields + + " from source.comic_info where source.comic_info.edited = 1"); exportData.exec(); //exportData.finish(); + } - QString error = exportData.lastError().databaseText(); - QString error2 = exportData.lastError().text(); - - sourceDB.close(); + //sourceDB.close(); destDB.close(); + QSqlDatabase::removeDatabase(dest); } -#include + bool DataBaseManagement::importComicsInfo(QString source, QString dest) { QString error; @@ -184,44 +239,254 @@ bool DataBaseManagement::importComicsInfo(QString source, QString dest) bool b = false; - QSqlDatabase destDB = QSqlDatabase::addDatabase("QSQLITE",dest); - destDB.setDatabaseName(dest); - if(destDB.open()) - { - QSqlQuery pragma("PRAGMA foreign_keys = ON",destDB); + QSqlDatabase sourceDB = loadDatabaseFromFile(source); + QSqlDatabase destDB = loadDatabaseFromFile(dest); - QSqlQuery attach(destDB); - attach.prepare("ATTACH DATABASE '"+QDir().toNativeSeparators(dest) +"' AS dest;"); - attach.exec(); + QSqlQuery pragma("PRAGMA synchronous=OFF",destDB); - error = attach.lastError().databaseText(); - driver = attach.lastError().driverText(); - - QMessageBox::critical(NULL,tr("db error"),error); - QMessageBox::critical(NULL,tr("db error"),driver); - - QSqlQuery attach2(destDB); - attach2.prepare("ATTACH DATABASE '"+QDir().toNativeSeparators(source) +"' AS source;"); - attach2.exec(); - error = attach2.lastError().databaseText(); - driver = attach2.lastError().driverText(); + //QSqlQuery attach(destDB); + //attach.prepare("ATTACH DATABASE '"+QDir().toNativeSeparators(dest) +"' AS dest;"); + //attach.exec(); + + //error = attach.lastError().databaseText(); + //driver = attach.lastError().driverText(); - QMessageBox::critical(NULL,tr("db error"),error); - QMessageBox::critical(NULL,tr("db error"),driver); + //QMessageBox::critical(NULL,tr("db error"),error); + //QMessageBox::critical(NULL,tr("db error"),driver); + + //QSqlQuery attach2(destDB); + //attach2.prepare("ATTACH DATABASE '"+QDir().toNativeSeparators(source) +"' AS source;"); + //attach2.exec(); + // + //error = attach2.lastError().databaseText(); + //driver = attach2.lastError().driverText(); + + //QMessageBox::critical(NULL,tr("db error"),error); + //QMessageBox::critical(NULL,tr("db error"),driver); //TODO check versions... + //QSqlQuery update(destDB); + //update.prepare("UPDATE dest.comic_info" + // "SET" + //"title = coalesce(title , (select source.comic_info.title from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"coverPage = coalesce(coverPage , (select source.comic_info.coverPage from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"numPages = coalesce(numPages , (select source.comic_info.numPages from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"number = coalesce(number , (select source.comic_info.number from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"isBis = coalesce(isBis , (select source.comic_info.isBis from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"count = coalesce(count , (select source.comic_info.count from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"volume = coalesce(volume , (select source.comic_info.volume from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"storyArc = coalesce(storyArc , (select source.comic_info.storyArc from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"arcNumber = coalesce(arcNumber , (select source.comic_info.arcNumber from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"arcCount = coalesce(arcCount , (select source.comic_info.arcCount from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"genere = coalesce(genere , (select source.comic_info.genere from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"writer = coalesce(writer , (select source.comic_info.writer from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"penciller = coalesce(penciller , (select source.comic_info.penciller from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"inker = coalesce(inker , (select source.comic_info.inker from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"colorist = coalesce(colorist , (select source.comic_info.colorist from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"letterer = coalesce(letterer , (select source.comic_info.letterer from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"coverArtist = coalesce(coverArtist , (select source.comic_info.coverArtist from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"date = coalesce(date , (select source.comic_info.date from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"publisher = coalesce(publisher , (select source.comic_info.publisher from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"format = coalesce(format , (select source.comic_info.format from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"color = coalesce(color , (select source.comic_info.color from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"ageRating = coalesce(ageRating , (select source.comic_info.ageRating from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"synopsis = coalesce(synopsis , (select source.comic_info.synopsis from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"characters = coalesce(characters , (select source.comic_info.characters from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"notes = coalesce(notes , (select source.comic_info.notes from source.comic_info where dest.comic_info.hash = source.comic_info.hash))," + //"edited = 1" + // ); + //b = b || update.exec(); - QSqlQuery import(destDB); - import.prepare("insert or replace into dest.comic_info select * from source.comic_info;"); - bool b = import.exec(); - error = import.lastError().databaseText(); - driver = import.lastError().driverText(); + //error = update.lastError().databaseText(); + //driver = update.lastError().driverText(); - QMessageBox::critical(NULL,tr("db error"),error); - QMessageBox::critical(NULL,tr("db error"),driver); + //QMessageBox::critical(NULL,tr("db error"),error); + //QMessageBox::critical(NULL,tr("db error"),driver); - destDB.close(); + //QSqlQuery import(destDB); + //import.prepare("insert or ignore into dest.comic_info (" +fields + ",edited,read) select " + fields + ",1 as edited, 0 as read from source.comic_info;"); + ////import.prepare("insert into dest.comic_info (" +fields + ",edited,read) select " + fields + ",1 as edited, 0 as read from source.comic_info where sourc.comic_info.hash not in (select dest.comic_info.hash from dest.comic_info);"); + //b = b || import.exec(); + //error = import.lastError().databaseText(); + //driver = import.lastError().driverText(); + + //QMessageBox::critical(NULL,tr("db error"),error); + //QMessageBox::critical(NULL,tr("db error"),driver); + + QSqlQuery update(destDB); + update.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," + + "edited = :edited" + + " WHERE hash = :hash "); + + QSqlQuery insert(destDB); + insert.prepare("INSERT INTO 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," + + "hash = :hash "); + QSqlQuery newInfo(sourceDB); + newInfo.prepare("SELECT * FROM comic_info"); + newInfo.exec(); + destDB.transaction(); + while (newInfo.next()) //cada tupla deberá ser insertada o actualizada + { + for(int i = 0; i<10000; i++) + { + QSqlRecord record = newInfo.record(); + + update.bindValue(":title",record.value("title").toString()); + + update.bindValue(":coverPage",record.value("coverPage").toInt()); + update.bindValue(":numPages",record.value("numPages").toInt()); + + update.bindValue(":number",record.value("number").toInt()); + update.bindValue(":isBis",record.value("isBis").toInt()); + update.bindValue(":count",record.value("count").toInt()); + + update.bindValue(":volume",record.value("volume").toString()); + update.bindValue(":storyArc",record.value("storyArc").toString()); + update.bindValue(":arcNumber",record.value("arcNumber").toString()); + update.bindValue(":arcCount",record.value("arcCount").toString()); + + update.bindValue(":genere",record.value("genere").toString()); + + update.bindValue(":writer",record.value("writer").toString()); + update.bindValue(":penciller",record.value("penciller").toString()); + update.bindValue(":inker",record.value("inker").toString()); + update.bindValue(":colorist",record.value("colorist").toString()); + update.bindValue(":letterer",record.value("letterer").toString()); + update.bindValue(":coverArtist",record.value("coverArtist").toString()); + + update.bindValue(":date",record.value("date").toString()); + update.bindValue(":publisher",record.value("publisher").toString()); + update.bindValue(":format",record.value("format").toString()); + update.bindValue(":color",record.value("color").toInt()); + update.bindValue(":ageRating",record.value("ageRating").toString()); + + update.bindValue(":synopsis",record.value("synopsis").toString()); + update.bindValue(":characters",record.value("characters").toString()); + update.bindValue(":notes",record.value("notes").toString()); + + update.bindValue(":edited",1); + + update.bindValue(":hash",record.value("hash").toString()); + update.exec(); + + if(update.numRowsAffected() == 0) + { + insert.bindValue(":title",record.value("title").toString()); + + insert.bindValue(":coverPage",record.value("coverPage").toInt()); + insert.bindValue(":numPages",record.value("numPages").toInt()); + + insert.bindValue(":number",record.value("number").toInt()); + insert.bindValue(":isBis",record.value("isBis").toInt()); + insert.bindValue(":count",record.value("count").toInt()); + + insert.bindValue(":volume",record.value("volume").toString()); + insert.bindValue(":storyArc",record.value("storyArc").toString()); + insert.bindValue(":arcNumber",record.value("arcNumber").toString()); + insert.bindValue(":arcCount",record.value("arcCount").toString()); + + insert.bindValue(":genere",record.value("genere").toString()); + + insert.bindValue(":writer",record.value("writer").toString()); + insert.bindValue(":penciller",record.value("penciller").toString()); + insert.bindValue(":inker",record.value("inker").toString()); + insert.bindValue(":colorist",record.value("colorist").toString()); + insert.bindValue(":letterer",record.value("letterer").toString()); + insert.bindValue(":coverArtist",record.value("coverArtist").toString()); + + insert.bindValue(":date",record.value("date").toString()); + insert.bindValue(":publisher",record.value("publisher").toString()); + insert.bindValue(":format",record.value("format").toString()); + insert.bindValue(":color",record.value("color").toInt()); + insert.bindValue(":ageRating",record.value("ageRating").toString()); + + insert.bindValue(":synopsis",record.value("synopsis").toString()); + insert.bindValue(":characters",record.value("characters").toString()); + insert.bindValue(":notes",record.value("notes").toString()); + + insert.bindValue(":edited",1); + insert.bindValue(":read",0); + + insert.bindValue(":hash",record.value("hash").toString()); + insert.exec(); + } + update.finish(); + insert.finish(); + } } + + destDB.commit(); + return b; } diff --git a/YACReaderLibrary/db/data_base_management.h b/YACReaderLibrary/db/data_base_management.h index 01faab33..a11ebb20 100644 --- a/YACReaderLibrary/db/data_base_management.h +++ b/YACReaderLibrary/db/data_base_management.h @@ -34,12 +34,13 @@ private: QList dataBasesList; public: DataBaseManagement(); - TreeModel * newTreeModel(QString path); + //TreeModel * newTreeModel(QString path); //crea una base de datos y todas sus tablas static QSqlDatabase createDatabase(QString name, QString path); static QSqlDatabase createDatabase(QString dest); //carga una base de datos desde la ruta path static QSqlDatabase loadDatabase(QString path); + static QSqlDatabase loadDatabaseFromFile(QString path); static bool createTables(QSqlDatabase & database); static void exportComicsInfo(QString source, QString dest); diff --git a/YACReaderLibrary/db/treemodel.cpp b/YACReaderLibrary/db/treemodel.cpp index 834efe27..97b3de38 100644 --- a/YACReaderLibrary/db/treemodel.cpp +++ b/YACReaderLibrary/db/treemodel.cpp @@ -217,11 +217,14 @@ void TreeModel::setupModelData(QString path) _database.close(); _database = DataBaseManagement::loadDatabase(path); //crear la consulta + { QSqlQuery selectQuery("select * from folder where id <> 1 order by parentId,name",_database); setupModelData(selectQuery,rootItem); + } //selectQuery.finish(); _database.close(); + QSqlDatabase::removeDatabase(path); endResetModel(); } diff --git a/YACReaderLibrary/export_library_dialog.cpp b/YACReaderLibrary/export_library_dialog.cpp index 7b127d04..66e0b212 100644 --- a/YACReaderLibrary/export_library_dialog.cpp +++ b/YACReaderLibrary/export_library_dialog.cpp @@ -34,10 +34,16 @@ ExportLibraryDialog::ExportLibraryDialog(QWidget * parent) bottomLayout->addWidget(accept); bottomLayout->addWidget(cancel); + progressBar = new QProgressBar(this); + progressBar->setMinimum(0); + progressBar->setMaximum(0); + progressBar->setTextVisible(false); + progressBar->hide(); + QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addLayout(libraryLayout); - mainLayout->addWidget(progress=new QLabel()); mainLayout->addStretch(); + mainLayout->addWidget(progressBar); mainLayout->addLayout(bottomLayout); QHBoxLayout * imgMainLayout = new QHBoxLayout; @@ -57,6 +63,7 @@ ExportLibraryDialog::ExportLibraryDialog(QWidget * parent) void ExportLibraryDialog::exportLibrary() { + progressBar->show(); accept->setEnabled(false); emit exportPath(QDir::cleanPath(path->text())); t.start(); @@ -75,10 +82,10 @@ void ExportLibraryDialog::findPath() void ExportLibraryDialog::close() { path->clear(); + progressBar->hide(); accept->setEnabled(false); t.stop(); progressCount=0; - progress->setText(""); QDialog::close(); } @@ -87,14 +94,3 @@ void ExportLibraryDialog::run() } -void ExportLibraryDialog::updateProgress() -{ - if(progressCount == 0) - progress->setText(tr("Creating package .")); - else - progress->setText(progress->text()+" ."); - progressCount++; - if(progressCount == 15) - progressCount = 0; - -} diff --git a/YACReaderLibrary/export_library_dialog.h b/YACReaderLibrary/export_library_dialog.h index 538abed3..cfc73b1b 100644 --- a/YACReaderLibrary/export_library_dialog.h +++ b/YACReaderLibrary/export_library_dialog.h @@ -8,6 +8,7 @@ #include #include #include +#include class ExportLibraryDialog : public QDialog { @@ -18,10 +19,9 @@ public slots: void exportLibrary(); void findPath(); void close(); - void updateProgress(); private: int progressCount; - QLabel * progress; + QProgressBar *progressBar; QLabel * textLabel; QLineEdit * path; QPushButton * find; diff --git a/YACReaderLibrary/import_library_dialog.cpp b/YACReaderLibrary/import_library_dialog.cpp index cfc5563d..08343329 100644 --- a/YACReaderLibrary/import_library_dialog.cpp +++ b/YACReaderLibrary/import_library_dialog.cpp @@ -66,12 +66,19 @@ void ImportLibraryDialog::setupUI() bottomLayout->addWidget(accept); bottomLayout->addWidget(cancel); + progressBar = new QProgressBar(this); + progressBar->setMinimum(0); + progressBar->setMaximum(0); + progressBar->setTextVisible(false); + progressBar->hide(); + QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addLayout(nameLayout); mainLayout->addLayout(libraryLayout); mainLayout->addLayout(destLayout); - mainLayout->addWidget(progress = new QLabel()); + //mainLayout->addWidget(progress = new QLabel()); mainLayout->addStretch(); + mainLayout->addWidget(progressBar); mainLayout->addLayout(bottomLayout); QHBoxLayout * imgMainLayout = new QHBoxLayout; @@ -85,16 +92,12 @@ void ImportLibraryDialog::setupUI() setModal(true); setWindowTitle(tr("Extract a catalog")); - - t.setInterval(500); - t.stop(); - connect(&t,SIGNAL(timeout()),this,SLOT(updateProgress())); } void ImportLibraryDialog::add() { accept->setEnabled(false); - t.start(); + progressBar->show(); emit(unpackCLC(QDir::cleanPath(path->text()),QDir::cleanPath(destPath->text()),nameEdit->text())); } @@ -138,26 +141,10 @@ void ImportLibraryDialog::close() destPath->clear(); nameEdit->clear(); accept->setEnabled(false); - if(t.isActive()) - { - t.stop(); - emit rejected(); - } - progress->setText(""); + progressBar->hide(); QDialog::hide(); } -void ImportLibraryDialog::updateProgress() -{ - if(progressCount == 0) - progress->setText(tr("Importing package .")); - else - progress->setText(progress->text()+" ."); - progressCount++; - if(progressCount == 15) - progressCount = 0; -} - void ImportLibraryDialog::closeEvent ( QCloseEvent * e ) { close(); diff --git a/YACReaderLibrary/import_library_dialog.h b/YACReaderLibrary/import_library_dialog.h index 1d44a513..7c4f9305 100644 --- a/YACReaderLibrary/import_library_dialog.h +++ b/YACReaderLibrary/import_library_dialog.h @@ -7,7 +7,7 @@ #include #include #include -#include +#include class ImportLibraryDialog : public QDialog { @@ -25,9 +25,8 @@ QPushButton * findDest; QPushButton * accept; QPushButton * cancel; - QLabel * progress; + QProgressBar *progressBar; void setupUI(); - QTimer t; int progressCount; void closeEvent ( QCloseEvent * e ); public slots: @@ -35,7 +34,6 @@ void findPath(); void findDestination(); void close(); - void updateProgress(); void nameEntered(); signals: diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index e2391d38..7afd5f83 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -881,8 +881,10 @@ void LibraryWindow::deleteLibrary() void LibraryWindow::deleteCurrentLibrary() { - - dm->getDatabase().close(); + QSqlDatabase db = dm->getDatabase(); + db.commit(); + db.close(); + QSqlDatabase::removeDatabase(db.connectionName()); if(!dm->getDatabase().isOpen()) { QString path = libraries.value(selectedLibrary->currentText()); diff --git a/YACReaderLibrary/properties_dialog.h b/YACReaderLibrary/properties_dialog.h index 666f858d..966e6f14 100644 --- a/YACReaderLibrary/properties_dialog.h +++ b/YACReaderLibrary/properties_dialog.h @@ -95,13 +95,13 @@ public slots: void setComics(QList comics); void updateComics(); - + void save(); //Deprecated void setCover(const QPixmap & cover); void setFilename(const QString & name); void setNumpages(int pages); void setSize(float size); - void save(); + }; #endif