From dbfaaa2d96c3706db90439093c6453569a44aa68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Sun, 8 Jul 2012 23:05:14 +0200 Subject: [PATCH] a?adidos validadores al di?logo properties arreglado bug que provocaba que al actualizar una libreria se perdiese su ruta (creadas 2 se?ales que permiten distinguir la creaci?n de la actualizaci?n) finalizada la importaci?n de informaci?n coverPage tiene ahora un valor por defecto -> 1. VERSION "5.0.0" es ahora compartido por YACReader y YACReaderLibrary. --- YACReaderLibrary/YACReaderLibrary.pro | 6 +- YACReaderLibrary/add_library_dialog.cpp | 2 +- YACReaderLibrary/create_library_dialog.cpp | 1 + YACReaderLibrary/db/comic.cpp | 3 + YACReaderLibrary/db/data_base_management.cpp | 315 ++++++++++++------ YACReaderLibrary/db/data_base_management.h | 8 + .../import_comics_info_dialog.cpp | 1 + YACReaderLibrary/library_creator.cpp | 54 ++- YACReaderLibrary/library_creator.h | 6 +- YACReaderLibrary/library_window.cpp | 64 +++- YACReaderLibrary/library_window.h | 1 + YACReaderLibrary/properties_dialog.cpp | 38 ++- YACReaderLibrary/properties_dialog.h | 9 + common/check_new_version.cpp | 1 - common/check_new_version.h | 2 + 15 files changed, 376 insertions(+), 135 deletions(-) diff --git a/YACReaderLibrary/YACReaderLibrary.pro b/YACReaderLibrary/YACReaderLibrary.pro index 98d4b185..1963d1ef 100644 --- a/YACReaderLibrary/YACReaderLibrary.pro +++ b/YACReaderLibrary/YACReaderLibrary.pro @@ -38,7 +38,8 @@ HEADERS += comic_flow.h \ ./db/folder.h \ ./db/library_item.h \ export_comics_info_dialog.h \ - import_comics_info_dialog.h + import_comics_info_dialog.h \ + ../common/check_new_version.h SOURCES += comic_flow.cpp \ create_library_dialog.cpp \ @@ -65,7 +66,8 @@ SOURCES += comic_flow.cpp \ ./db/folder.cpp \ ./db/library_item.cpp \ export_comics_info_dialog.cpp \ - import_comics_info_dialog.cpp + import_comics_info_dialog.cpp \ + ../common/check_new_version.cpp include(./server/server.pri) diff --git a/YACReaderLibrary/add_library_dialog.cpp b/YACReaderLibrary/add_library_dialog.cpp index bb756500..e94b4691 100644 --- a/YACReaderLibrary/add_library_dialog.cpp +++ b/YACReaderLibrary/add_library_dialog.cpp @@ -56,7 +56,7 @@ void AddLibraryDialog::setupUI() QLabel * imgLabel = new QLabel(this); QPixmap p(":/images/openLibrary.png"); imgLabel->setPixmap(p); - imgMainLayout->addWidget(imgLabel); + imgMainLayout->addWidget(imgLabel);//,0,Qt::AlignTop); imgMainLayout->addLayout(mainLayout); setLayout(imgMainLayout); diff --git a/YACReaderLibrary/create_library_dialog.cpp b/YACReaderLibrary/create_library_dialog.cpp index 905385bf..25fae77d 100644 --- a/YACReaderLibrary/create_library_dialog.cpp +++ b/YACReaderLibrary/create_library_dialog.cpp @@ -166,6 +166,7 @@ UpdateLibraryDialog::UpdateLibraryDialog(QWidget * parent) setLayout(imgMainLayout); setModal(true); + setWindowTitle(tr("Update library")); } void UpdateLibraryDialog::showCurrentFile(QString file) diff --git a/YACReaderLibrary/db/comic.cpp b/YACReaderLibrary/db/comic.cpp index 9f50e0e6..5ac14521 100644 --- a/YACReaderLibrary/db/comic.cpp +++ b/YACReaderLibrary/db/comic.cpp @@ -21,6 +21,7 @@ Comic::Comic(qulonglong cparentId, QString cname, QString cpath, QString chash, if(!info.load(chash,database)) { info.hash = chash; + info.coverPage = new int(1); _hasCover = false; } else @@ -91,7 +92,9 @@ bool Comic::load(qulonglong idc, QSqlDatabase & db) //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(); diff --git a/YACReaderLibrary/db/data_base_management.cpp b/YACReaderLibrary/db/data_base_management.cpp index 5d321141..b8e31492 100644 --- a/YACReaderLibrary/db/data_base_management.cpp +++ b/YACReaderLibrary/db/data_base_management.cpp @@ -1,6 +1,8 @@ #include "data_base_management.h" #include +#include "library_creator.h" +#include "check_new_version.h" static QString fields = "title ," @@ -181,7 +183,7 @@ bool DataBaseManagement::createTables(QSqlDatabase & database) //queryDBInfo.finish(); QSqlQuery query("INSERT INTO db_info (version) " - "VALUES ('5.0.0')",database); + "VALUES ('"VERSION"')",database); //query.finish(); } @@ -236,6 +238,7 @@ bool DataBaseManagement::importComicsInfo(QString source, QString dest) { QString error; QString driver; + QStringList hashes; bool b = false; @@ -285,149 +288,253 @@ bool DataBaseManagement::importComicsInfo(QString source, QString dest) " WHERE hash = :hash "); QSqlQuery insert(destDB); - insert.prepare("INSERT INTO comic_info SET " - "title = :title," + insert.prepare("INSERT INTO comic_info " + "(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," + "read," + "edited," + "hash)" + + "VALUES (:title," + ":coverPage," + ":numPages," + ":number," + ":isBis," + ":count," + + ":volume," + ":storyArc," + ":arcNumber," + ":arcCount," + + ":genere," - "coverPage = :coverPage," - "numPages = :numPages," + ":writer," + ":penciller," + ":inker," + ":colorist," + ":letterer," + ":coverArtist," - "number = :number," - "isBis = :isBis," - "count = :count," + ":date," + ":publisher," + ":format," + ":color," + ":ageRating," - "volume = :volume," - "storyArc = :storyArc," - "arcNumber = :arcNumber," - "arcCount = :arcCount," - - "genere = :genere," + ":synopsis," + ":characters," + ":notes," - "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," + ":edited," - "read = :read," - "edited = :edited," - - "hash = :hash "); + ":hash )"); QSqlQuery newInfo(sourceDB); newInfo.prepare("SELECT * FROM comic_info"); newInfo.exec(); destDB.transaction(); + int cp; 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()); + cp = record.value("coverPage").toInt(); + if(cp>1) + { + QSqlQuery checkCoverPage(destDB); + checkCoverPage.prepare("SELECT coverPage FROM comic_info where hash = :hash"); + checkCoverPage.bindValue(":hash",record.value("hash").toString()); + checkCoverPage.exec(); + bool extract = false; + if(checkCoverPage.next()) + { + extract = checkCoverPage.record().value("coverPage").toInt() != cp; + } + if(extract) + hashes.append(record.value("hash").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()); + bindValuesFromRecord(record,update); 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()); + bindValuesFromRecord(record,insert); insert.bindValue(":edited",1); insert.bindValue(":read",0); - insert.bindValue(":hash",record.value("hash").toString()); insert.exec(); + + QString error1 = insert.lastError().databaseText(); + QString error2 = insert.lastError().driverText(); + + QMessageBox::critical(NULL,"db",error1); + QMessageBox::critical(NULL,"driver",error2); } update.finish(); insert.finish(); } } - } destDB.commit(); + QString hash; + foreach(hash, hashes) + { + QSqlQuery getComic(destDB); + getComic.prepare("SELECT c.path,ci.coverPage FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) where ci.hash = :hash"); + getComic.bindValue(":hash",hash); + getComic.exec(); + if(getComic.next()) + { + QString basePath = QString(dest).remove("/.yacreaderlibrary/library.ydb"); + QString path = basePath + getComic.record().value("path").toString(); + int coverPage = getComic.record().value("coverPage").toInt(); + ThumbnailCreator tc(path,basePath+"/.yacreaderlibrary/covers/"+hash+".jpg",coverPage); + tc.create(); + + } + } + destDB.close(); sourceDB.close(); - QSqlDatabase::removeDatabase(source); QSqlDatabase::removeDatabase(dest); return b; } +void DataBaseManagement::bindValuesFromRecord(const QSqlRecord & record, QSqlQuery & query) +{ + bindString("title",record,query); + + bindInt("coverPage",record,query); + bindInt("numPages",record,query); + + bindInt("number",record,query); + bindInt("isBis",record,query); + bindInt("count",record,query); + + bindString("volume",record,query); + bindString("storyArc",record,query); + bindInt("arcNumber",record,query); + bindInt("arcCount",record,query); + + bindString("genere",record,query); + + bindString("writer",record,query); + bindString("penciller",record,query); + bindString("inker",record,query); + bindString("colorist",record,query); + bindString("letterer",record,query); + bindString("coverArtist",record,query); + + bindString("date",record,query); + bindString("publisher",record,query); + bindString("format",record,query); + bindInt("color",record,query); + bindString("ageRating",record,query); + + bindString("synopsis",record,query); + bindString("characters",record,query); + bindString("notes",record,query); + + bindString("hash",record,query); +} + +void DataBaseManagement::bindString(const QString & name, const QSqlRecord & record, QSqlQuery & query) +{ + if(!record.value(name).isNull()) + { + query.bindValue(":"+name,record.value(name).toString()); + } +} +void DataBaseManagement::bindInt(const QString & name, const QSqlRecord & record, QSqlQuery & query) +{ + if(!record.value(name).isNull()) + { + query.bindValue(":"+name,record.value(name).toInt()); + } +} + +QString DataBaseManagement::checkValidDB(const QString & fullPath) +{ + QSqlDatabase db = loadDatabaseFromFile(fullPath); + if(db.isValid() && db.isOpen()) + { + QSqlQuery version(db); + version.prepare("SELECT * FROM db_info"); + version.exec(); + if(version.next()) + { + return version.record().value("version").toString(); + } + else + return ""; + + } + else + return ""; +} + +int DataBaseManagement::compareVersions(const QString & v1, const QString v2) +{ + QStringList v1l = v1.split('.'); + QStringList v2l = v2.split('.'); + QList v1il; + QList v2il; + + foreach(QString s, v1l) + v1il.append(s.toInt()); + + foreach(QString s,v2l) + v2il.append(s.toInt()); + + for(int i=0;iv2il[i]) + return 1; + } + + if(v1il.length() < v2il.length()) + return -1; + if(v1il.length() == v2il.length()) + return 0; + if(v1il.length() > v2il.length()) + return 1; + + return 0; +} + //COMICS_INFO_EXPORTER ComicsInfoExporter::ComicsInfoExporter() :QThread() diff --git a/YACReaderLibrary/db/data_base_management.h b/YACReaderLibrary/db/data_base_management.h index a11ebb20..470bc24c 100644 --- a/YACReaderLibrary/db/data_base_management.h +++ b/YACReaderLibrary/db/data_base_management.h @@ -25,6 +25,7 @@ public: void importComicsInfo(QSqlDatabase & source, QSqlDatabase & dest); private: void run(); + }; class DataBaseManagement : public QObject @@ -32,6 +33,10 @@ class DataBaseManagement : public QObject Q_OBJECT private: QList dataBasesList; + static void bindString(const QString & name, const QSqlRecord & record, QSqlQuery & query); + static void bindInt(const QString & name, const QSqlRecord & record, QSqlQuery & query); + static void bindValuesFromRecord(const QSqlRecord & record, QSqlQuery & query); + public: DataBaseManagement(); //TreeModel * newTreeModel(QString path); @@ -45,6 +50,9 @@ public: static void exportComicsInfo(QString source, QString dest); static bool importComicsInfo(QString source, QString dest); + + static QString checkValidDB(const QString & fullPath); //retorna "" si la DB es inválida ó la versión si es válida. + static int compareVersions(const QString & v1, const QString v2); //retorna <0 si v1 < v2, 0 si v1 = v2 y >0 si v1 > v2 }; #endif \ No newline at end of file diff --git a/YACReaderLibrary/import_comics_info_dialog.cpp b/YACReaderLibrary/import_comics_info_dialog.cpp index b94704cb..ae240c70 100644 --- a/YACReaderLibrary/import_comics_info_dialog.cpp +++ b/YACReaderLibrary/import_comics_info_dialog.cpp @@ -100,6 +100,7 @@ void ImportComicsInfoDialog::close() progressBar->hide(); accept->setDisabled(true); QDialog::close(); + emit(finished(0)); } void Importer::run() diff --git a/YACReaderLibrary/library_creator.cpp b/YACReaderLibrary/library_creator.cpp index aeee1c2e..aaed401d 100644 --- a/YACReaderLibrary/library_creator.cpp +++ b/YACReaderLibrary/library_creator.cpp @@ -6,6 +6,11 @@ #include #include #include "data_base_management.h" +#include "qnaturalsorting.h" + +#include +using namespace std; + //QMutex mutex; @@ -68,6 +73,7 @@ void LibraryCreator::run() _database.commit(); _database.close(); QSqlDatabase::removeDatabase(_database.connectionName()); + emit(created()); } else { @@ -83,7 +89,9 @@ void LibraryCreator::run() _database.commit(); _database.close(); QSqlDatabase::removeDatabase(_target); + emit(updated()); } + msleep(100);//TODO try to solve the problem with the udpate dialog emit(finished()); } @@ -174,6 +182,11 @@ void LibraryCreator::create(QDir dir) } } +bool LibraryCreator::checkCover(const QString & hash) +{ + return QFile::exists(_target+"/covers/"+hash+".jpg"); +} + void LibraryCreator::insertComic(const QString & relativePath,const QFileInfo & fileInfo) { //en este punto sabemos que todos los folders que hay en _currentPath, deberían estar añadidos a la base de datos @@ -191,10 +204,10 @@ void LibraryCreator::insertComic(const QString & relativePath,const QFileInfo & QString hash = QString(crypto.result().toHex().constData()) + QString::number(fileInfo.size()); Comic comic(_currentPathFolders.last().id,fileInfo.fileName(),relativePath,hash,_database); int numPages; - - if(!comic.hasCover()) + + if(! ( comic.hasCover() && checkCover(hash))) { - ThumbnailCreator tc(QDir::cleanPath(fileInfo.absoluteFilePath()),_target+"/covers/"+hash+".jpg"); + ThumbnailCreator tc(QDir::cleanPath(fileInfo.absoluteFilePath()),_target+"/covers/"+hash+".jpg",*comic.info.coverPage); //ThumbnailCreator tc(QDir::cleanPath(fileInfo.absoluteFilePath()),_target+"/covers/"+fileInfo.fileName()+".jpg"); tc.create(); numPages = tc.getNumPages(); @@ -352,8 +365,8 @@ void LibraryCreator::update(QDir dirS) } } } -ThumbnailCreator::ThumbnailCreator(QString fileSource, QString target="") -:_fileSource(fileSource),_target(target),_numPages(0) +ThumbnailCreator::ThumbnailCreator(QString fileSource, QString target="", int coverPage) +:_fileSource(fileSource),_target(target),_numPages(0),_coverPage(coverPage) { } @@ -374,15 +387,32 @@ void ThumbnailCreator::create() QString line; _currentName = "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"; //TODO QString name; - foreach(line,lines) + if(_coverPage == 1) { - if(rx.indexIn(line)!=-1) + foreach(line,lines) { - name = rx.cap(3).trimmed(); - if(0 > QString::localeAwareCompare(name,_currentName)) - _currentName = name; - _numPages++; - } + if(rx.indexIn(line)!=-1) + { + name = rx.cap(3).trimmed(); + if(naturalSortLessThanCI(name,_currentName)) + _currentName = name; + _numPages++; + } + } + } + else + { + QList names; + foreach(line,lines) + { + if(rx.indexIn(line)!=-1) + { + name = rx. cap(3).trimmed(); + names.append(name); + } + } + std::sort(names.begin(),names.end(),naturalSortLessThanCI); + _currentName = names[_coverPage-1]; } delete _7z; attributes.clear(); diff --git a/YACReaderLibrary/library_creator.h b/YACReaderLibrary/library_creator.h index 4f7699ca..dedd7043 100644 --- a/YACReaderLibrary/library_creator.h +++ b/YACReaderLibrary/library_creator.h @@ -41,6 +41,7 @@ void update(QDir currentDirectory); void run(); qulonglong insertFolders();//devuelve el id del último folder añadido (último en la ruta) + bool checkCover(const QString & hash); void insertComic(const QString & relativePath,const QFileInfo & fileInfo); //qulonglong insertFolder(qulonglong parentId,const Folder & folder); //qulonglong insertComic(const Comic & comic); @@ -49,6 +50,8 @@ void finished(); void coverExtracted(QString); void folderUpdated(QString); + void updated(); + void created(); }; class ThumbnailCreator : public QObject @@ -56,7 +59,7 @@ Q_OBJECT public: - ThumbnailCreator(QString fileSource, QString target); + ThumbnailCreator(QString fileSource, QString target, int coverPage = 1); private: QProcess * _7z; QString _fileSource; @@ -64,6 +67,7 @@ QString _currentName; int _numPages; QPixmap _cover; + int _coverPage; public slots: void create(); diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index 2cae223f..3be7c61b 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -18,6 +18,7 @@ #include #include "data_base_management.h" +#include "check_new_version.h" // @@ -504,11 +505,13 @@ void LibraryWindow::createConnections() { //libraryCreator connections connect(createLibraryDialog,SIGNAL(createLibrary(QString,QString,QString)),this,SLOT(create(QString,QString,QString))); + connect(importComicsInfoDialog,SIGNAL(finished(int)),this,SLOT(reloadCurrentLibrary())); connect(libraryCreator,SIGNAL(coverExtracted(QString)),createLibraryDialog,SLOT(showCurrentFile(QString))); connect(libraryCreator,SIGNAL(finished()),createLibraryDialog,SLOT(close())); connect(libraryCreator,SIGNAL(coverExtracted(QString)),updateLibraryDialog,SLOT(showCurrentFile(QString))); connect(libraryCreator,SIGNAL(finished()),updateLibraryDialog,SLOT(close())); - connect(libraryCreator,SIGNAL(finished()),this,SLOT(openLastCreated())); + connect(libraryCreator,SIGNAL(updated()),this,SLOT(reloadCurrentLibrary())); + connect(libraryCreator,SIGNAL(created()),this,SLOT(openLastCreated())); //packageManager connections connect(exportLibraryDialog,SIGNAL(exportPath(QString)),this,SLOT(exportLibrary(QString))); @@ -600,9 +603,13 @@ void LibraryWindow::loadLibrary(const QString & name) if(libraries.size()>0) { QString path=libraries.value(name)+"/.yacreaderlibrary"; - QDir d; //TODO change this by static methods (utils class?? with delTree for example) - if(d.exists(path)) + QDir d; //TODO change this by static methods (utils class?? with delTree for example) + QString dbVersion; + if(d.exists(path) && (dbVersion = DataBaseManagement::checkValidDB(path+"/library.ydb")) != "") { + int comparation; + if((comparation = DataBaseManagement::compareVersions(dbVersion,VERSION)) == 0) + { index = 0; sm->clear(); //foldersView->setModel(NULL); //TODO comprobar pq no sirve con usar simplemente las señales beforeReset y reset @@ -630,6 +637,36 @@ void LibraryWindow::loadLibrary(const QString & name) //includeComicsCheckBox->setCheckState(Qt::Unchecked); foldersFilter->clear(); + } + else + { + if(comparation < 0) + { + int ret = QMessageBox::question(this,tr("Update needed"),tr("This library was created with a previous version of YACReaderLibrary. It needs to be updated. Update now?")); + if(ret == QMessageBox::Yes) + { + } + else + { + comicView->setModel(NULL); + foldersView->setModel(NULL); + comicFlow->clear(); + disableAllActions();//TODO comprobar que se deben deshabilitar + } + } + else + { + int ret = QMessageBox::question(this,tr("Download new version"),tr("This library was created with a newer version of YACReaderLibrary. Download the new version now?"),QMessageBox::Yes,QMessageBox::No); + if(ret == QMessageBox::Yes) + QDesktopServices::openUrl(QUrl("http://code.google.com/p/yacreader/")); + + comicView->setModel(NULL); + foldersView->setModel(NULL); + comicFlow->clear(); + disableAllActions();//TODO comprobar que se deben deshabilitar + + } + } } else { @@ -831,6 +868,11 @@ void LibraryWindow::create(QString source, QString dest, QString name) } +void LibraryWindow::reloadCurrentLibrary() +{ + loadLibrary(selectedLibrary->currentText()); +} + void LibraryWindow::openLastCreated() { @@ -854,9 +896,16 @@ void LibraryWindow::showAddLibrary() void LibraryWindow::openLibrary(QString path, QString name) { - _lastAdded = name; - _sourceLastAdded = path; - openLastCreated(); + path.remove("/.yacreaderlibrary"); + QDir d; //TODO change this by static methods (utils class?? with delTree for example) + if(d.exists(path + "/.yacreaderlibrary")) + { + _lastAdded = name; + _sourceLastAdded = path; + openLastCreated(); + } + else + QMessageBox::warning(this,tr("Library not found"),tr("The selected folder doesn't contain any library.")); } void LibraryWindow::loadLibraries() @@ -903,13 +952,12 @@ void LibraryWindow::saveLibraries() void LibraryWindow::updateLibrary() { + updateLibraryDialog->show(); QString currentLibrary = selectedLibrary->currentText(); QString path = libraries.value(currentLibrary); _lastAdded = currentLibrary; - updateLibraryDialog->show(); libraryCreator->updateLibrary(path,path+"/.yacreaderlibrary"); libraryCreator->start(); - } void LibraryWindow::deleteLibrary() diff --git a/YACReaderLibrary/library_window.h b/YACReaderLibrary/library_window.h index 9b6b80d1..29fb491b 100644 --- a/YACReaderLibrary/library_window.h +++ b/YACReaderLibrary/library_window.h @@ -168,6 +168,7 @@ public: void openLibrary(QString path, QString name); void loadLibraries(); void saveLibraries(); + void reloadCurrentLibrary(); void openLastCreated(); void updateLibrary(); void deleteLibrary(); diff --git a/YACReaderLibrary/properties_dialog.cpp b/YACReaderLibrary/properties_dialog.cpp index 2b66f103..69ec4202 100644 --- a/YACReaderLibrary/properties_dialog.cpp +++ b/YACReaderLibrary/properties_dialog.cpp @@ -6,8 +6,10 @@ #include #include #include +#include #include "data_base_management.h" +#include "library_creator.h" PropertiesDialog::PropertiesDialog(QWidget * parent) :QDialog(parent) @@ -88,7 +90,7 @@ void PropertiesDialog::createCoverBox() QFrame * createLine() { - QFrame * line = new QFrame(); + QFrame * line = new QFrame(); line->setObjectName(QString::fromUtf8("line")); //line->setGeometry(QRect(320, 150, 118, 3)); line->setFrameShape(QFrame::HLine); @@ -103,20 +105,20 @@ void PropertiesDialog::createGeneralInfoBox() QFormLayout *generalInfoLayout = new QFormLayout; - - - - //generalInfoLayout->setRowWrapPolicy(QFormLayout::WrapAllRows); generalInfoLayout->addRow(tr("Title:"), title = new YACReaderFieldEdit()); QHBoxLayout * number = new QHBoxLayout; number->addWidget(numberEdit = new YACReaderFieldEdit()); + numberValidator.setBottom(0); + numberEdit->setValidator(&numberValidator); number->addWidget(new QLabel("Bis:")); number->addWidget(isBisCheck = new QCheckBox()); number->addWidget(new QLabel("of:")); number->addWidget(countEdit = new YACReaderFieldEdit()); + countValidator.setBottom(0); + countEdit->setValidator(&countValidator); number->addStretch(1); /*generalInfoLayout->addRow(tr("&Issue number:"), ); generalInfoLayout->addRow(tr("&Bis:"), );*/ @@ -128,8 +130,12 @@ void PropertiesDialog::createGeneralInfoBox() arc->addWidget(storyArcEdit = new YACReaderFieldEdit()); arc->addWidget(new QLabel("Arc number:")); arc->addWidget(arcNumberEdit = new YACReaderFieldEdit()); + arcNumberValidator.setBottom(0); + arcNumberEdit->setValidator(&arcNumberValidator); arc->addWidget(new QLabel("of:")); arc->addWidget(arcCountEdit = new YACReaderFieldEdit()); + arcCountValidator.setBottom(0); + arcCountEdit->setValidator(&arcCountValidator); arc->addStretch(1); generalInfoLayout->addRow(tr("Story arc:"), arc); @@ -200,10 +206,16 @@ void PropertiesDialog::createPublishingBox() QHBoxLayout * date = new QHBoxLayout; date->addWidget(new QLabel(tr("Day:"))); date->addWidget(dayEdit = new YACReaderFieldEdit()); + dayValidator.setRange(1,31); + dayEdit->setValidator(&dayValidator); date->addWidget(new QLabel(tr("Month:"))); date->addWidget(monthEdit = new YACReaderFieldEdit()); + monthValidator.setRange(1,12); + monthEdit->setValidator(&monthValidator); date->addWidget(new QLabel(tr("Year:"))); date->addWidget(yearEdit = new YACReaderFieldEdit()); + yearValidator.setRange(1,9999); + yearEdit->setValidator(&yearValidator); date->addStretch(1); publishingLayout->setRowWrapPolicy(QFormLayout::WrapAllRows); @@ -256,7 +268,11 @@ void PropertiesDialog::setComics(QList comics) title->setText(*comic.info.title); if(comic.info.coverPage != NULL) + { coverPageEdit->setText(QString::number(*comic.info.coverPage)); + coverPageValidator.setRange(1,*comic.info.numPages); + coverPageEdit->setValidator(&coverPageValidator); + } /*if(comic.info.numPages != NULL) numPagesEdit->setText(QString::number(*comic.info.numPages));*/ @@ -293,6 +309,8 @@ void PropertiesDialog::setComics(QList comics) if(comic.info.coverArtist != NULL) coverArtist->setPlainText(*comic.info.coverArtist); + size->setText(QString::number(comic.info.hash.right(comic.info.hash.length()-40).toInt()/1024.0/1024.0,'f',2)+"Mb"); + if(comic.info.date != NULL) { QStringList date = (*comic.info.date).split("/"); @@ -478,7 +496,7 @@ void PropertiesDialog::save() } if(comics.size()==1) - if(coverPageEdit->isModified() && !coverPageEdit->text().isEmpty()) + if(coverPageEdit->isModified() && !coverPageEdit->text().isEmpty() && coverPageEdit->text().toInt() != 0) { itr->info.setCoverPage(coverPageEdit->text().toInt()); edited = true; @@ -609,6 +627,14 @@ void PropertiesDialog::save() itr->info.edited = edited; } updateComics(); + if(comics.count() == 1) + { + if(coverPageEdit->isModified())// && coverPageEdit->text().toInt() != *comics[0].info.coverPage) + { + ThumbnailCreator tc(basePath+comics[0].path,basePath+"/.yacreaderlibrary/covers/"+comics[0].info.hash+".jpg",*comics[0].info.coverPage); + tc.create(); + } + } close(); emit(accepted()); } diff --git a/YACReaderLibrary/properties_dialog.h b/YACReaderLibrary/properties_dialog.h index 5d670e0e..addfeb9a 100644 --- a/YACReaderLibrary/properties_dialog.h +++ b/YACReaderLibrary/properties_dialog.h @@ -10,6 +10,7 @@ #include #include #include +#include #include "comic.h" #include "custom_widgets.h" @@ -32,15 +33,20 @@ QLabel * size; YACReaderFieldEdit * coverPageEdit; + QIntValidator coverPageValidator; YACReaderFieldEdit * numberEdit; + QIntValidator numberValidator; QCheckBox * isBisCheck; YACReaderFieldEdit * countEdit; + QIntValidator countValidator; YACReaderFieldEdit * volumeEdit; YACReaderFieldEdit * storyArcEdit; YACReaderFieldEdit * arcNumberEdit; + QIntValidator arcNumberValidator; YACReaderFieldEdit * arcCountEdit; + QIntValidator arcCountValidator; YACReaderFieldEdit * genereEdit; @@ -52,8 +58,11 @@ YACReaderFieldPlainTextEdit * coverArtist; YACReaderFieldEdit * dayEdit; + QIntValidator dayValidator; YACReaderFieldEdit * monthEdit; + QIntValidator monthValidator; YACReaderFieldEdit * yearEdit; + QIntValidator yearValidator; YACReaderFieldEdit * publisherEdit; YACReaderFieldEdit * formatEdit; QCheckBox * colorCheck; diff --git a/common/check_new_version.cpp b/common/check_new_version.cpp index 239218eb..af586246 100644 --- a/common/check_new_version.cpp +++ b/common/check_new_version.cpp @@ -4,7 +4,6 @@ #include #include -#define VERSION "5.0" #define PREVIOUS_VERSION "0.4.5" HttpVersionChecker::HttpVersionChecker() diff --git a/common/check_new_version.h b/common/check_new_version.h index 7f0afbfb..eddca21f 100644 --- a/common/check_new_version.h +++ b/common/check_new_version.h @@ -6,6 +6,8 @@ #include #include +#define VERSION "5.0.0" + class HttpVersionChecker : public QWidget { Q_OBJECT