diff --git a/YACReaderLibrary/server/controllers/dumpcontroller.cpp b/YACReaderLibrary/server/controllers/dumpcontroller.cpp deleted file mode 100644 index 2b67e536..00000000 --- a/YACReaderLibrary/server/controllers/dumpcontroller.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/** - @file - @author Stefan Frings -*/ - -#include "dumpcontroller.h" -#include -#include - -DumpController::DumpController(){} - -void DumpController::service(HttpRequest& request, HttpResponse& response) { - - response.setHeader("Content-Type", "text/html; charset=ISO-8859-1"); - response.setCookie(HttpCookie("firstCookie","hello",600)); - response.setCookie(HttpCookie("secondCookie","world",600)); - - QByteArray body(""); - body.append("Request:"); - body.append("
Method: "); - body.append(request.getMethod()); - body.append("
Path: "); - body.append(request.getPath()); - body.append("
Version: "); - body.append(request.getVersion()); - - body.append("

Headers:"); - QMapIterator i(request.getHeaderMap()); - while (i.hasNext()) { - i.next(); - body.append("
"); - body.append(i.key()); - body.append("="); - body.append(i.value()); - } - - body.append("

Parameters:"); - i=QMapIterator(request.getParameterMap()); - while (i.hasNext()) { - i.next(); - body.append("
"); - body.append(i.key()); - body.append("="); - body.append(i.value()); - } - - body.append("

Cookies:"); - i=QMapIterator(request.getCookieMap()); - while (i.hasNext()) { - i.next(); - body.append("
"); - body.append(i.key()); - body.append("="); - body.append(i.value()); - } - - body.append("

Body:
"); - body.append(request.getBody()); - - body.append(""); - response.write(body,true); -} diff --git a/YACReaderLibrary/server/controllers/dumpcontroller.h b/YACReaderLibrary/server/controllers/dumpcontroller.h deleted file mode 100644 index a3787dbb..00000000 --- a/YACReaderLibrary/server/controllers/dumpcontroller.h +++ /dev/null @@ -1,29 +0,0 @@ -/** - @file - @author Stefan Frings -*/ - -#ifndef DUMPCONTROLLER_H -#define DUMPCONTROLLER_H - -#include "httprequest.h" -#include "httpresponse.h" -#include "httprequesthandler.h" - -/** - This controller dumps the received HTTP request in the response. -*/ - -class DumpController : public HttpRequestHandler { - Q_OBJECT - Q_DISABLE_COPY(DumpController); -public: - - /** Constructor */ - DumpController(); - - /** Generates the response */ - void service(HttpRequest& request, HttpResponse& response); -}; - -#endif // DUMPCONTROLLER_H diff --git a/YACReaderLibrary/server/controllers/fileuploadcontroller.cpp b/YACReaderLibrary/server/controllers/fileuploadcontroller.cpp deleted file mode 100644 index 30d76035..00000000 --- a/YACReaderLibrary/server/controllers/fileuploadcontroller.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/** - @file - @author Stefan Frings -*/ - -#include "fileuploadcontroller.h" - -FileUploadController::FileUploadController() {} - -void FileUploadController::service(HttpRequest& request, HttpResponse& response) { - - if (request.getParameter("action")=="show") { - response.setHeader("Content-Type", "image/jpeg"); - QTemporaryFile* file=request.getUploadedFile("file1"); - if (file) { - while (!file->atEnd() && !file->error()) { - QByteArray buffer=file->read(65536); - response.write(buffer); - } - } - else { - response.write("upload failed"); - } - } - - else { - response.setHeader("Content-Type", "text/html; charset=ISO-8859-1"); - response.write(""); - response.write("Upload a JPEG image file

"); - response.write("

"); - response.write(" "); - response.write(" File:
"); - response.write(" "); - response.write("
"); - response.write("",true); - } -} - diff --git a/YACReaderLibrary/server/controllers/fileuploadcontroller.h b/YACReaderLibrary/server/controllers/fileuploadcontroller.h deleted file mode 100644 index 01865ea6..00000000 --- a/YACReaderLibrary/server/controllers/fileuploadcontroller.h +++ /dev/null @@ -1,30 +0,0 @@ -/** - @file - @author Stefan Frings -*/ - -#ifndef FILEUPLOADCONTROLLER_H -#define FILEUPLOADCONTROLLER_H - -#include "httprequest.h" -#include "httpresponse.h" -#include "httprequesthandler.h" - -/** - This controller displays a HTML form for file upload and recieved the file. -*/ - - -class FileUploadController : public HttpRequestHandler { - Q_OBJECT - Q_DISABLE_COPY(FileUploadController); -public: - - /** Constructor */ - FileUploadController(); - - /** Generates the response */ - void service(HttpRequest& request, HttpResponse& response); -}; - -#endif // FILEUPLOADCONTROLLER_H diff --git a/YACReaderLibrary/server/controllers/formcontroller.cpp b/YACReaderLibrary/server/controllers/formcontroller.cpp deleted file mode 100644 index 7a0f2b27..00000000 --- a/YACReaderLibrary/server/controllers/formcontroller.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/** - @file - @author Stefan Frings -*/ - -#include "formcontroller.h" -#include - -FormController::FormController() {} - -void FormController::service(HttpRequest& request, HttpResponse& response) { - - response.setHeader("Content-Type", "text/html; charset=utf-8"); - - QString data(request.getBody()); - - QStringList list = data.split("\n"); - - response.write(""); - response.writeText("á é í ó ú ñ -> \\ /Device type: "+list.first()); - - //test background proccesing - /*int i=0; - int j=0; - while(i<1000000000) - { - if(request.getBody().length()>1) - j++; - else - i++; - if(i%1000000 == 0) - response.write("

lista

"); - }*/ - - response.write("

lista

