From 6373649672338af2dc035921f34c3f7d28bbd711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Thu, 6 Sep 2012 22:41:00 +0200 Subject: [PATCH] A?adida la informaci?n de descarga de folders y c?mcs A?adidos los atributos necesarios a la sesi?n relacionados con YACReader --- YACReaderLibrary/YACReaderLibrary.pro | 3 +- YACReaderLibrary/db/comic_db.h | 4 +- .../server/controllers/comiccontroller.cpp | 35 ++++++++-- .../server/controllers/foldercontroller.cpp | 1 + .../controllers/folderinfocontroller.cpp | 39 +++++++++++ .../server/controllers/folderinfocontroller.h | 20 ++++++ .../server/lib/bfHttpServer/httpsession.cpp | 68 +++++++++++++++++++ .../server/lib/bfHttpServer/httpsession.h | 27 +++++++- YACReaderLibrary/server/requestmapper.cpp | 6 +- release/server/templates/folder.tpl | 2 +- 10 files changed, 193 insertions(+), 12 deletions(-) diff --git a/YACReaderLibrary/YACReaderLibrary.pro b/YACReaderLibrary/YACReaderLibrary.pro index 3255faec..35cc8f17 100644 --- a/YACReaderLibrary/YACReaderLibrary.pro +++ b/YACReaderLibrary/YACReaderLibrary.pro @@ -8,7 +8,8 @@ DEPENDPATH += . INCLUDEPATH += . INCLUDEPATH += ../common \ ./server \ - ./db + ./db \ + ../YACReader CONFIG += release CONFIG -= flat QT += sql network diff --git a/YACReaderLibrary/db/comic_db.h b/YACReaderLibrary/db/comic_db.h index 83775310..6b6e1e10 100644 --- a/YACReaderLibrary/db/comic_db.h +++ b/YACReaderLibrary/db/comic_db.h @@ -1,5 +1,5 @@ -#ifndef __COMIC_H -#define __COMIC_H +#ifndef __COMICDB_H +#define __COMICDB_H #include "library_item.h" #include diff --git a/YACReaderLibrary/server/controllers/comiccontroller.cpp b/YACReaderLibrary/server/controllers/comiccontroller.cpp index 1123163b..7dac879a 100644 --- a/YACReaderLibrary/server/controllers/comiccontroller.cpp +++ b/YACReaderLibrary/server/controllers/comiccontroller.cpp @@ -1,4 +1,5 @@ #include "comiccontroller.h" + #include "library_window.h" extern LibraryWindow * mw; @@ -7,25 +8,47 @@ extern LibraryWindow * mw; #include "../static.h" #include "comic_db.h" +#include "comic.h" ComicController::ComicController() {} void ComicController::service(HttpRequest& request, HttpResponse& response) { - response.setHeader("Content-Type", "plain/text; charset=ISO-8859-1"); + + HttpSession session=Static::sessionStore->getSession(request,response); + QStringList pathElements = ((QString)request.getPath()).split('/'); QString libraryName = pathElements.at(2); qulonglong comicId = pathElements.at(4).toULongLong(); + QMap libraries = mw->getLibraries(); + + ComicDB comic = mw->getComicInfo(libraryName, comicId); - response.writeText(QString("comicid:%1\n").arg(comic.id)); - response.writeText(QString("hash:%1\n").arg(comic.info.hash)); - response.writeText(QString("path:%1\n").arg(comic.path)); - response.writeText(QString("numpages:%1\n").arg(*comic.info.numPages)); - response.writeText(QString("library:%1\n").arg(libraryName),true); + Comic * comicFile = new Comic; + if(comicFile->load(libraries.value(libraryName)+comic.path)) + { + session.setCurrentComic(comic.id, comicFile); + + response.setHeader("Content-Type", "plain/text; charset=ISO-8859-1"); + response.writeText(QString("comicid:%1\n").arg(comic.id)); + response.writeText(QString("hash:%1\n").arg(comic.info.hash)); + response.writeText(QString("path:%1\n").arg(comic.path)); + response.writeText(QString("numpages:%1\n").arg(*comic.info.numPages)); + response.writeText(QString("library:%1\n").arg(libraryName),true); + } + else + { + delete comicFile; + response.setStatus(404,"not found"); + response.write("404 not found",true); + } + + + //response.write(t.toLatin1(),true); } \ No newline at end of file diff --git a/YACReaderLibrary/server/controllers/foldercontroller.cpp b/YACReaderLibrary/server/controllers/foldercontroller.cpp index 3d29d1e3..f4888e9a 100644 --- a/YACReaderLibrary/server/controllers/foldercontroller.cpp +++ b/YACReaderLibrary/server/controllers/foldercontroller.cpp @@ -65,6 +65,7 @@ void FolderController::service(HttpRequest& request, HttpResponse& response) { t.setVariable(QString("element%1.name").arg(i),folderContent.at(i + (page*10))->name); 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*10))->id)); i++; } diff --git a/YACReaderLibrary/server/controllers/folderinfocontroller.cpp b/YACReaderLibrary/server/controllers/folderinfocontroller.cpp index e69de29b..07312e8c 100644 --- a/YACReaderLibrary/server/controllers/folderinfocontroller.cpp +++ b/YACReaderLibrary/server/controllers/folderinfocontroller.cpp @@ -0,0 +1,39 @@ +#include "folderinfocontroller.h" +#include "library_window.h" //get libraries + +#include "folder.h" +#include "comic_db.h" + +#include "template.h" +#include "../static.h" + +extern LibraryWindow * mw; + +FolderInfoController::FolderInfoController() {} + +void FolderInfoController::service(HttpRequest& request, HttpResponse& response) +{ + response.setHeader("Content-Type", "plain/text; charset=ISO-8859-1"); + + QString path = request.getPath(); + QStringList pathElements = path.split('/'); + QString libraryName = pathElements.at(2); + qulonglong parentId = pathElements.at(4).toULongLong(); + QList folderContent = mw->getFolderContentFromLibrary(libraryName,parentId); + QList folderComics = mw->getFolderComicsFromLibrary(libraryName,parentId); + + Folder * currentFolder; + for(QList::const_iterator itr = folderContent.constBegin();itr!=folderContent.constEnd();itr++) + { + currentFolder = (Folder *)(*itr); + response.writeText(QString("/library/%1/folder/%2/info\n").arg(libraryName).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(libraryName).arg(currentComic->id)); + } + +} \ No newline at end of file diff --git a/YACReaderLibrary/server/controllers/folderinfocontroller.h b/YACReaderLibrary/server/controllers/folderinfocontroller.h index e69de29b..69bdc6b6 100644 --- a/YACReaderLibrary/server/controllers/folderinfocontroller.h +++ b/YACReaderLibrary/server/controllers/folderinfocontroller.h @@ -0,0 +1,20 @@ +#ifndef FOLDERINFOCONTROLLER_H +#define FOLDERINFOCONTROLLER_H + +#include "httprequest.h" +#include "httpresponse.h" +#include "httprequesthandler.h" + +class FolderInfoController : public HttpRequestHandler { + Q_OBJECT + Q_DISABLE_COPY(FolderInfoController); +public: + + /** Constructor */ + FolderInfoController(); + + /** Generates the response */ + void service(HttpRequest& request, HttpResponse& response); +}; + +#endif // FOLDERINFOCONTROLLER_H diff --git a/YACReaderLibrary/server/lib/bfHttpServer/httpsession.cpp b/YACReaderLibrary/server/lib/bfHttpServer/httpsession.cpp index 9c7bdd62..c7e4963b 100644 --- a/YACReaderLibrary/server/lib/bfHttpServer/httpsession.cpp +++ b/YACReaderLibrary/server/lib/bfHttpServer/httpsession.cpp @@ -7,6 +7,7 @@ #include #include +#include "comic.h" HttpSession::HttpSession(bool canStore) { if (canStore) { @@ -156,3 +157,70 @@ void HttpSession::setLastAccess() { dataPtr->lock.unlock(); } } + + +//AÑADIDO +bool HttpSession::isComicOnDevice(const QString & hash) +{ + if(dataPtr) + return dataPtr->yacreaderSessionData.downloadedComics.contains(hash); + else + return false; +} +bool HttpSession::isComicDownloaded(const QString & hash) +{ + if(dataPtr) + return dataPtr->yacreaderSessionData.downloadedComics.contains(hash); + else + return false; +} +qulonglong HttpSession::getCurrentComicId() +{ + if(dataPtr) + return dataPtr->yacreaderSessionData.comicId ; + else + return 0; +} +Comic * HttpSession::getCurrentComic() +{ + if(dataPtr) + { + return dataPtr->yacreaderSessionData.comic ; + } + else + return 0; +} +void HttpSession::dismissCurrentComic() +{ + if(dataPtr) + { + if(dataPtr->yacreaderSessionData.comic != 0) + { + delete dataPtr->yacreaderSessionData.comic; + } + dataPtr->yacreaderSessionData.comicId = 0; + } +} + +void HttpSession::setComicsOnDevice(const QSet & set) +{ + if(dataPtr) + { + dataPtr->yacreaderSessionData.comicsOnDevice = set; + } +} +void HttpSession::setDownloadedComic(const QString & hash) +{ + if(dataPtr) + { + dataPtr->yacreaderSessionData.downloadedComics.insert(hash); + } +} +void HttpSession::setCurrentComic(qulonglong id, Comic * comic) +{ + if(dataPtr) + { + dataPtr->yacreaderSessionData.comicId = id; + dataPtr->yacreaderSessionData.comic = comic; + } +} \ No newline at end of file diff --git a/YACReaderLibrary/server/lib/bfHttpServer/httpsession.h b/YACReaderLibrary/server/lib/bfHttpServer/httpsession.h index 7a9470aa..6fce74f7 100644 --- a/YACReaderLibrary/server/lib/bfHttpServer/httpsession.h +++ b/YACReaderLibrary/server/lib/bfHttpServer/httpsession.h @@ -10,7 +10,9 @@ #include #include - +#include +#include +class Comic; /** This class stores data for a single HTTP session. A session can store any number of key/value pairs. This class uses implicit @@ -89,8 +91,29 @@ public: */ void setLastAccess(); + //AÑADIDO + bool isComicOnDevice(const QString & hash); + bool isComicDownloaded(const QString & hash); + qulonglong getCurrentComicId(); + Comic * getCurrentComic(); + void dismissCurrentComic(); + + void setComicsOnDevice(const QSet & set); + void setDownloadedComic(const QString & hash); + void setCurrentComic(qulonglong id, Comic * comic); + private: + struct YACReaderSessionData { + //cómics disponibles en dispositivo + QSet comicsOnDevice; + //cómics que han sido descargados o están siendo descargados en esta sesión + QSet downloadedComics; + //cómic actual que está siendo descargado + qulonglong comicId; + Comic * comic; + }; + struct HttpSessionData { /** Unique ID */ @@ -108,6 +131,8 @@ private: /** Storage for the key/value pairs; */ QMap values; + YACReaderSessionData yacreaderSessionData; + }; /** Pointer to the shared data. */ diff --git a/YACReaderLibrary/server/requestmapper.cpp b/YACReaderLibrary/server/requestmapper.cpp index 63507f39..7a949194 100644 --- a/YACReaderLibrary/server/requestmapper.cpp +++ b/YACReaderLibrary/server/requestmapper.cpp @@ -16,6 +16,7 @@ #include "controllers/foldercontroller.h" #include "controllers/covercontroller.h" #include "controllers/comiccontroller.h" +#include "controllers/folderinfocontroller.h" RequestMapper::RequestMapper(QObject* parent) :HttpRequestHandler(parent) {} @@ -35,7 +36,10 @@ void RequestMapper::service(HttpRequest& request, HttpResponse& response) { { FolderController().service(request, response); } - + else if (path.contains("folder") && path.contains("info")) + { + FolderInfoController().service(request, response); + } else if(path.contains("cover") ) { CoverController().service(request, response); diff --git a/release/server/templates/folder.tpl b/release/server/templates/folder.tpl index a5b33a87..be9626d1 100644 --- a/release/server/templates/folder.tpl +++ b/release/server/templates/folder.tpl @@ -5,7 +5,7 @@