From 8a50379d307b92bfad97da79ea54e2fd71b55c42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Tue, 2 Jul 2013 18:59:57 +0200 Subject: [PATCH] bug fixed, the library name is no longer used in the urls of the web library --- YACReaderLibrary/db_helper.cpp | 19 ++++++++++++- YACReaderLibrary/db_helper.h | 2 ++ .../server/controllers/comiccontroller.cpp | 4 +-- .../server/controllers/covercontroller.cpp | 2 +- .../server/controllers/foldercontroller.cpp | 27 ++++++++++--------- .../controllers/folderinfocontroller.cpp | 7 ++--- .../controllers/librariescontroller.cpp | 8 +++--- .../server/controllers/pagecontroller.cpp | 4 ++- .../server/lib/bfHttpServer/httpsession.cpp | 2 +- YACReaderLibrary/server/requestmapper.cpp | 4 +-- 10 files changed, 51 insertions(+), 28 deletions(-) diff --git a/YACReaderLibrary/db_helper.cpp b/YACReaderLibrary/db_helper.cpp index cbc05d1a..91f5f88d 100644 --- a/YACReaderLibrary/db_helper.cpp +++ b/YACReaderLibrary/db_helper.cpp @@ -17,6 +17,8 @@ #include "data_base_management.h" #include "folder.h" +#include "qnaturalsorting.h" + //server //TODO optimizar, evitar que se tenga que leer en cada petición el archivo @@ -127,7 +129,22 @@ QString DBHelper::getFolderName(const QString & libraryName, qulonglong id) QSqlDatabase::removeDatabase(libraryPath); return name; } - +QList DBHelper::getLibrariesNames() +{ + QStringList names = getLibraries().keys(); + qSort(names.begin(),names.end(),naturalSortLessThanCI); + return names; +} +QString DBHelper::getLibraryName(int id) +{ + QStringList names = getLibrariesNames(); + if(names.isEmpty()) + return ""; + if(id>=0 && id getLibrariesNames(); + static QString getLibraryName(int id); //objects management //deletes diff --git a/YACReaderLibrary/server/controllers/comiccontroller.cpp b/YACReaderLibrary/server/controllers/comiccontroller.cpp index a7b99ba6..52715b28 100644 --- a/YACReaderLibrary/server/controllers/comiccontroller.cpp +++ b/YACReaderLibrary/server/controllers/comiccontroller.cpp @@ -18,7 +18,7 @@ void ComicController::service(HttpRequest& request, HttpResponse& response) QString path = QUrl::fromPercentEncoding(request.getPath()).toLatin1(); QStringList pathElements = path.split('/'); - QString libraryName = pathElements.at(2); + QString libraryName = DBHelper::getLibraryName(pathElements.at(2).toInt()); qulonglong comicId = pathElements.at(4).toULongLong(); //TODO @@ -69,7 +69,7 @@ void ComicController::service(HttpRequest& request, HttpResponse& response) session.setCurrentComic(comic.id, comicFile); response.setHeader("Content-Type", "plain/text; charset=ISO-8859-1"); - + //TODO this field is not used by the client! response.writeText(QString("library:%1\r\n").arg(libraryName)); response.writeText(comic.toTXT(),true); } diff --git a/YACReaderLibrary/server/controllers/covercontroller.cpp b/YACReaderLibrary/server/controllers/covercontroller.cpp index 6afa62fc..2cd2f518 100644 --- a/YACReaderLibrary/server/controllers/covercontroller.cpp +++ b/YACReaderLibrary/server/controllers/covercontroller.cpp @@ -19,7 +19,7 @@ void CoverController::service(HttpRequest& request, HttpResponse& response) QString path = QUrl::fromPercentEncoding(request.getPath()).toLatin1(); QStringList pathElements = path.split('/'); - QString libraryName = pathElements.at(2); + QString libraryName = DBHelper::getLibraryName(pathElements.at(2).toInt()); QString fileName = pathElements.at(4); //response.writeText(path+"
"); diff --git a/YACReaderLibrary/server/controllers/foldercontroller.cpp b/YACReaderLibrary/server/controllers/foldercontroller.cpp index f6f0d543..e29123f3 100644 --- a/YACReaderLibrary/server/controllers/foldercontroller.cpp +++ b/YACReaderLibrary/server/controllers/foldercontroller.cpp @@ -33,7 +33,8 @@ void FolderController::service(HttpRequest& request, HttpResponse& response) t.enableWarnings(); QString path = QUrl::fromPercentEncoding(request.getPath()).toLatin1(); QStringList pathElements = path.split('/'); - QString libraryName = pathElements.at(2); + int libraryId = pathElements.at(2).toInt(); + QString libraryName = DBHelper::getLibraryName(libraryId); qulonglong parentId = pathElements.at(4).toULongLong(); QString folderName = DBHelper::getFolderName(libraryName,parentId); if(parentId!=1) @@ -97,7 +98,7 @@ void FolderController::service(HttpRequest& request, HttpResponse& response) upPage = session.topPage(); session.pushPage(page); } - t.setVariable(QString("upurl"),"/library/" + QUrl::toPercentEncoding(libraryName) + "/folder/" +QString("%1?page=%2&up=true").arg(backId).arg(upPage)); + t.setVariable(QString("upurl"),"/library/" + QString::number(libraryId) + "/folder/" +QString("%1?page=%2&up=true").arg(backId).arg(upPage)); } /*if(currentPath.length()>0) @@ -150,12 +151,12 @@ void FolderController::service(HttpRequest& request, HttpResponse& response) t.setVariable(QString("element%1.image.width").arg(i),"89px"); t.setVariable(QString("element%1.image.url").arg(i),"/images/f.png"); - t.setVariable(QString("element%1.browse").arg(i),QString("browse").arg(QString("/library/%1/folder/%2").arg(libraryName).arg(item->id))); + t.setVariable(QString("element%1.browse").arg(i),QString("browse").arg(QString("/library/%1/folder/%2").arg(libraryId).arg(item->id))); //t.setVariable(QString("element%1.url").arg(i),"/library/"+libraryName+"/folder/"+QString("%1").arg(folderContent.at(i + (page*10))->id)); //t.setVariable(QString("element%1.downloadurl").arg(i),"/library/"+libraryName+"/folder/"+QString("%1/info").arg(folderContent.at(i + (page*elementsPerPage))->id)); - t.setVariable(QString("element%1.download").arg(i),QString("import").arg("/library/"+QUrl::toPercentEncoding(libraryName)+"/folder/"+QString("%1/info").arg(folderContent.at(i + (page*elementsPerPage))->id))); + t.setVariable(QString("element%1.download").arg(i),QString("import").arg("/library/"+QString::number(libraryId)+"/folder/"+QString("%1/info").arg(folderContent.at(i + (page*elementsPerPage))->id))); } else { @@ -165,7 +166,7 @@ void FolderController::service(HttpRequest& request, HttpResponse& response) t.setVariable(QString("element%1.image.width").arg(i),"80px"); //t.setVariable(QString("element%1.downloadurl").arg(i),"/library/"+libraryName+"/comic/"+QString("%1").arg(comic->id)); if(!session.isComicOnDevice(comic->info.hash) && !session.isComicDownloaded(comic->info.hash)) - t.setVariable(QString("element%1.download").arg(i),QString("import").arg("/library/"+QUrl::toPercentEncoding(libraryName)+"/comic/"+QString("%1").arg(comic->id))); + t.setVariable(QString("element%1.download").arg(i),QString("import").arg("/library/"+QString::number(libraryId)+"/comic/"+QString("%1").arg(comic->id))); else if (!session.isComicDownloaded(comic->info.hash)) t.setVariable(QString("element%1.download").arg(i),QString("
imported
")); else @@ -173,7 +174,7 @@ void FolderController::service(HttpRequest& request, HttpResponse& response) //t.setVariable(QString("element%1.image.url").arg(i),"/images/f.png"); - t.setVariable(QString("element%1.image.url").arg(i),QString("/library/%1/cover/%2.jpg").arg(QString(QUrl::toPercentEncoding(libraryName))).arg(comic->info.hash)); + t.setVariable(QString("element%1.image.url").arg(i),QString("/library/%1/cover/%2.jpg").arg(libraryId).arg(comic->info.hash)); } i++; } @@ -262,7 +263,7 @@ void FolderController::service(HttpRequest& request, HttpResponse& response) { //response.writeText(QString("%1 - %2
").arg(*itr).arg(count)); t.setVariable(QString("index%1.indexname").arg(i), *itr); - t.setVariable(QString("index%1.url").arg(i),QString("/library/%1/folder/%2?page=%3").arg(QString(QUrl::toPercentEncoding(libraryName))).arg(parentId).arg(indexPage)); + t.setVariable(QString("index%1.url").arg(i),QString("/library/%1/folder/%2?page=%3").arg(libraryId).arg(parentId).arg(indexPage)); i++; count += indexCount.value(*itr); indexPage = count/elementsPerPage; @@ -281,8 +282,8 @@ void FolderController::service(HttpRequest& request, HttpResponse& response) while(z < numPages) { - t.setVariable(QString("page%1.url").arg(z),QString("/library/%1/folder/%2?page=%3").arg(QString(QUrl::toPercentEncoding(libraryName))).arg(parentId).arg(z)); - t.setVariable(QString("page%1.number").arg(z),QString("%1").arg(z)); + t.setVariable(QString("page%1.url").arg(z),QString("/library/%1/folder/%2?page=%3").arg(libraryId).arg(parentId).arg(z)); + t.setVariable(QString("page%1.number").arg(z),QString("%1").arg(z+1)); if(page == z) t.setVariable(QString("page%1.current").arg(z),"current"); else @@ -290,10 +291,10 @@ void FolderController::service(HttpRequest& request, HttpResponse& response) z++; } - t.setVariable("page.first",QString("/library/%1/folder/%2?page=%3").arg(QString(QUrl::toPercentEncoding(libraryName))).arg(parentId).arg(0)); - t.setVariable("page.previous",QString("/library/%1/folder/%2?page=%3").arg(QString(QUrl::toPercentEncoding(libraryName))).arg(parentId).arg((page==0)?page:page-1)); - t.setVariable("page.next",QString("/library/%1/folder/%2?page=%3").arg(QString(QUrl::toPercentEncoding(libraryName))).arg(parentId).arg((page==numPages-1)?page:page+1)); - t.setVariable("page.last",QString("/library/%1/folder/%2?page=%3").arg(QString(QUrl::toPercentEncoding(libraryName))).arg(parentId).arg(numPages-1)); + t.setVariable("page.first",QString("/library/%1/folder/%2?page=%3").arg(libraryId).arg(parentId).arg(0)); + t.setVariable("page.previous",QString("/library/%1/folder/%2?page=%3").arg(libraryId).arg(parentId).arg((page==0)?page:page-1)); + t.setVariable("page.next",QString("/library/%1/folder/%2?page=%3").arg(libraryId).arg(parentId).arg((page==numPages-1)?page:page+1)); + t.setVariable("page.last",QString("/library/%1/folder/%2?page=%3").arg(libraryId).arg(parentId).arg(numPages-1)); } else diff --git a/YACReaderLibrary/server/controllers/folderinfocontroller.cpp b/YACReaderLibrary/server/controllers/folderinfocontroller.cpp index ba602fc8..9dbb2103 100644 --- a/YACReaderLibrary/server/controllers/folderinfocontroller.cpp +++ b/YACReaderLibrary/server/controllers/folderinfocontroller.cpp @@ -16,7 +16,8 @@ void FolderInfoController::service(HttpRequest& request, HttpResponse& response) QString path = QUrl::fromPercentEncoding(request.getPath()).toLatin1(); QStringList pathElements = path.split('/'); - QString libraryName = pathElements.at(2); + int libraryId = pathElements.at(2).toInt(); + QString libraryName = DBHelper::getLibraryName(libraryId); qulonglong parentId = pathElements.at(4).toULongLong(); QList folderContent = DBHelper::getFolderContentFromLibrary(libraryName,parentId); QList folderComics = DBHelper::getFolderComicsFromLibrary(libraryName,parentId); @@ -25,14 +26,14 @@ void FolderInfoController::service(HttpRequest& request, HttpResponse& response) for(QList::const_iterator itr = folderContent.constBegin();itr!=folderContent.constEnd();itr++) { currentFolder = (Folder *)(*itr); - response.writeText(QString("/library/%1/folder/%2/info\n").arg(QString(QUrl::toPercentEncoding(libraryName))).arg(currentFolder->id)); + response.writeText(QString("/library/%1/folder/%2/info\n").arg(libraryId).arg(currentFolder->id)); } ComicDB * currentComic; for(QList::const_iterator itr = folderComics.constBegin();itr!=folderComics.constEnd();itr++) { currentComic = (ComicDB *)(*itr); - response.writeText(QString("/library/%1/comic/%2\n").arg(QString(QUrl::toPercentEncoding(libraryName))).arg(currentComic->id)); + response.writeText(QString("/library/%1/comic/%2\n").arg(libraryId).arg(currentComic->id)); } } \ No newline at end of file diff --git a/YACReaderLibrary/server/controllers/librariescontroller.cpp b/YACReaderLibrary/server/controllers/librariescontroller.cpp index f171fe66..a61ae684 100644 --- a/YACReaderLibrary/server/controllers/librariescontroller.cpp +++ b/YACReaderLibrary/server/controllers/librariescontroller.cpp @@ -4,6 +4,7 @@ #include "template.h" #include "../static.h" + LibrariesController::LibrariesController() {} void LibrariesController::service(HttpRequest& request, HttpResponse& response) @@ -38,13 +39,12 @@ void LibrariesController::service(HttpRequest& request, HttpResponse& response) Template t=Static::templateLoader->getTemplate("libraries_"+session.getDeviceType(),request.getHeader("Accept-Language")); t.enableWarnings(); - QMap libraries = DBHelper::getLibraries(); - QList names = libraries.keys(); - + QList names = DBHelper::getLibrariesNames(); + t.loop("library",names.length()); int i=0; while (i #include +#include "db_helper.h" + PageController::PageController() {} void PageController::service(HttpRequest& request, HttpResponse& response) @@ -19,7 +21,7 @@ void PageController::service(HttpRequest& request, HttpResponse& response) //qDebug("PageController: request to -> %s ",path2.data()); QStringList pathElements = path.split('/'); - QString libraryName = pathElements.at(2); + QString libraryName = DBHelper::getLibraryName(pathElements.at(2).toInt()); qulonglong comicId = pathElements.at(4).toULongLong(); unsigned int page = pathElements.at(6).toUInt(); diff --git a/YACReaderLibrary/server/lib/bfHttpServer/httpsession.cpp b/YACReaderLibrary/server/lib/bfHttpServer/httpsession.cpp index 3a1e4060..aedef1dc 100644 --- a/YACReaderLibrary/server/lib/bfHttpServer/httpsession.cpp +++ b/YACReaderLibrary/server/lib/bfHttpServer/httpsession.cpp @@ -290,7 +290,7 @@ void HttpSession::clearNavigationPath() int HttpSession::popPage() { - if(dataPtr) + if(dataPtr && !(dataPtr->yacreaderSessionData.navigationPath.isEmpty())) return dataPtr->yacreaderSessionData.navigationPath.pop(); } diff --git a/YACReaderLibrary/server/requestmapper.cpp b/YACReaderLibrary/server/requestmapper.cpp index 52b569aa..65e09dd1 100644 --- a/YACReaderLibrary/server/requestmapper.cpp +++ b/YACReaderLibrary/server/requestmapper.cpp @@ -37,7 +37,7 @@ void RequestMapper::service(HttpRequest& request, HttpResponse& response) { QRegExp cover("/library/.+/cover/[0-9a-f]+.jpg"); //get comic cover (navigation) QRegExp comicPage("/library/.+/comic/[0-9]+/page/[0-9]+/?"); //get comic page - QRegExp library("/library/([^/]+)/.+"); //permite verificar que la biblioteca solicitada existe + QRegExp library("/library/([0-9]+)/.+"); //permite verificar que la biblioteca solicitada existe path = QUrl::fromPercentEncoding(path).toLatin1(); @@ -53,7 +53,7 @@ void RequestMapper::service(HttpRequest& request, HttpResponse& response) { HttpSession session=Static::sessionStore->getSession(request,response,false); if(!session.isNull() && session.contains("ySession")) { - if(library.indexIn(path)!=-1 && DBHelper::getLibraries().contains(library.cap(1)) ) + if(library.indexIn(path)!=-1 && DBHelper::getLibraries().count() > library.cap(1).toInt() ) { //listar el contenido del folder if(folder.exactMatch(path))