From 0e166fec4a170bfbca6fa559fc2faeabac5ccfb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Mon, 18 Aug 2014 20:47:59 +0200 Subject: [PATCH] fixed comics management on server sersion --- .../server/controllers/foldercontroller.cpp | 2 +- .../controllers/librariescontroller.cpp | 61 +---------------- .../server/lib/bfHttpServer/httpsession.cpp | 11 ++- .../server/lib/bfHttpServer/httpsession.h | 1 + YACReaderLibrary/server/requestmapper.cpp | 68 ++++++++++++++++++- YACReaderLibrary/server/requestmapper.h | 1 + 6 files changed, 83 insertions(+), 61 deletions(-) diff --git a/YACReaderLibrary/server/controllers/foldercontroller.cpp b/YACReaderLibrary/server/controllers/foldercontroller.cpp index 76e6a47b..cc7a895c 100644 --- a/YACReaderLibrary/server/controllers/foldercontroller.cpp +++ b/YACReaderLibrary/server/controllers/foldercontroller.cpp @@ -211,7 +211,7 @@ void FolderController::service(HttpRequest& request, HttpResponse& response) //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/"+QString::number(libraryId)+"/comic/"+QString("%1").arg(comic->id))); - else if (!session.isComicDownloaded(comic->info.hash)) + else if (session.isComicOnDevice(comic->info.hash)) t.setVariable(QString("element%1.download").arg(i),QString("
imported
")); else t.setVariable(QString("element%1.download").arg(i),QString("
importing
")); diff --git a/YACReaderLibrary/server/controllers/librariescontroller.cpp b/YACReaderLibrary/server/controllers/librariescontroller.cpp index 6b555018..ebd888d5 100644 --- a/YACReaderLibrary/server/controllers/librariescontroller.cpp +++ b/YACReaderLibrary/server/controllers/librariescontroller.cpp @@ -12,66 +12,11 @@ LibrariesController::LibrariesController() {} void LibrariesController::service(HttpRequest& request, HttpResponse& response) { HttpSession session=Static::sessionStore->getSession(request,response); - if(session.contains("ySession")) //session is already alive check if it is needed to update comics - { - QString postData = QString::fromUtf8(request.getBody()); - if(postData.length()>0) { - QList data = postData.split("\n"); - if(data.length() > 2) { - session.setDeviceType(data.at(0).split(":").at(1)); - session.setDisplayType(data.at(1).split(":").at(1)); - QList comics = data.at(2).split(":").at(1).split("\t"); - foreach(QString hash,comics) { - session.setComicOnDevice(hash); - } - } - else - { - if(data.length()>1) - { - session.setDeviceType(data.at(0).split(":").at(1)); - session.setDisplayType(data.at(1).split(":").at(1)); - } - } - } - } - else - { - session.set("ySession","ok"); - session.clearNavigationPath(); - session.clearFoldersPath(); + response.setHeader("Content-Type", "text/html; charset=ISO-8859-1"); + response.setHeader("Connection","close"); - response.setHeader("Content-Type", "text/html; charset=ISO-8859-1"); - response.setHeader("Connection","close"); - - - QString postData = QString::fromUtf8(request.getBody()); - //response.writeText(postData); - - QList data = postData.split("\n"); - - QLOG_INFO() << "Data lenght : " << data.length(); - - if(data.length() > 2) - { - session.setDeviceType(data.at(0).split(":").at(1)); - session.setDisplayType(data.at(1).split(":").at(1)); - QList comics = data.at(2).split(":").at(1).split("\t"); - foreach(QString hash,comics) - { - session.setComicOnDevice(hash); - } - } - else //values by default, only for debug purposes. - { - session.setDeviceType("ipad"); - session.setDisplayType("@2x"); - } - - } - - Template t=Static::templateLoader->getTemplate("libraries_"+session.getDeviceType(),request.getHeader("Accept-Language")); + Template t=Static::templateLoader->getTemplate("libraries_"+session.getDeviceType(),request.getHeader("Accept-Language")); t.enableWarnings(); YACReaderLibraries libraries = DBHelper::getLibraries(); diff --git a/YACReaderLibrary/server/lib/bfHttpServer/httpsession.cpp b/YACReaderLibrary/server/lib/bfHttpServer/httpsession.cpp index c09cb553..c05c803b 100644 --- a/YACReaderLibrary/server/lib/bfHttpServer/httpsession.cpp +++ b/YACReaderLibrary/server/lib/bfHttpServer/httpsession.cpp @@ -210,7 +210,16 @@ QSet HttpSession::getDownloadedComics() if(dataPtr) return dataPtr->yacreaderSessionData.downloadedComics ; else - return QSet(); + return QSet(); +} + +void HttpSession::clearComics() +{ + if(dataPtr) + { + dataPtr->yacreaderSessionData.comicsOnDevice.clear(); + dataPtr->yacreaderSessionData.downloadedComics.clear(); + } } //current comic (import) qulonglong HttpSession::getCurrentComicId() diff --git a/YACReaderLibrary/server/lib/bfHttpServer/httpsession.h b/YACReaderLibrary/server/lib/bfHttpServer/httpsession.h index 1a0a42e1..63d97b46 100644 --- a/YACReaderLibrary/server/lib/bfHttpServer/httpsession.h +++ b/YACReaderLibrary/server/lib/bfHttpServer/httpsession.h @@ -101,6 +101,7 @@ public: bool isComicDownloaded(const QString & hash); QSet getComicsOnDevice(); QSet getDownloadedComics(); + void clearComics(); //current comic (import) qulonglong getCurrentComicId(); diff --git a/YACReaderLibrary/server/requestmapper.cpp b/YACReaderLibrary/server/requestmapper.cpp index f867b944..56879f1c 100644 --- a/YACReaderLibrary/server/requestmapper.cpp +++ b/YACReaderLibrary/server/requestmapper.cpp @@ -24,9 +24,71 @@ #include "db_helper.h" #include "yacreader_libraries.h" +#include "QsLog.h" + RequestMapper::RequestMapper(QObject* parent) :HttpRequestHandler(parent) {} +void RequestMapper::loadSession(HttpRequest & request, HttpResponse& response) +{ + HttpSession session=Static::sessionStore->getSession(request,response); + if(session.contains("ySession")) //session is already alive check if it is needed to update comics + { + QString postData = QString::fromUtf8(request.getBody()); + if(postData.length()>0) { + QList data = postData.split("\n"); + if(data.length() > 2) { + session.setDeviceType(data.at(0).split(":").at(1)); + session.setDisplayType(data.at(1).split(":").at(1)); + QList comics = data.at(2).split(":").at(1).split("\t"); + session.clearComics(); + foreach(QString hash,comics) { + session.setComicOnDevice(hash); + } + } + else + { + if(data.length()>1) + { + session.setDeviceType(data.at(0).split(":").at(1)); + session.setDisplayType(data.at(1).split(":").at(1)); + } + } + } + } + else + { + session.set("ySession","ok"); + + session.clearNavigationPath(); + session.clearFoldersPath(); + + QString postData = QString::fromUtf8(request.getBody()); + //response.writeText(postData); + + QList data = postData.split("\n"); + + QLOG_INFO() << "Data lenght : " << data.length(); + + if(data.length() > 2) + { + session.setDeviceType(data.at(0).split(":").at(1)); + session.setDisplayType(data.at(1).split(":").at(1)); + QList comics = data.at(2).split(":").at(1).split("\t"); + foreach(QString hash,comics) + { + session.setComicOnDevice(hash); + } + } + else //values by default, only for debug purposes. + { + session.setDeviceType("ipad"); + session.setDisplayType("@2x"); + } + + } +} + void RequestMapper::service(HttpRequest& request, HttpResponse& response) { QByteArray path=request.getPath(); qDebug("RequestMapper: path=%s",path.data()); @@ -41,10 +103,12 @@ void RequestMapper::service(HttpRequest& request, HttpResponse& response) { QRegExp comicPage("/library/.+/comic/[0-9]+/page/[0-9]+/?"); //get comic page QRegExp comicPageRemote("/library/.+/comic/[0-9]+/page/[0-9]+/remote?"); //get comic page (remote reading) - QRegExp library("/library/([0-9]+)/.+"); //permite verificar que la biblioteca solicitada existe + QRegExp library("/library/([0-9]+)/.+"); //permite verificar que la biblioteca solicitada existe path = QUrl::fromPercentEncoding(path).toLatin1(); + loadSession(request, response); + //primera petición, se ha hecho un post, se sirven las bibliotecas si la seguridad mediante login no está habilitada if(path == "/") { @@ -58,6 +122,8 @@ 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).toInt()) ) { //listar el contenido del folder diff --git a/YACReaderLibrary/server/requestmapper.h b/YACReaderLibrary/server/requestmapper.h index d44586f6..332cee09 100644 --- a/YACReaderLibrary/server/requestmapper.h +++ b/YACReaderLibrary/server/requestmapper.h @@ -30,6 +30,7 @@ public: @param response Must be used to return the response */ void service(HttpRequest& request, HttpResponse& response); + void loadSession(HttpRequest & request, HttpResponse& response); };