"); - - response.write("
    "); - - for(int i=1;i"+list.at(i)+""); - } - response.write("
",true); - - /*if (request.getParameter("action")=="show") { - response.write(""); - response.write("Name = "); - response.write(request.getParameter("name")); - response.write("
City = "); - response.write(request.getParameter("city")); - response.write("",true); - } - else { - response.write(""); - response.write("
"); - response.write(" "); - response.write(" Name:
"); - response.write(" City:
"); - response.write(" "); - response.write("
"); - response.write("",true); - }*/ -} - diff --git a/YACReaderLibrary/server/controllers/sessioncontroller.h b/YACReaderLibrary/server/controllers/sessioncontroller.h deleted file mode 100644 index a13ee51f..00000000 --- a/YACReaderLibrary/server/controllers/sessioncontroller.h +++ /dev/null @@ -1,29 +0,0 @@ -/** - @file - @author Stefan Frings -*/ - -#ifndef SESSIONCONTROLLER_H -#define SESSIONCONTROLLER_H - -#include "httprequest.h" -#include "httpresponse.h" -#include "httprequesthandler.h" - -/** - This controller demonstrates how to use sessions. -*/ - -class SessionController : public HttpRequestHandler { - Q_OBJECT - Q_DISABLE_COPY(SessionController); -public: - - /** Constructor */ - SessionController(); - - /** Generates the response */ - void service(HttpRequest& request, HttpResponse& response); -}; - -#endif // SESSIONCONTROLLER_H diff --git a/YACReaderLibrary/server/controllers/sessionmanager.cpp b/YACReaderLibrary/server/controllers/sessionmanager.cpp deleted file mode 100644 index e69de29b..00000000 diff --git a/YACReaderLibrary/server/controllers/templatecontroller.cpp b/YACReaderLibrary/server/controllers/templatecontroller.cpp deleted file mode 100644 index d1816808..00000000 --- a/YACReaderLibrary/server/controllers/templatecontroller.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/** - @file - @author Stefan Frings -*/ - -#include "templatecontroller.h" -#include "template.h" -#include "../static.h" - -TemplateController::TemplateController(){} - -void TemplateController::service(HttpRequest& request, HttpResponse& response) { - - response.setHeader("Content-Type", "text/html; charset=ISO-8859-1"); - - Template t=Static::templateLoader->getTemplate("demo",request.getHeader("Accept-Language")); - t.enableWarnings(); - t.setVariable("path",request.getPath()); - QMap headers=request.getHeaderMap(); - QMapIterator iterator(headers); - t.loop("header",headers.size()); - int i=0; - while (iterator.hasNext()) { - iterator.next(); - t.setVariable(QString("header%1.name").arg(i),QString(iterator.key())); - t.setVariable(QString("header%1.value").arg(i),QString(iterator.value())); - ++i; - } - - response.write(t.toLatin1(),true); -} diff --git a/YACReaderLibrary/server/controllers/templatecontroller.h b/YACReaderLibrary/server/controllers/templatecontroller.h deleted file mode 100644 index c5b0077d..00000000 --- a/YACReaderLibrary/server/controllers/templatecontroller.h +++ /dev/null @@ -1,30 +0,0 @@ -/** - @file - @author Stefan Frings -*/ - -#ifndef TEMPLATECONTROLLER_H -#define TEMPLATECONTROLLER_H - -#include "httprequest.h" -#include "httpresponse.h" -#include "httprequesthandler.h" - -/** - This controller generates a website using the template engine. - It generates a Latin1 (ISO-8859-1) encoded website from a UTF-8 encoded template file. -*/ - -class TemplateController : public HttpRequestHandler { - Q_OBJECT - Q_DISABLE_COPY(TemplateController); - public: - - /** Constructor */ - TemplateController(); - - /** Generates the response */ - void service(HttpRequest& request, HttpResponse& response); - }; - -#endif // TEMPLATECONTROLLER_H diff --git a/YACReaderLibrary/server/controllers/v1/comiccontroller.cpp b/YACReaderLibrary/server/controllers/v1/comiccontroller.cpp new file mode 100644 index 00000000..a5a50327 --- /dev/null +++ b/YACReaderLibrary/server/controllers/v1/comiccontroller.cpp @@ -0,0 +1,124 @@ +#include "comiccontroller.h" + +#include "db_helper.h" +#include "yacreader_libraries.h" +#include "yacreader_http_session.h" + +#include "template.h" +#include "../static.h" + +#include "comic_db.h" +#include "comic.h" + +#include "QsLog.h" + +#include + +ComicController::ComicController() {} + +void ComicController::service(HttpRequest& request, HttpResponse& response) +{ + HttpSession session=Static::sessionStore->getSession(request,response,false); + YACReaderHttpSession *ySession = Static::yacreaderSessionStore->getYACReaderSessionHttpSession(session.getId()); + + QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8(); + QStringList pathElements = path.split('/'); + qulonglong libraryId = pathElements.at(2).toLongLong(); + QString libraryName = DBHelper::getLibraryName(libraryId); + qulonglong comicId = pathElements.at(4).toULongLong(); + + bool remoteComic = path.endsWith("remote"); + + //TODO + //if(pathElements.size() == 6) + //{ + // QString action = pathElements.at(5); + // if(!action.isEmpty() && (action == "close")) + // { + // session.dismissCurrentComic(); + // response.write("",true); + // return; + // } + //} + + YACReaderLibraries libraries = DBHelper::getLibraries(); + + ComicDB comic = DBHelper::getComicInfo(libraryId, comicId); + + if(!remoteComic) + ySession->setDownloadedComic(comic.info.hash); + + Comic * comicFile = FactoryComic::newComic(libraries.getPath(libraryId)+comic.path); + + if(comicFile != NULL) + { + QThread * thread = NULL; + + thread = new QThread(); + + comicFile->moveToThread(thread); + + connect(comicFile, SIGNAL(errorOpening()), thread, SLOT(quit())); + connect(comicFile, SIGNAL(errorOpening(QString)), thread, SLOT(quit())); + connect(comicFile, SIGNAL(imagesLoaded()), thread, SLOT(quit())); + connect(thread, SIGNAL(started()), comicFile, SLOT(process())); + connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); + + comicFile->load(libraries.getPath(libraryId)+comic.path); + + if(thread != NULL) + thread->start(); + + if(remoteComic) + { + QLOG_TRACE() << "remote comic requested"; + ySession->setCurrentRemoteComic(comic.id, comicFile); + + } + else + { + QLOG_TRACE() << "comic requested"; + ySession->setCurrentComic(comic.id, comicFile); + } + + response.setHeader("Content-Type", "text/plain; charset=utf-8"); + //TODO this field is not used by the client! + response.write(QString("library:%1\r\n").arg(libraryName).toUtf8()); + response.write(QString("libraryId:%1\r\n").arg(libraryId).toUtf8()); + if(remoteComic) //send previous and next comics id + { + QList siblings = DBHelper::getFolderComicsFromLibrary(libraryId, comic.parentId, true); + bool found = false; + int i; + for(i = 0; i < siblings.length(); i++) + { + if (siblings.at(i)->id == comic.id) + { + found = true; + break; + } + } + if(found) + { + if(i>0) + response.write(QString("previousComic:%1\r\n").arg(siblings.at(i-1)->id).toUtf8()); + if(iid).toUtf8()); + } + else + { + //ERROR + } + qDeleteAll(siblings); + } + response.write(comic.toTXT().toUtf8(),true); + } + else + { + //delete comicFile; + response.setStatus(404,"not found"); + response.write("404 not found",true); + } + //response.write(t.toLatin1(),true); + +} diff --git a/YACReaderLibrary/server/controllers/comiccontroller.h b/YACReaderLibrary/server/controllers/v1/comiccontroller.h similarity index 100% rename from YACReaderLibrary/server/controllers/comiccontroller.h rename to YACReaderLibrary/server/controllers/v1/comiccontroller.h diff --git a/YACReaderLibrary/server/controllers/comicdownloadinfocontroller.cpp b/YACReaderLibrary/server/controllers/v1/comicdownloadinfocontroller.cpp similarity index 100% rename from YACReaderLibrary/server/controllers/comicdownloadinfocontroller.cpp rename to YACReaderLibrary/server/controllers/v1/comicdownloadinfocontroller.cpp diff --git a/YACReaderLibrary/server/controllers/comicdownloadinfocontroller.h b/YACReaderLibrary/server/controllers/v1/comicdownloadinfocontroller.h similarity index 100% rename from YACReaderLibrary/server/controllers/comicdownloadinfocontroller.h rename to YACReaderLibrary/server/controllers/v1/comicdownloadinfocontroller.h diff --git a/YACReaderLibrary/server/controllers/v1/covercontroller.cpp b/YACReaderLibrary/server/controllers/v1/covercontroller.cpp new file mode 100644 index 00000000..0c8dd31e --- /dev/null +++ b/YACReaderLibrary/server/controllers/v1/covercontroller.cpp @@ -0,0 +1,89 @@ +#include "covercontroller.h" +#include "db_helper.h" //get libraries +#include "yacreader_libraries.h" +#include "yacreader_http_session.h" + +#include "template.h" +#include "../static.h" + +CoverController::CoverController() {} + +void CoverController::service(HttpRequest& request, HttpResponse& response) +{ + HttpSession session=Static::sessionStore->getSession(request,response,false); + YACReaderHttpSession *ySession = Static::yacreaderSessionStore->getYACReaderSessionHttpSession(session.getId()); + + response.setHeader("Content-Type", "image/jpeg"); + response.setHeader("Connection","close"); + //response.setHeader("Content-Type", "plain/text; charset=ISO-8859-1"); + + YACReaderLibraries libraries = DBHelper::getLibraries(); + + QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8(); + QStringList pathElements = path.split('/'); + QString libraryName = DBHelper::getLibraryName(pathElements.at(2).toInt()); + QString fileName = pathElements.at(4); + + bool folderCover = request.getParameter("folderCover").length()>0; + + //response.writeText(path+"
"); + //response.writeText(libraryName+"
"); + //response.writeText(libraries.value(libraryName)+"/.yacreaderlibrary/covers/"+fileName+"
"); + + //QFile file(libraries.value(libraryName)+"/.yacreaderlibrary/covers/"+fileName); + //if (file.exists()) { + // if (file.open(QIODevice::ReadOnly)) + // { + // qDebug("StaticFileController: Open file %s",qPrintable(file.fileName())); + // // Return the file content, do not store in cache + // while (!file.atEnd() && !file.error()) { + // response.write(file.read(131072)); + // } + // } + + // file.close(); + //} + + QImage img(libraries.getPath(libraryName)+"/.yacreaderlibrary/covers/"+fileName); + if (!img.isNull()) { + + int width = 80, height = 120; + if(ySession->getDisplayType()=="@2x") + { + width = 160; + height = 240; + } + + if(float(img.width())/img.height() < 0.66666) + img = img.scaledToWidth(width,Qt::SmoothTransformation); + else + img = img.scaledToHeight(height,Qt::SmoothTransformation); + + QImage destImg(width,height,QImage::Format_RGB32); + destImg.fill(Qt::black); + QPainter p(&destImg); + + p.drawImage((width-img.width())/2,(height-img.height())/2,img); + + if(folderCover) + { + if(ySession->getDisplayType()=="@2x") + p.drawImage(0,0,QImage(":/images/f_overlayed_retina.png")); + else + p.drawImage(0,0,QImage(":/images/f_overlayed.png")); + } + + QByteArray ba; + QBuffer buffer(&ba); + buffer.open(QIODevice::WriteOnly); + destImg.save(&buffer, "JPG"); + response.write(ba,true); + } + //DONE else, hay que devolver un 404 + else + { + response.setStatus(404,"not found"); + response.write("404 not found",true); + } +} + diff --git a/YACReaderLibrary/server/controllers/covercontroller.h b/YACReaderLibrary/server/controllers/v1/covercontroller.h similarity index 100% rename from YACReaderLibrary/server/controllers/covercontroller.h rename to YACReaderLibrary/server/controllers/v1/covercontroller.h diff --git a/YACReaderLibrary/server/controllers/errorcontroller.cpp b/YACReaderLibrary/server/controllers/v1/errorcontroller.cpp similarity index 100% rename from YACReaderLibrary/server/controllers/errorcontroller.cpp rename to YACReaderLibrary/server/controllers/v1/errorcontroller.cpp diff --git a/YACReaderLibrary/server/controllers/errorcontroller.h b/YACReaderLibrary/server/controllers/v1/errorcontroller.h similarity index 100% rename from YACReaderLibrary/server/controllers/errorcontroller.h rename to YACReaderLibrary/server/controllers/v1/errorcontroller.h diff --git a/YACReaderLibrary/server/controllers/foldercontroller.cpp b/YACReaderLibrary/server/controllers/v1/foldercontroller.cpp similarity index 91% rename from YACReaderLibrary/server/controllers/foldercontroller.cpp rename to YACReaderLibrary/server/controllers/v1/foldercontroller.cpp index bfa90dfc..976a7f4c 100644 --- a/YACReaderLibrary/server/controllers/foldercontroller.cpp +++ b/YACReaderLibrary/server/controllers/v1/foldercontroller.cpp @@ -1,5 +1,7 @@ #include "foldercontroller.h" -#include "controllers/errorcontroller.h" +#include "controllers/v1/errorcontroller.h" + +#include "yacreader_http_session.h" #include "db_helper.h" //get libraries #include "comic_db.h" @@ -12,8 +14,6 @@ #include "qnaturalsorting.h" #include "yacreader_global.h" -#include "yacreader_http_session.h" - #include "QsLog.h" struct LibraryItemSorter @@ -42,7 +42,7 @@ void FolderController::service(HttpRequest& request, HttpResponse& response) //QString y = session.get("xxx").toString(); //response.writeText(QString("session xxx : %1
").arg(y)); - Template t = Static::templateLoader->getTemplate("folder_"+ySession->getDeviceType(),request.getHeader("Accept-Language")); + Template t=Static::templateLoader->getTemplate("folder_"+ySession->getDeviceType(),request.getHeader("Accept-Language")); t.enableWarnings(); QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8(); QStringList pathElements = path.split('/'); @@ -182,23 +182,14 @@ void FolderController::service(HttpRequest& request, HttpResponse& response) } else { - const Folder * folder = static_cast(item); - - if(folder->getFirstChildHash().length()>0) + QList children = DBHelper::getFolderComicsFromLibrary(libraryId, item->id); + if(children.length()>0) { - t.setVariable(QString("element%1.image.url").arg(i),QString("/library/%1/cover/%2.jpg?folderCover=true").arg(libraryId).arg(folder->getFirstChildHash())); + const ComicDB * comic = static_cast(children.at(0)); + t.setVariable(QString("element%1.image.url").arg(i),QString("/library/%1/cover/%2.jpg?folderCover=true").arg(libraryId).arg(comic->info.hash)); } else - { - QList children = DBHelper::getFolderComicsFromLibrary(libraryId, item->id); - if(children.length()>0) - { - const ComicDB * comic = static_cast(children.at(0)); - t.setVariable(QString("element%1.image.url").arg(i),QString("/library/%1/cover/%2.jpg?folderCover=true").arg(libraryId).arg(comic->info.hash)); - } - else - t.setVariable(QString("element%1.image.url").arg(i),"/images/f.png"); - } + 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(libraryId).arg(item->id))); @@ -342,4 +333,5 @@ void FolderController::service(HttpRequest& request, HttpResponse& response) t.setVariable("pages",QString("%1").arg(numPages)); response.write(t.toUtf8(), true); + } diff --git a/YACReaderLibrary/server/controllers/foldercontroller.h b/YACReaderLibrary/server/controllers/v1/foldercontroller.h similarity index 100% rename from YACReaderLibrary/server/controllers/foldercontroller.h rename to YACReaderLibrary/server/controllers/v1/foldercontroller.h diff --git a/YACReaderLibrary/server/controllers/folderinfocontroller.cpp b/YACReaderLibrary/server/controllers/v1/folderinfocontroller.cpp similarity index 85% rename from YACReaderLibrary/server/controllers/folderinfocontroller.cpp rename to YACReaderLibrary/server/controllers/v1/folderinfocontroller.cpp index b88ed0c2..595a8ca6 100644 --- a/YACReaderLibrary/server/controllers/folderinfocontroller.cpp +++ b/YACReaderLibrary/server/controllers/v1/folderinfocontroller.cpp @@ -15,10 +15,10 @@ void FolderInfoController::service(HttpRequest& request, HttpResponse& response) response.setHeader("Content-Type", "text/plain; charset=utf-8"); QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8(); - QStringList pathElements = path.split('/'); - int libraryId = pathElements.at(2).toInt(); - QString libraryName = DBHelper::getLibraryName(libraryId); - qulonglong parentId = pathElements.at(4).toULongLong(); + QStringList pathElements = path.split('/'); + int libraryId = pathElements.at(2).toInt(); + QString libraryName = DBHelper::getLibraryName(libraryId); + qulonglong parentId = pathElements.at(4).toULongLong(); serviceComics(libraryId, parentId, response); diff --git a/YACReaderLibrary/server/controllers/folderinfocontroller.h b/YACReaderLibrary/server/controllers/v1/folderinfocontroller.h similarity index 100% rename from YACReaderLibrary/server/controllers/folderinfocontroller.h rename to YACReaderLibrary/server/controllers/v1/folderinfocontroller.h diff --git a/YACReaderLibrary/server/controllers/v1/librariescontroller.cpp b/YACReaderLibrary/server/controllers/v1/librariescontroller.cpp new file mode 100644 index 00000000..d35fbec1 --- /dev/null +++ b/YACReaderLibrary/server/controllers/v1/librariescontroller.cpp @@ -0,0 +1,42 @@ +#include "librariescontroller.h" +#include "db_helper.h" //get libraries +#include "yacreader_libraries.h" +#include "yacreader_http_session.h" + +#include "template.h" +#include "../static.h" + +#include "QsLog.h" + +LibrariesController::LibrariesController() {} + +void LibrariesController::service(HttpRequest& request, HttpResponse& response) +{ + HttpSession session=Static::sessionStore->getSession(request,response,false); + YACReaderHttpSession *ySession = Static::yacreaderSessionStore->getYACReaderSessionHttpSession(session.getId()); + + response.setHeader("Content-Type", "text/html; charset=utf-8"); + response.setHeader("Connection","close"); + + ySession->clearNavigationPath(); + + Template t=Static::templateLoader->getTemplate("libraries_"+ySession->getDeviceType(),request.getHeader("Accept-Language")); + t.enableWarnings(); + + YACReaderLibraries libraries = DBHelper::getLibraries(); + QList names = DBHelper::getLibrariesNames(); + + t.loop("library",names.length()); + + int currentId = 0; + int i = 0; + foreach (QString name,names) { + currentId = libraries.getId(name); + t.setVariable(QString("library%1.name").arg(i),QString::number(currentId)); + t.setVariable(QString("library%1.label").arg(i),name); + i++; + } + + response.setStatus(200,"OK"); + response.write(t.toUtf8(),true); +} diff --git a/YACReaderLibrary/server/controllers/librariescontroller.h b/YACReaderLibrary/server/controllers/v1/librariescontroller.h similarity index 100% rename from YACReaderLibrary/server/controllers/librariescontroller.h rename to YACReaderLibrary/server/controllers/v1/librariescontroller.h diff --git a/YACReaderLibrary/server/controllers/v1/pagecontroller.cpp b/YACReaderLibrary/server/controllers/v1/pagecontroller.cpp new file mode 100644 index 00000000..a7cf13b6 --- /dev/null +++ b/YACReaderLibrary/server/controllers/v1/pagecontroller.cpp @@ -0,0 +1,99 @@ +#include "pagecontroller.h" + +#include "../static.h" + +#include "comic.h" +#include "comiccontroller.h" +#include "yacreader_http_session.h" + +#include +#include + +#include + +#include "db_helper.h" + +PageController::PageController() {} + +void PageController::service(HttpRequest& request, HttpResponse& response) +{ + HttpSession session=Static::sessionStore->getSession(request,response,false); + YACReaderHttpSession *ySession = Static::yacreaderSessionStore->getYACReaderSessionHttpSession(session.getId()); + + QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8(); + bool remote = path.endsWith("remote"); + + //QByteArray path2=request.getPath(); + //qDebug("PageController: request to -> %s ",path2.data()); + + QStringList pathElements = path.split('/'); + QString libraryName = DBHelper::getLibraryName(pathElements.at(2).toInt()); + qulonglong comicId = pathElements.at(4).toULongLong(); + unsigned int page = pathElements.at(6).toUInt(); + + //qDebug("lib name : %s",pathElements.at(2).data()); + + Comic * comicFile; + qulonglong currentComicId; + if(remote) + { + QLOG_TRACE() << "se recupera comic remoto para servir páginas"; + comicFile = ySession->getCurrentRemoteComic(); + currentComicId = ySession->getCurrentRemoteComicId(); + } + else + { + QLOG_TRACE() << "se recupera comic para servir páginas"; + comicFile = ySession->getCurrentComic(); + currentComicId = ySession->getCurrentComicId(); + } + + if(currentComicId != 0 && !QPointer(comicFile).isNull()) + { + if(comicId == currentComicId && page < comicFile->numPages()) + { + if(comicFile->pageIsLoaded(page)) + { + //qDebug("PageController: La página estaba cargada -> %s ",path.data()); + response.setHeader("Content-Type", "image/jpeg"); + response.setHeader("Transfer-Encoding","chunked"); + QByteArray pageData = comicFile->getRawPage(page); + QDataStream data(pageData); + char buffer[4096]; + while (!data.atEnd()) { + int len = data.readRawData(buffer,4096); + response.write(QByteArray(buffer,len)); + } + //response.write(pageData,true); + response.write(QByteArray(),true); + } + else + { + //qDebug("PageController: La página NO estaba cargada 404 -> %s ",path.data()); + response.setStatus(404,"not found"); //TODO qué mensaje enviar + response.write("404 not found",true); + } + } + else + { + if(comicId != currentComicId) + { + //delete comicFile; + if(remote) + ySession->dismissCurrentRemoteComic(); + else + ySession->dismissCurrentComic(); + } + response.setStatus(404,"not found"); //TODO qué mensaje enviar + response.write("404 not found",true); + } + } + else + { + response.setStatus(404,"not found"); + response.write("404 not found",true); + } + + //response.write(t.toLatin1(),true); + +} diff --git a/YACReaderLibrary/server/controllers/pagecontroller.h b/YACReaderLibrary/server/controllers/v1/pagecontroller.h similarity index 100% rename from YACReaderLibrary/server/controllers/pagecontroller.h rename to YACReaderLibrary/server/controllers/v1/pagecontroller.h diff --git a/YACReaderLibrary/server/controllers/sessioncontroller.cpp b/YACReaderLibrary/server/controllers/v1/sessioncontroller.cpp similarity index 100% rename from YACReaderLibrary/server/controllers/sessioncontroller.cpp rename to YACReaderLibrary/server/controllers/v1/sessioncontroller.cpp diff --git a/YACReaderLibrary/server/controllers/sessionmanager.h b/YACReaderLibrary/server/controllers/v1/sessionmanager.h similarity index 100% rename from YACReaderLibrary/server/controllers/sessionmanager.h rename to YACReaderLibrary/server/controllers/v1/sessionmanager.h diff --git a/YACReaderLibrary/server/controllers/synccontroller.cpp b/YACReaderLibrary/server/controllers/v1/synccontroller.cpp similarity index 100% rename from YACReaderLibrary/server/controllers/synccontroller.cpp rename to YACReaderLibrary/server/controllers/v1/synccontroller.cpp diff --git a/YACReaderLibrary/server/controllers/synccontroller.h b/YACReaderLibrary/server/controllers/v1/synccontroller.h similarity index 87% rename from YACReaderLibrary/server/controllers/synccontroller.h rename to YACReaderLibrary/server/controllers/v1/synccontroller.h index 6f6a5d76..b4d3cbe1 100644 --- a/YACReaderLibrary/server/controllers/synccontroller.h +++ b/YACReaderLibrary/server/controllers/v1/synccontroller.h @@ -9,7 +9,7 @@ class SyncController : public HttpRequestHandler { Q_OBJECT - Q_DISABLE_COPY(SyncController); + Q_DISABLE_COPY(SyncController) public: /** Constructor */ SyncController(); diff --git a/YACReaderLibrary/server/controllers/updatecomiccontroller.cpp b/YACReaderLibrary/server/controllers/v1/updatecomiccontroller.cpp similarity index 100% rename from YACReaderLibrary/server/controllers/updatecomiccontroller.cpp rename to YACReaderLibrary/server/controllers/v1/updatecomiccontroller.cpp diff --git a/YACReaderLibrary/server/controllers/updatecomiccontroller.h b/YACReaderLibrary/server/controllers/v1/updatecomiccontroller.h similarity index 100% rename from YACReaderLibrary/server/controllers/updatecomiccontroller.h rename to YACReaderLibrary/server/controllers/v1/updatecomiccontroller.h diff --git a/YACReaderLibrary/server/controllers/comiccontroller.cpp b/YACReaderLibrary/server/controllers/v2/comiccontroller_v2.cpp similarity index 89% rename from YACReaderLibrary/server/controllers/comiccontroller.cpp rename to YACReaderLibrary/server/controllers/v2/comiccontroller_v2.cpp index 7538067d..02ecc249 100644 --- a/YACReaderLibrary/server/controllers/comiccontroller.cpp +++ b/YACReaderLibrary/server/controllers/v2/comiccontroller_v2.cpp @@ -1,4 +1,4 @@ -#include "comiccontroller.h" +#include "comiccontroller_v2.h" #include "db_helper.h" #include "yacreader_libraries.h" @@ -14,18 +14,18 @@ #include -ComicController::ComicController() {} +ComicControllerV2::ComicControllerV2() {} -void ComicController::service(HttpRequest& request, HttpResponse& response) +void ComicControllerV2::service(HttpRequest& request, HttpResponse& response) { HttpSession session=Static::sessionStore->getSession(request,response,false); YACReaderHttpSession *ySession = Static::yacreaderSessionStore->getYACReaderSessionHttpSession(session.getId()); QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8(); QStringList pathElements = path.split('/'); - qulonglong libraryId = pathElements.at(2).toLongLong(); + qulonglong libraryId = pathElements.at(3).toLongLong(); QString libraryName = DBHelper::getLibraryName(libraryId); - qulonglong comicId = pathElements.at(4).toULongLong(); + qulonglong comicId = pathElements.at(5).toULongLong(); bool remoteComic = path.endsWith("remote"); diff --git a/YACReaderLibrary/server/controllers/v2/comiccontroller_v2.h b/YACReaderLibrary/server/controllers/v2/comiccontroller_v2.h new file mode 100644 index 00000000..9d896f8e --- /dev/null +++ b/YACReaderLibrary/server/controllers/v2/comiccontroller_v2.h @@ -0,0 +1,23 @@ +#ifndef COMICCONTROLLER_V2_H +#define COMICCONTROLLER_V2_H + +#include "httprequest.h" +#include "httpresponse.h" +#include "httprequesthandler.h" + +#include +class Comic; +class QString; + +class ComicControllerV2 : public HttpRequestHandler { + Q_OBJECT + Q_DISABLE_COPY(ComicControllerV2) +public: + /** Constructor */ + ComicControllerV2(); + + /** Generates the response */ + void service(HttpRequest& request, HttpResponse& response); +}; + +#endif // COMICCONTROLLER_H diff --git a/YACReaderLibrary/server/controllers/v2/comicdownloadinfocontroller_v2.cpp b/YACReaderLibrary/server/controllers/v2/comicdownloadinfocontroller_v2.cpp new file mode 100644 index 00000000..8c484033 --- /dev/null +++ b/YACReaderLibrary/server/controllers/v2/comicdownloadinfocontroller_v2.cpp @@ -0,0 +1,26 @@ +#include "comicdownloadinfocontroller_v2.h" + +#include "db_helper.h" +#include "yacreader_libraries.h" + +#include "comic_db.h" + +ComicDownloadInfoControllerV2::ComicDownloadInfoControllerV2() {} + + +void ComicDownloadInfoControllerV2::service(HttpRequest& request, HttpResponse& response) +{ + response.setHeader("Content-Type", "text/plain; charset=utf-8"); + + QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8(); + QStringList pathElements = path.split('/'); + + qulonglong libraryId = pathElements.at(3).toLongLong(); + qulonglong comicId = pathElements.at(5).toULongLong(); + + ComicDB comic = DBHelper::getComicInfo(libraryId, comicId); + + //TODO: check if the comic wasn't found; + response.write(QString("fileName:%1\r\n").arg(comic.getFileName()).toUtf8()); + response.write(QString("fileSize:%1\r\n").arg(comic.getFileSize()).toUtf8(),true); +} diff --git a/YACReaderLibrary/server/controllers/v2/comicdownloadinfocontroller_v2.h b/YACReaderLibrary/server/controllers/v2/comicdownloadinfocontroller_v2.h new file mode 100644 index 00000000..a85730c1 --- /dev/null +++ b/YACReaderLibrary/server/controllers/v2/comicdownloadinfocontroller_v2.h @@ -0,0 +1,19 @@ +#ifndef COMICDOWNLOADINFOCONTROLLER_V2_H +#define COMICDOWNLOADINFOCONTROLLER_V2_H + +#include "httprequest.h" +#include "httpresponse.h" +#include "httprequesthandler.h" + +class ComicDownloadInfoControllerV2 : public HttpRequestHandler { + Q_OBJECT + Q_DISABLE_COPY(ComicDownloadInfoControllerV2) +public: + /** Constructor **/ + ComicDownloadInfoControllerV2(); + + /** Generates the response */ + void service(HttpRequest& request, HttpResponse& response); +}; + +#endif // COMICDOWNLOADINFOCONTROLLER_H diff --git a/YACReaderLibrary/server/controllers/covercontroller.cpp b/YACReaderLibrary/server/controllers/v2/covercontroller_v2.cpp similarity index 87% rename from YACReaderLibrary/server/controllers/covercontroller.cpp rename to YACReaderLibrary/server/controllers/v2/covercontroller_v2.cpp index 09251bef..2652ce13 100644 --- a/YACReaderLibrary/server/controllers/covercontroller.cpp +++ b/YACReaderLibrary/server/controllers/v2/covercontroller_v2.cpp @@ -1,4 +1,4 @@ -#include "covercontroller.h" +#include "covercontroller_v2.h" #include "db_helper.h" //get libraries #include "yacreader_libraries.h" #include "yacreader_http_session.h" @@ -6,9 +6,9 @@ #include "template.h" #include "../static.h" -CoverController::CoverController() {} +CoverControllerV2::CoverControllerV2() {} -void CoverController::service(HttpRequest& request, HttpResponse& response) +void CoverControllerV2::service(HttpRequest& request, HttpResponse& response) { HttpSession session=Static::sessionStore->getSession(request,response,false); YACReaderHttpSession *ySession = Static::yacreaderSessionStore->getYACReaderSessionHttpSession(session.getId()); @@ -21,8 +21,8 @@ void CoverController::service(HttpRequest& request, HttpResponse& response) QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8(); QStringList pathElements = path.split('/'); - QString libraryName = DBHelper::getLibraryName(pathElements.at(2).toInt()); - QString fileName = pathElements.at(4); + QString libraryName = DBHelper::getLibraryName(pathElements.at(3).toInt()); + QString fileName = pathElements.at(5); bool folderCover = request.getParameter("folderCover").length()>0; diff --git a/YACReaderLibrary/server/controllers/v2/covercontroller_v2.h b/YACReaderLibrary/server/controllers/v2/covercontroller_v2.h new file mode 100644 index 00000000..f77128fd --- /dev/null +++ b/YACReaderLibrary/server/controllers/v2/covercontroller_v2.h @@ -0,0 +1,20 @@ +#ifndef COVERCONTROLLER_V2_H +#define COVERCONTROLLER_V2_H + +#include "httprequest.h" +#include "httpresponse.h" +#include "httprequesthandler.h" + +class CoverControllerV2 : public HttpRequestHandler { + Q_OBJECT + Q_DISABLE_COPY(CoverControllerV2) +public: + + /** Constructor */ + CoverControllerV2(); + + /** Generates the response */ + void service(HttpRequest& request, HttpResponse& response); +}; + +#endif // COVERCONTROLLER_H diff --git a/YACReaderLibrary/server/controllers/v2/errorcontroller_v2.cpp b/YACReaderLibrary/server/controllers/v2/errorcontroller_v2.cpp new file mode 100644 index 00000000..cf9ca36e --- /dev/null +++ b/YACReaderLibrary/server/controllers/v2/errorcontroller_v2.cpp @@ -0,0 +1,26 @@ +#include "errorcontroller_v2.h" + +#include "template.h" +#include "../static.h" + + +ErrorControllerV2::ErrorControllerV2(int errorCode) +:error(errorCode) +{} + +void ErrorControllerV2::service(HttpRequest& request, HttpResponse& response) +{ + Q_UNUSED(request) + switch(error) + { + case 300: + response.setStatus(300,"redirect"); + response.write(" ", true); + break; + case 404: + response.setStatus(404,"not found"); + response.write("404 not found",true); + break; + } + +} diff --git a/YACReaderLibrary/server/controllers/v2/errorcontroller_v2.h b/YACReaderLibrary/server/controllers/v2/errorcontroller_v2.h new file mode 100644 index 00000000..1f33a9e6 --- /dev/null +++ b/YACReaderLibrary/server/controllers/v2/errorcontroller_v2.h @@ -0,0 +1,22 @@ +#ifndef ERRORCONTROLLER_V2_H +#define ERRORCONTROLLER_V2_H + +#include "httprequest.h" +#include "httpresponse.h" +#include "httprequesthandler.h" + +class ErrorControllerV2 : public HttpRequestHandler { + Q_OBJECT + Q_DISABLE_COPY(ErrorControllerV2) +public: + + /** Constructor */ + ErrorControllerV2(int errorCode); + + /** Generates the response */ + void service(HttpRequest& request, HttpResponse& response); +private: + int error; +}; + +#endif // ERRORCONTROLLER_H diff --git a/YACReaderLibrary/server/controllers/favoritescontroller.cpp b/YACReaderLibrary/server/controllers/v2/favoritescontroller_v2.cpp similarity index 63% rename from YACReaderLibrary/server/controllers/favoritescontroller.cpp rename to YACReaderLibrary/server/controllers/v2/favoritescontroller_v2.cpp index dbb44556..7c61f415 100644 --- a/YACReaderLibrary/server/controllers/favoritescontroller.cpp +++ b/YACReaderLibrary/server/controllers/v2/favoritescontroller_v2.cpp @@ -1,26 +1,26 @@ -#include "favoritescontroller.h" +#include "favoritescontroller_v2.h" #include "db_helper.h" #include "comic_db.h" #include "yacreader_server_data_helper.h" -FavoritesController::FavoritesController() {} +FavoritesControllerV2::FavoritesControllerV2() {} -void FavoritesController::service(HttpRequest &request, HttpResponse &response) +void FavoritesControllerV2::service(HttpRequest &request, HttpResponse &response) { response.setHeader("Content-Type", "text/plain; charset=utf-8"); QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8(); QStringList pathElements = path.split('/'); - int libraryId = pathElements.at(2).toInt(); + int libraryId = pathElements.at(3).toInt(); serviceContent(libraryId, response); response.write("",true); } -void FavoritesController::serviceContent(const int library, HttpResponse &response) +void FavoritesControllerV2::serviceContent(const int library, HttpResponse &response) { QList tagComics = DBHelper::getFavorites(library); diff --git a/YACReaderLibrary/server/controllers/favoritescontroller.h b/YACReaderLibrary/server/controllers/v2/favoritescontroller_v2.h similarity index 56% rename from YACReaderLibrary/server/controllers/favoritescontroller.h rename to YACReaderLibrary/server/controllers/v2/favoritescontroller_v2.h index ca103950..8661495c 100644 --- a/YACReaderLibrary/server/controllers/favoritescontroller.h +++ b/YACReaderLibrary/server/controllers/v2/favoritescontroller_v2.h @@ -1,15 +1,15 @@ -#ifndef FAVORITESCONTROLLER_H -#define FAVORITESCONTROLLER_H +#ifndef FAVORITESCONTROLLER_V2_H +#define FAVORITESCONTROLLER_V2_H #include "httprequest.h" #include "httpresponse.h" #include "httprequesthandler.h" -class FavoritesController : public HttpRequestHandler { +class FavoritesControllerV2 : public HttpRequestHandler { Q_OBJECT - Q_DISABLE_COPY(FavoritesController) + Q_DISABLE_COPY(FavoritesControllerV2) public: - FavoritesController(); + FavoritesControllerV2(); void service(HttpRequest& request, HttpResponse& response); diff --git a/YACReaderLibrary/server/controllers/foldercontentcontroller.cpp b/YACReaderLibrary/server/controllers/v2/foldercontentcontroller_v2.cpp similarity index 78% rename from YACReaderLibrary/server/controllers/foldercontentcontroller.cpp rename to YACReaderLibrary/server/controllers/v2/foldercontentcontroller_v2.cpp index 3c81e7f0..23a18b5d 100644 --- a/YACReaderLibrary/server/controllers/foldercontentcontroller.cpp +++ b/YACReaderLibrary/server/controllers/v2/foldercontentcontroller_v2.cpp @@ -1,4 +1,4 @@ -#include "foldercontentcontroller.h" +#include "foldercontentcontroller_v2.h" #include @@ -21,23 +21,23 @@ struct LibraryItemSorter } }; -FolderContentController::FolderContentController() {} +FolderContentControllerV2::FolderContentControllerV2() {} -void FolderContentController::service(HttpRequest& request, HttpResponse& response) +void FolderContentControllerV2::service(HttpRequest& request, HttpResponse& response) { response.setHeader("Content-Type", "text/plain; charset=utf-8"); QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8(); QStringList pathElements = path.split('/'); - int libraryId = pathElements.at(2).toInt(); - qulonglong parentId = pathElements.at(4).toULongLong(); + int libraryId = pathElements.at(3).toInt(); + qulonglong parentId = pathElements.at(5).toULongLong(); serviceContent(libraryId, parentId, response); response.write("",true); } -void FolderContentController::serviceContent(const int &library, const qulonglong &folderId, HttpResponse &response) +void FolderContentControllerV2::serviceContent(const int &library, const qulonglong &folderId, HttpResponse &response) { //clock_t begin = clock(); diff --git a/YACReaderLibrary/server/controllers/foldercontentcontroller.h b/YACReaderLibrary/server/controllers/v2/foldercontentcontroller_v2.h similarity index 60% rename from YACReaderLibrary/server/controllers/foldercontentcontroller.h rename to YACReaderLibrary/server/controllers/v2/foldercontentcontroller_v2.h index aa986042..23401b79 100644 --- a/YACReaderLibrary/server/controllers/foldercontentcontroller.h +++ b/YACReaderLibrary/server/controllers/v2/foldercontentcontroller_v2.h @@ -1,16 +1,16 @@ -#ifndef FOLDERCONTENTCONTROLLER_H -#define FOLDERCONTENTCONTROLLER_H +#ifndef FOLDERCONTENTCONTROLLER_V2_H +#define FOLDERCONTENTCONTROLLER_V2_H #include "httprequest.h" #include "httpresponse.h" #include "httprequesthandler.h" -class FolderContentController : public HttpRequestHandler { +class FolderContentControllerV2 : public HttpRequestHandler { Q_OBJECT - Q_DISABLE_COPY(FolderContentController); + Q_DISABLE_COPY(FolderContentControllerV2) public: /** Constructor */ - FolderContentController(); + FolderContentControllerV2(); /** Generates the response */ void service(HttpRequest& request, HttpResponse& response); diff --git a/YACReaderLibrary/server/controllers/v2/folderinfocontroller_v2.cpp b/YACReaderLibrary/server/controllers/v2/folderinfocontroller_v2.cpp new file mode 100644 index 00000000..2eb26348 --- /dev/null +++ b/YACReaderLibrary/server/controllers/v2/folderinfocontroller_v2.cpp @@ -0,0 +1,48 @@ +#include "folderinfocontroller_v2.h" +#include "db_helper.h" //get libraries + +#include "folder.h" +#include "comic_db.h" + +#include "template.h" +#include "../static.h" + + +FolderInfoControllerV2::FolderInfoControllerV2() {} + +void FolderInfoControllerV2::service(HttpRequest& request, HttpResponse& response) +{ + response.setHeader("Content-Type", "text/plain; charset=utf-8"); + + QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8(); + QStringList pathElements = path.split('/'); + int libraryId = pathElements.at(3).toInt(); + QString libraryName = DBHelper::getLibraryName(libraryId); + qulonglong parentId = pathElements.at(5).toULongLong(); + + serviceComics(libraryId, parentId, response); + + response.write("",true); +} + +void FolderInfoControllerV2::serviceComics(const int &library, const qulonglong &folderId, HttpResponse &response) +{ + QList folderContent = DBHelper::getFolderSubfoldersFromLibrary(library,folderId); + QList folderComics = DBHelper::getFolderComicsFromLibrary(library,folderId); + + ComicDB * currentComic; + for(QList::const_iterator itr = folderComics.constBegin();itr!=folderComics.constEnd();itr++) + { + currentComic = (ComicDB *)(*itr); + response.write(QString("/library/%1/comic/%2:%3:%4\r\n").arg(library).arg(currentComic->id).arg(currentComic->getFileName()).arg(currentComic->getFileSize()).toUtf8()); + delete currentComic; + } + + Folder * currentFolder; + for(QList::const_iterator itr = folderContent.constBegin();itr!=folderContent.constEnd();itr++) + { + currentFolder = (Folder *)(*itr); + serviceComics(library, currentFolder->id, response); + delete currentFolder; + } +} diff --git a/YACReaderLibrary/server/controllers/v2/folderinfocontroller_v2.h b/YACReaderLibrary/server/controllers/v2/folderinfocontroller_v2.h new file mode 100644 index 00000000..94907ca3 --- /dev/null +++ b/YACReaderLibrary/server/controllers/v2/folderinfocontroller_v2.h @@ -0,0 +1,23 @@ +#ifndef FOLDERINFOCONTROLLER_V2_H +#define FOLDERINFOCONTROLLER_V2_H + +#include "httprequest.h" +#include "httpresponse.h" +#include "httprequesthandler.h" + +class FolderInfoControllerV2 : public HttpRequestHandler { + Q_OBJECT + Q_DISABLE_COPY(FolderInfoControllerV2) +public: + + /** Constructor */ + FolderInfoControllerV2(); + + /** Generates the response */ + void service(HttpRequest& request, HttpResponse& response); + +private: + void serviceComics(const int &library, const qulonglong & folderId, HttpResponse& response); +}; + +#endif // FOLDERINFOCONTROLLER_H diff --git a/YACReaderLibrary/server/controllers/librariescontroller.cpp b/YACReaderLibrary/server/controllers/v2/librariescontroller_v2.cpp similarity index 84% rename from YACReaderLibrary/server/controllers/librariescontroller.cpp rename to YACReaderLibrary/server/controllers/v2/librariescontroller_v2.cpp index 547fb578..87a71ec8 100644 --- a/YACReaderLibrary/server/controllers/librariescontroller.cpp +++ b/YACReaderLibrary/server/controllers/v2/librariescontroller_v2.cpp @@ -1,4 +1,4 @@ -#include "librariescontroller.h" +#include "librariescontroller_v2.h" #include "db_helper.h" //get libraries #include "yacreader_libraries.h" #include "yacreader_http_session.h" @@ -8,9 +8,9 @@ #include "QsLog.h" -LibrariesController::LibrariesController() {} +LibrariesControllerV2::LibrariesControllerV2() {} -void LibrariesController::service(HttpRequest& request, HttpResponse& response) +void LibrariesControllerV2::service(HttpRequest& request, HttpResponse& response) { HttpSession session=Static::sessionStore->getSession(request,response,false); YACReaderHttpSession *ySession = Static::yacreaderSessionStore->getYACReaderSessionHttpSession(session.getId()); diff --git a/YACReaderLibrary/server/controllers/formcontroller.h b/YACReaderLibrary/server/controllers/v2/librariescontroller_v2.h similarity index 54% rename from YACReaderLibrary/server/controllers/formcontroller.h rename to YACReaderLibrary/server/controllers/v2/librariescontroller_v2.h index 5ae709a8..4c21f1c2 100644 --- a/YACReaderLibrary/server/controllers/formcontroller.h +++ b/YACReaderLibrary/server/controllers/v2/librariescontroller_v2.h @@ -1,10 +1,5 @@ -/** - @file - @author Stefan Frings -*/ - -#ifndef FORMCONTROLLER_H -#define FORMCONTROLLER_H +#ifndef LIBRARIESCONTROLLER_V2_H +#define LIBRARIESCONTROLLER_V2_H #include "httprequest.h" #include "httpresponse.h" @@ -15,16 +10,16 @@ */ -class FormController : public HttpRequestHandler { +class LibrariesControllerV2 : public HttpRequestHandler { Q_OBJECT - Q_DISABLE_COPY(FormController); + Q_DISABLE_COPY(LibrariesControllerV2) public: /** Constructor */ - FormController(); + LibrariesControllerV2(); /** Generates the response */ void service(HttpRequest& request, HttpResponse& response); }; -#endif // FORMCONTROLLER_H +#endif // LIBRARIESCONTROLLER_H diff --git a/YACReaderLibrary/server/controllers/pagecontroller.cpp b/YACReaderLibrary/server/controllers/v2/pagecontroller_v2.cpp similarity index 88% rename from YACReaderLibrary/server/controllers/pagecontroller.cpp rename to YACReaderLibrary/server/controllers/v2/pagecontroller_v2.cpp index b0af2613..668f352b 100644 --- a/YACReaderLibrary/server/controllers/pagecontroller.cpp +++ b/YACReaderLibrary/server/controllers/v2/pagecontroller_v2.cpp @@ -1,4 +1,4 @@ -#include "pagecontroller.h" +#include "pagecontroller_v2.h" #include "../static.h" @@ -13,9 +13,9 @@ #include "db_helper.h" -PageController::PageController() {} +PageControllerV2::PageControllerV2() {} -void PageController::service(HttpRequest& request, HttpResponse& response) +void PageControllerV2::service(HttpRequest& request, HttpResponse& response) { HttpSession session=Static::sessionStore->getSession(request,response,false); YACReaderHttpSession *ySession = Static::yacreaderSessionStore->getYACReaderSessionHttpSession(session.getId()); @@ -28,8 +28,8 @@ void PageController::service(HttpRequest& request, HttpResponse& response) QStringList pathElements = path.split('/'); QString libraryName = DBHelper::getLibraryName(pathElements.at(2).toInt()); - qulonglong comicId = pathElements.at(4).toULongLong(); - unsigned int page = pathElements.at(6).toUInt(); + qulonglong comicId = pathElements.at(5).toULongLong(); + unsigned int page = pathElements.at(7).toUInt(); //qDebug("lib name : %s",pathElements.at(2).data()); diff --git a/YACReaderLibrary/server/controllers/v2/pagecontroller_v2.h b/YACReaderLibrary/server/controllers/v2/pagecontroller_v2.h new file mode 100644 index 00000000..9bbb9ed1 --- /dev/null +++ b/YACReaderLibrary/server/controllers/v2/pagecontroller_v2.h @@ -0,0 +1,20 @@ +#ifndef PAGECONTROLLER_V2_H +#define PAGECONTROLLER_V2_H + +#include "httprequest.h" +#include "httpresponse.h" +#include "httprequesthandler.h" + +class PageControllerV2 : public HttpRequestHandler { + Q_OBJECT + Q_DISABLE_COPY(PageControllerV2) +public: + + /** Constructor */ + PageControllerV2(); + + /** Generates the response */ + void service(HttpRequest& request, HttpResponse& response); +}; + +#endif // PAGECONTROLLER_H diff --git a/YACReaderLibrary/server/controllers/readingcomicscontroller.cpp b/YACReaderLibrary/server/controllers/v2/readingcomicscontroller_v2.cpp similarity index 62% rename from YACReaderLibrary/server/controllers/readingcomicscontroller.cpp rename to YACReaderLibrary/server/controllers/v2/readingcomicscontroller_v2.cpp index 78e22073..3fc46ace 100644 --- a/YACReaderLibrary/server/controllers/readingcomicscontroller.cpp +++ b/YACReaderLibrary/server/controllers/v2/readingcomicscontroller_v2.cpp @@ -1,29 +1,29 @@ -#include "readingcomicscontroller.h" +#include "readingcomicscontroller_v2.h" #include "db_helper.h" #include "comic_db.h" #include "yacreader_server_data_helper.h" -ReadingComicsController::ReadingComicsController() +ReadingComicsControllerV2::ReadingComicsControllerV2() { } -void ReadingComicsController::service(HttpRequest &request, HttpResponse &response) +void ReadingComicsControllerV2::service(HttpRequest &request, HttpResponse &response) { response.setHeader("Content-Type", "text/plain; charset=utf-8"); QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8(); QStringList pathElements = path.split('/'); - int libraryId = pathElements.at(2).toInt(); + int libraryId = pathElements.at(3).toInt(); serviceContent(libraryId, response); response.write("",true); } -void ReadingComicsController::serviceContent(const int &library, HttpResponse &response) +void ReadingComicsControllerV2::serviceContent(const int &library, HttpResponse &response) { QList readingComics = DBHelper::getReading(library); diff --git a/YACReaderLibrary/server/controllers/readingcomicscontroller.h b/YACReaderLibrary/server/controllers/v2/readingcomicscontroller_v2.h similarity index 55% rename from YACReaderLibrary/server/controllers/readingcomicscontroller.h rename to YACReaderLibrary/server/controllers/v2/readingcomicscontroller_v2.h index da20aab5..68998ad6 100644 --- a/YACReaderLibrary/server/controllers/readingcomicscontroller.h +++ b/YACReaderLibrary/server/controllers/v2/readingcomicscontroller_v2.h @@ -1,15 +1,15 @@ -#ifndef READINGCOMICSCONTROLLER_H -#define READINGCOMICSCONTROLLER_H +#ifndef READINGCOMICSCONTROLLER_V2_H +#define READINGCOMICSCONTROLLER_V2_H #include "httprequest.h" #include "httpresponse.h" #include "httprequesthandler.h" -class ReadingComicsController : public HttpRequestHandler { +class ReadingComicsControllerV2 : public HttpRequestHandler { Q_OBJECT - Q_DISABLE_COPY(ReadingComicsController) + Q_DISABLE_COPY(ReadingComicsControllerV2) public: - ReadingComicsController(); + ReadingComicsControllerV2(); void service(HttpRequest& request, HttpResponse& response); diff --git a/YACReaderLibrary/server/controllers/readinglistcontentcontroller.cpp b/YACReaderLibrary/server/controllers/v2/readinglistcontentcontroller_v2.cpp similarity index 58% rename from YACReaderLibrary/server/controllers/readinglistcontentcontroller.cpp rename to YACReaderLibrary/server/controllers/v2/readinglistcontentcontroller_v2.cpp index 55ee65c3..ee4f8245 100644 --- a/YACReaderLibrary/server/controllers/readinglistcontentcontroller.cpp +++ b/YACReaderLibrary/server/controllers/v2/readinglistcontentcontroller_v2.cpp @@ -1,30 +1,30 @@ -#include "readinglistcontentcontroller.h" +#include "readinglistcontentcontroller_v2.h" #include "db_helper.h" #include "comic_db.h" #include "yacreader_server_data_helper.h" -ReadingListContentController::ReadingListContentController() +ReadingListContentControllerV2::ReadingListContentControllerV2() { } -void ReadingListContentController::service(HttpRequest &request, HttpResponse &response) +void ReadingListContentControllerV2::service(HttpRequest &request, HttpResponse &response) { response.setHeader("Content-Type", "text/plain; charset=utf-8"); QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8(); QStringList pathElements = path.split('/'); - int libraryId = pathElements.at(2).toInt(); - qulonglong readingListId = pathElements.at(4).toULongLong(); + int libraryId = pathElements.at(3).toInt(); + qulonglong readingListId = pathElements.at(5).toULongLong(); serviceContent(libraryId, readingListId, response); response.write("",true); } -void ReadingListContentController::serviceContent(const int &library, const qulonglong &readingListId, HttpResponse &response) +void ReadingListContentControllerV2::serviceContent(const int &library, const qulonglong &readingListId, HttpResponse &response) { QList comics = DBHelper::getReadingListFullContent(library, readingListId); diff --git a/YACReaderLibrary/server/controllers/readinglistcontentcontroller.h b/YACReaderLibrary/server/controllers/v2/readinglistcontentcontroller_v2.h similarity index 57% rename from YACReaderLibrary/server/controllers/readinglistcontentcontroller.h rename to YACReaderLibrary/server/controllers/v2/readinglistcontentcontroller_v2.h index 88ec4a28..e2fc4282 100644 --- a/YACReaderLibrary/server/controllers/readinglistcontentcontroller.h +++ b/YACReaderLibrary/server/controllers/v2/readinglistcontentcontroller_v2.h @@ -1,15 +1,15 @@ -#ifndef READINGLISTCONTENTCONTROLLER_H -#define READINGLISTCONTENTCONTROLLER_H +#ifndef READINGLISTCONTENTCONTROLLER_V2_H +#define READINGLISTCONTENTCONTROLLER_V2_H #include "httprequest.h" #include "httpresponse.h" #include "httprequesthandler.h" -class ReadingListContentController : public HttpRequestHandler { +class ReadingListContentControllerV2 : public HttpRequestHandler { Q_OBJECT - Q_DISABLE_COPY(ReadingListContentController) + Q_DISABLE_COPY(ReadingListContentControllerV2) public: - ReadingListContentController(); + ReadingListContentControllerV2(); void service(HttpRequest& request, HttpResponse& response); diff --git a/YACReaderLibrary/server/controllers/readinglistscontroller.cpp b/YACReaderLibrary/server/controllers/v2/readinglistscontroller_v2.cpp similarity index 62% rename from YACReaderLibrary/server/controllers/readinglistscontroller.cpp rename to YACReaderLibrary/server/controllers/v2/readinglistscontroller_v2.cpp index 0c76b314..24142ff7 100644 --- a/YACReaderLibrary/server/controllers/readinglistscontroller.cpp +++ b/YACReaderLibrary/server/controllers/v2/readinglistscontroller_v2.cpp @@ -1,27 +1,27 @@ -#include "readinglistscontroller.h" +#include "readinglistscontroller_v2.h" #include "db_helper.h" #include "reading_list.h" -ReadingListsController::ReadingListsController() +ReadingListsControllerV2::ReadingListsControllerV2() { } -void ReadingListsController::service(HttpRequest &request, HttpResponse &response) +void ReadingListsControllerV2::service(HttpRequest &request, HttpResponse &response) { response.setHeader("Content-Type", "text/plain; charset=utf-8"); QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8(); QStringList pathElements = path.split('/'); - int libraryId = pathElements.at(2).toInt(); + int libraryId = pathElements.at(3).toInt(); serviceContent(libraryId, response); response.write("",true); } -void ReadingListsController::serviceContent(const int library, HttpResponse &response) +void ReadingListsControllerV2::serviceContent(const int library, HttpResponse &response) { QList readingLists = DBHelper::getReadingLists(library); diff --git a/YACReaderLibrary/server/controllers/readinglistscontroller.h b/YACReaderLibrary/server/controllers/v2/readinglistscontroller_v2.h similarity index 55% rename from YACReaderLibrary/server/controllers/readinglistscontroller.h rename to YACReaderLibrary/server/controllers/v2/readinglistscontroller_v2.h index 5bb3ba27..23443e07 100644 --- a/YACReaderLibrary/server/controllers/readinglistscontroller.h +++ b/YACReaderLibrary/server/controllers/v2/readinglistscontroller_v2.h @@ -1,15 +1,15 @@ -#ifndef READINGLISTSCONTROLLER_H -#define READINGLISTSCONTROLLER_H +#ifndef READINGLISTSCONTROLLER_V2_H +#define READINGLISTSCONTROLLER_V2_H #include "httprequest.h" #include "httpresponse.h" #include "httprequesthandler.h" -class ReadingListsController : public HttpRequestHandler { +class ReadingListsControllerV2 : public HttpRequestHandler { Q_OBJECT - Q_DISABLE_COPY(ReadingListsController) + Q_DISABLE_COPY(ReadingListsControllerV2) public: - ReadingListsController(); + ReadingListsControllerV2(); void service(HttpRequest& request, HttpResponse& response); diff --git a/YACReaderLibrary/server/controllers/v2/synccontroller_v2.cpp b/YACReaderLibrary/server/controllers/v2/synccontroller_v2.cpp new file mode 100644 index 00000000..1f38a785 --- /dev/null +++ b/YACReaderLibrary/server/controllers/v2/synccontroller_v2.cpp @@ -0,0 +1,64 @@ +#include "synccontroller_v2.h" + +#include "QsLog.h" +#include + +#include "comic_db.h" +#include "db_helper.h" + +SyncControllerV2::SyncControllerV2() +{ + +} + +void SyncControllerV2::service(HttpRequest &request, HttpResponse &response) +{ + QString postData = QString::fromUtf8(request.getBody()); + + QLOG_TRACE() << "POST DATA: " << postData; + + if(postData.length()>0) { + QList data = postData.split("\n"); + + qulonglong libraryId; + qulonglong comicId; + int currentPage; + int currentRating; + QString hash; + foreach(QString comicInfo, data) + { + QList comicInfoProgress = comicInfo.split("\t"); + + if(comicInfoProgress.length() == 4 || comicInfoProgress.length() == 5) + { + libraryId = comicInfoProgress.at(0).toULongLong(); + comicId = comicInfoProgress.at(1).toULongLong(); + hash = comicInfoProgress.at(2); + currentPage = comicInfoProgress.at(3).toInt(); + + ComicInfo info; + info.currentPage = currentPage; + info.hash = hash; //TODO remove the hash check and add UUIDs for libraries + info.id = comicId; + + //Client 2.1+ version + if(comicInfoProgress.length() > 4) + { + currentRating = comicInfoProgress.at(4).toInt(); + info.rating = currentRating; + } + + DBHelper::updateFromRemoteClient(libraryId,info); + } + } + } + else + { + response.setStatus(412,"No comic info received"); + response.write("",true); + return; + } + + response.write("OK",true); +} + diff --git a/YACReaderLibrary/server/controllers/v2/synccontroller_v2.h b/YACReaderLibrary/server/controllers/v2/synccontroller_v2.h new file mode 100644 index 00000000..4a22e511 --- /dev/null +++ b/YACReaderLibrary/server/controllers/v2/synccontroller_v2.h @@ -0,0 +1,21 @@ +#ifndef SYNCCONTROLLER_V2_H +#define SYNCCONTROLLER_V2_H + +#include + +#include "httprequest.h" +#include "httpresponse.h" +#include "httprequesthandler.h" + +class SyncControllerV2 : public HttpRequestHandler { + Q_OBJECT + Q_DISABLE_COPY(SyncControllerV2) +public: + /** Constructor */ + SyncControllerV2(); + + /** Generates the response */ + void service(HttpRequest& request, HttpResponse& response); +}; + +#endif // SYNCCONTROLLER_H diff --git a/YACReaderLibrary/server/controllers/tagcontentcontroller.cpp b/YACReaderLibrary/server/controllers/v2/tagcontentcontroller_v2.cpp similarity index 59% rename from YACReaderLibrary/server/controllers/tagcontentcontroller.cpp rename to YACReaderLibrary/server/controllers/v2/tagcontentcontroller_v2.cpp index 6f077b8f..029bbb40 100644 --- a/YACReaderLibrary/server/controllers/tagcontentcontroller.cpp +++ b/YACReaderLibrary/server/controllers/v2/tagcontentcontroller_v2.cpp @@ -1,4 +1,4 @@ -#include "tagcontentcontroller.h" +#include "tagcontentcontroller_v2.h" #include "db_helper.h" #include "comic_db.h" @@ -7,26 +7,26 @@ #include -TagContentController::TagContentController() +TagContentControllerV2::TagContentControllerV2() { } -void TagContentController::service(HttpRequest &request, HttpResponse &response) +void TagContentControllerV2::service(HttpRequest &request, HttpResponse &response) { response.setHeader("Content-Type", "text/plain; charset=utf-8"); QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8(); QStringList pathElements = path.split('/'); - int libraryId = pathElements.at(2).toInt(); - qulonglong tagId = pathElements.at(4).toULongLong(); + int libraryId = pathElements.at(3).toInt(); + qulonglong tagId = pathElements.at(5).toULongLong(); serviceContent(libraryId, tagId, response); response.write("",true); } -void TagContentController::serviceContent(const int &library, const qulonglong &tagId, HttpResponse &response) +void TagContentControllerV2::serviceContent(const int &library, const qulonglong &tagId, HttpResponse &response) { QList tagComics = DBHelper::getLabelComics(library, tagId); diff --git a/YACReaderLibrary/server/controllers/tagcontentcontroller.h b/YACReaderLibrary/server/controllers/v2/tagcontentcontroller_v2.h similarity index 62% rename from YACReaderLibrary/server/controllers/tagcontentcontroller.h rename to YACReaderLibrary/server/controllers/v2/tagcontentcontroller_v2.h index ab43646a..c47b350a 100644 --- a/YACReaderLibrary/server/controllers/tagcontentcontroller.h +++ b/YACReaderLibrary/server/controllers/v2/tagcontentcontroller_v2.h @@ -1,16 +1,16 @@ -#ifndef TAGCONTENTCONTROLLER_H -#define TAGCONTENTCONTROLLER_H +#ifndef TAGCONTENTCONTROLLER_V2_H +#define TAGCONTENTCONTROLLER_V2_H #include "httprequest.h" #include "httpresponse.h" #include "httprequesthandler.h" -class TagContentController : public HttpRequestHandler { +class TagContentControllerV2 : public HttpRequestHandler { Q_OBJECT - Q_DISABLE_COPY(TagContentController); + Q_DISABLE_COPY(TagContentControllerV2) public: /** Constructor */ - TagContentController(); + TagContentControllerV2(); /** Generates the response */ void service(HttpRequest& request, HttpResponse& response); diff --git a/YACReaderLibrary/server/controllers/tagscontroller.cpp b/YACReaderLibrary/server/controllers/v2/tagscontroller_v2.cpp similarity index 74% rename from YACReaderLibrary/server/controllers/tagscontroller.cpp rename to YACReaderLibrary/server/controllers/v2/tagscontroller_v2.cpp index eecaa819..6584bbad 100644 --- a/YACReaderLibrary/server/controllers/tagscontroller.cpp +++ b/YACReaderLibrary/server/controllers/v2/tagscontroller_v2.cpp @@ -1,4 +1,4 @@ -#include "tagscontroller.h" +#include "tagscontroller_v2.h" #include "db_helper.h" #include "yacreader_libraries.h" @@ -9,15 +9,15 @@ #include "QsLog.h" -TagsController::TagsController() {} +TagsControllerV2::TagsControllerV2() {} -void TagsController::service(HttpRequest& request, HttpResponse& response) +void TagsControllerV2::service(HttpRequest& request, HttpResponse& response) { response.setHeader("Content-Type", "text/plain; charset=utf-8"); QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8(); QStringList pathElements = path.split('/'); - int libraryId = pathElements.at(2).toInt(); + int libraryId = pathElements.at(3).toInt(); QList