A?adida la informaci?n de descarga de folders y c?mcs

A?adidos los atributos necesarios a la sesi?n relacionados con YACReader
This commit is contained in:
Luis Ángel San Martín 2012-09-06 22:41:00 +02:00
parent 12e697bc0f
commit 6373649672
10 changed files with 193 additions and 12 deletions

View File

@ -8,7 +8,8 @@ DEPENDPATH += .
INCLUDEPATH += . INCLUDEPATH += .
INCLUDEPATH += ../common \ INCLUDEPATH += ../common \
./server \ ./server \
./db ./db \
../YACReader
CONFIG += release CONFIG += release
CONFIG -= flat CONFIG -= flat
QT += sql network QT += sql network

View File

@ -1,5 +1,5 @@
#ifndef __COMIC_H #ifndef __COMICDB_H
#define __COMIC_H #define __COMICDB_H
#include "library_item.h" #include "library_item.h"
#include <QSqlDatabase> #include <QSqlDatabase>

View File

@ -1,4 +1,5 @@
#include "comiccontroller.h" #include "comiccontroller.h"
#include "library_window.h" #include "library_window.h"
extern LibraryWindow * mw; extern LibraryWindow * mw;
@ -7,25 +8,47 @@ extern LibraryWindow * mw;
#include "../static.h" #include "../static.h"
#include "comic_db.h" #include "comic_db.h"
#include "comic.h"
ComicController::ComicController() {} ComicController::ComicController() {}
void ComicController::service(HttpRequest& request, HttpResponse& response) 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('/'); QStringList pathElements = ((QString)request.getPath()).split('/');
QString libraryName = pathElements.at(2); QString libraryName = pathElements.at(2);
qulonglong comicId = pathElements.at(4).toULongLong(); qulonglong comicId = pathElements.at(4).toULongLong();
QMap<QString,QString> libraries = mw->getLibraries();
ComicDB comic = mw->getComicInfo(libraryName, comicId); ComicDB comic = mw->getComicInfo(libraryName, comicId);
response.writeText(QString("comicid:%1\n").arg(comic.id)); Comic * comicFile = new Comic;
response.writeText(QString("hash:%1\n").arg(comic.info.hash)); if(comicFile->load(libraries.value(libraryName)+comic.path))
response.writeText(QString("path:%1\n").arg(comic.path)); {
response.writeText(QString("numpages:%1\n").arg(*comic.info.numPages)); session.setCurrentComic(comic.id, comicFile);
response.writeText(QString("library:%1\n").arg(libraryName),true);
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); //response.write(t.toLatin1(),true);
} }

View File

@ -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.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.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++; i++;
} }

View File

@ -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<LibraryItem *> folderContent = mw->getFolderContentFromLibrary(libraryName,parentId);
QList<LibraryItem *> folderComics = mw->getFolderComicsFromLibrary(libraryName,parentId);
Folder * currentFolder;
for(QList<LibraryItem *>::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<LibraryItem *>::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));
}
}

View File

@ -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

View File

@ -7,6 +7,7 @@
#include <QDateTime> #include <QDateTime>
#include <QUuid> #include <QUuid>
#include "comic.h"
HttpSession::HttpSession(bool canStore) { HttpSession::HttpSession(bool canStore) {
if (canStore) { if (canStore) {
@ -156,3 +157,70 @@ void HttpSession::setLastAccess() {
dataPtr->lock.unlock(); 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<QString> & 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;
}
}

View File

@ -10,7 +10,9 @@
#include <QVariant> #include <QVariant>
#include <QReadWriteLock> #include <QReadWriteLock>
#include <QSet>
#include <QString>
class Comic;
/** /**
This class stores data for a single HTTP session. This class stores data for a single HTTP session.
A session can store any number of key/value pairs. This class uses implicit A session can store any number of key/value pairs. This class uses implicit
@ -89,8 +91,29 @@ public:
*/ */
void setLastAccess(); void setLastAccess();
//AÑADIDO
bool isComicOnDevice(const QString & hash);
bool isComicDownloaded(const QString & hash);
qulonglong getCurrentComicId();
Comic * getCurrentComic();
void dismissCurrentComic();
void setComicsOnDevice(const QSet<QString> & set);
void setDownloadedComic(const QString & hash);
void setCurrentComic(qulonglong id, Comic * comic);
private: private:
struct YACReaderSessionData {
//cómics disponibles en dispositivo
QSet<QString> comicsOnDevice;
//cómics que han sido descargados o están siendo descargados en esta sesión
QSet<QString> downloadedComics;
//cómic actual que está siendo descargado
qulonglong comicId;
Comic * comic;
};
struct HttpSessionData { struct HttpSessionData {
/** Unique ID */ /** Unique ID */
@ -108,6 +131,8 @@ private:
/** Storage for the key/value pairs; */ /** Storage for the key/value pairs; */
QMap<QByteArray,QVariant> values; QMap<QByteArray,QVariant> values;
YACReaderSessionData yacreaderSessionData;
}; };
/** Pointer to the shared data. */ /** Pointer to the shared data. */

View File

@ -16,6 +16,7 @@
#include "controllers/foldercontroller.h" #include "controllers/foldercontroller.h"
#include "controllers/covercontroller.h" #include "controllers/covercontroller.h"
#include "controllers/comiccontroller.h" #include "controllers/comiccontroller.h"
#include "controllers/folderinfocontroller.h"
RequestMapper::RequestMapper(QObject* parent) RequestMapper::RequestMapper(QObject* parent)
:HttpRequestHandler(parent) {} :HttpRequestHandler(parent) {}
@ -35,7 +36,10 @@ void RequestMapper::service(HttpRequest& request, HttpResponse& response) {
{ {
FolderController().service(request, response); FolderController().service(request, response);
} }
else if (path.contains("folder") && path.contains("info"))
{
FolderInfoController().service(request, response);
}
else if(path.contains("cover") ) else if(path.contains("cover") )
{ {
CoverController().service(request, response); CoverController().service(request, response);

View File

@ -5,7 +5,7 @@
<ul id="itemContainer"> <ul id="itemContainer">
{loop element} {loop element}
<li><a href="{element.url}">{element.name}</a></li> <li><a href="{element.url}">{element.name}</a> - <a href="{element.downloadurl}">Download</a></li>
{end element} {end element}
{loop elementcomic} {loop elementcomic}