From d584fc2879162bb19d76554862ad6a20452ed2cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Wed, 30 Jul 2014 18:28:01 +0200 Subject: [PATCH] added sync back reading progress for remote reading added covers to remote folders (it could cause performance issues) added read next/previous to remote reading --- YACReaderLibrary/YACReaderLibrary.pro | 3 +- YACReaderLibrary/db_helper.cpp | 16 ++++++ YACReaderLibrary/db_helper.h | 1 + YACReaderLibrary/images.qrc | 2 + .../server/controllers/comiccontroller.cpp | 2 +- .../server/controllers/covercontroller.cpp | 10 ++++ .../server/controllers/foldercontroller.cpp | 12 ++++- .../controllers/updatecomiccontroller.cpp | 46 ++++++++++++++++++ .../controllers/updatecomiccontroller.h | 22 +++++++++ YACReaderLibrary/server/requestmapper.cpp | 8 ++- YACReaderLibrary/server/server.pri | 6 ++- images/f.png | Bin 0 -> 710 bytes images/f_retina.png | Bin 0 -> 1371 bytes 13 files changed, 120 insertions(+), 8 deletions(-) create mode 100644 YACReaderLibrary/server/controllers/updatecomiccontroller.cpp create mode 100644 YACReaderLibrary/server/controllers/updatecomiccontroller.h create mode 100644 images/f.png create mode 100644 images/f_retina.png diff --git a/YACReaderLibrary/YACReaderLibrary.pro b/YACReaderLibrary/YACReaderLibrary.pro index a97ade55..2ed81bf9 100644 --- a/YACReaderLibrary/YACReaderLibrary.pro +++ b/YACReaderLibrary/YACReaderLibrary.pro @@ -28,8 +28,7 @@ LIBS += -lpoppler-qt4 INCLUDEPATH += ../dependencies/poppler/include/qt4 } -QMAKE_CXXFLAGS_RELEASE += /MP /Ob2 /Oi /Ot /GT /GL -QMAKE_LFLAGS_RELEASE += /LTCG + CONFIG -= embed_manifest_exe } diff --git a/YACReaderLibrary/db_helper.cpp b/YACReaderLibrary/db_helper.cpp index 648477d4..eda9d1bf 100644 --- a/YACReaderLibrary/db_helper.cpp +++ b/YACReaderLibrary/db_helper.cpp @@ -22,6 +22,7 @@ #include "qnaturalsorting.h" +#include "QsLog.h" //server YACReaderLibraries DBHelper::getLibraries() @@ -296,6 +297,21 @@ void DBHelper::update(const Folder & folder, QSqlDatabase &db) updateFolderInfo.bindValue(":id", folder.id); updateFolderInfo.exec(); } + +void DBHelper::updateProgress(qulonglong libraryId, const ComicInfo &comicInfo) +{ + QString libraryPath = DBHelper::getLibraries().getPath(libraryId); + QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath+"/.yacreaderlibrary"); + + ComicDB comic = DBHelper::loadComic(comicInfo.id,db); + comic.info.currentPage = comicInfo.currentPage; + comic.info.hasBeenOpened = true; + + DBHelper::update(&comic.info,db); + + db.close(); + QSqlDatabase::removeDatabase(libraryPath); +} //inserts qulonglong DBHelper::insert(Folder * folder, QSqlDatabase & db) { diff --git a/YACReaderLibrary/db_helper.h b/YACReaderLibrary/db_helper.h index b4f88f89..a92f8fe5 100644 --- a/YACReaderLibrary/db_helper.h +++ b/YACReaderLibrary/db_helper.h @@ -42,6 +42,7 @@ public: static void update(ComicInfo * comicInfo, QSqlDatabase & db); static void updateRead(ComicInfo * comicInfo, QSqlDatabase & db); static void update(const Folder & folder, QSqlDatabase & db); + static void updateProgress(qulonglong libraryId,const ComicInfo & comicInfo); //TODO change libraryName by libraryId in all methods. //queries static QList getFoldersFromParent(qulonglong parentId, QSqlDatabase & db, bool sort = true); static QList getSortedComicsFromParent(qulonglong parentId, QSqlDatabase & db); diff --git a/YACReaderLibrary/images.qrc b/YACReaderLibrary/images.qrc index fb527aa9..6cfb0b0c 100644 --- a/YACReaderLibrary/images.qrc +++ b/YACReaderLibrary/images.qrc @@ -100,6 +100,8 @@ ../images/comic_vine/downArrow.png ../images/comic_vine/upArrow.png ../images/find_folder.png + ../images/f.png + ../images/f_retina.png diff --git a/YACReaderLibrary/server/controllers/comiccontroller.cpp b/YACReaderLibrary/server/controllers/comiccontroller.cpp index 26bfaed7..43e9ea68 100644 --- a/YACReaderLibrary/server/controllers/comiccontroller.cpp +++ b/YACReaderLibrary/server/controllers/comiccontroller.cpp @@ -97,9 +97,9 @@ void ComicController::service(HttpRequest& request, HttpResponse& response) { //ERROR } - response.writeText(comic.toTXT(),true); qDeleteAll(siblings); } + response.writeText(comic.toTXT(),true); } else { diff --git a/YACReaderLibrary/server/controllers/covercontroller.cpp b/YACReaderLibrary/server/controllers/covercontroller.cpp index 80cc394c..4821bfdd 100644 --- a/YACReaderLibrary/server/controllers/covercontroller.cpp +++ b/YACReaderLibrary/server/controllers/covercontroller.cpp @@ -23,6 +23,8 @@ void CoverController::service(HttpRequest& request, HttpResponse& response) 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+"
"); @@ -62,6 +64,14 @@ void CoverController::service(HttpRequest& request, HttpResponse& response) p.drawImage((width-img.width())/2,(height-img.height())/2,img); + if(folderCover) + { + if(session.getDisplayType()=="@2x") + p.drawImage(0,0,QImage(":/images/f_retina.png")); + else + p.drawImage(0,0,QImage(":/images/f.png")); + } + QByteArray ba; QBuffer buffer(&ba); buffer.open(QIODevice::WriteOnly); diff --git a/YACReaderLibrary/server/controllers/foldercontroller.cpp b/YACReaderLibrary/server/controllers/foldercontroller.cpp index 7300adf9..b6239106 100644 --- a/YACReaderLibrary/server/controllers/foldercontroller.cpp +++ b/YACReaderLibrary/server/controllers/foldercontroller.cpp @@ -180,7 +180,15 @@ void FolderController::service(HttpRequest& request, HttpResponse& response) if(item->isDir()) { t.setVariable(QString("element%1.class").arg(i),"folder"); - t.setVariable(QString("element%1.image.url").arg(i),"/images/f.png"); + + QList children = DBHelper::getFolderComicsFromLibrary(libraryName, 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.browse").arg(i),QString("browse").arg(QString("/library/%1/folder/%2").arg(libraryId).arg(item->id))); @@ -217,7 +225,7 @@ void FolderController::service(HttpRequest& request, HttpResponse& response) if(comic->info.hasBeenOpened) t.setVariable(QString("element%1.pages").arg(i),QString("%1/%2 pages").arg(comic->info.currentPage).arg(comic->info.numPages.toInt())); else - t.setVariable(QString("element%1.pages").arg(i),QString("%1").arg(comic->info.numPages.toInt())); + t.setVariable(QString("element%1.pages").arg(i),QString("%1 pages").arg(comic->info.numPages.toInt())); if(comic->info.read) t.setVariable(QString("element%1.status").arg(i), QString("
")); diff --git a/YACReaderLibrary/server/controllers/updatecomiccontroller.cpp b/YACReaderLibrary/server/controllers/updatecomiccontroller.cpp new file mode 100644 index 00000000..793d1b72 --- /dev/null +++ b/YACReaderLibrary/server/controllers/updatecomiccontroller.cpp @@ -0,0 +1,46 @@ +#include "updatecomiccontroller.h" + +#include "db_helper.h" +#include "yacreader_libraries.h" + +#include "template.h" +#include "../static.h" + +#include "comic_db.h" +#include "comic.h" + +#include "QsLog.h" + +UpdateComicController::UpdateComicController(){} + +void UpdateComicController::service(HttpRequest &request, HttpResponse &response) +{ + HttpSession session=Static::sessionStore->getSession(request,response,false); + + QString path = QUrl::fromPercentEncoding(request.getPath()).toLatin1(); + QStringList pathElements = path.split('/'); + qulonglong libraryId = pathElements.at(2).toULongLong(); + QString libraryName = DBHelper::getLibraryName(libraryId); + qulonglong comicId = pathElements.at(4).toULongLong(); + + QString postData = QString::fromUtf8(request.getBody()); + + QLOG_INFO() << "POST DATA: " << postData; + + if(postData.length()>0) { + QList data = postData.split("\n"); + int currentPage = data.at(0).split(":").at(1).toInt(); + ComicInfo info; + info.currentPage = currentPage; + info.id = comicId; + DBHelper::updateProgress(libraryId,info); + } + else + { + response.setStatus(412,"No comic info received"); + response.writeText("",true); + return; + } + + response.write("OK",true); +} diff --git a/YACReaderLibrary/server/controllers/updatecomiccontroller.h b/YACReaderLibrary/server/controllers/updatecomiccontroller.h new file mode 100644 index 00000000..13ec4f58 --- /dev/null +++ b/YACReaderLibrary/server/controllers/updatecomiccontroller.h @@ -0,0 +1,22 @@ +#ifndef UPDATECOMICCONTROLLER_H +#define UPDATECOMICCONTROLLER_H + + +#include "httprequest.h" +#include "httpresponse.h" +#include "httprequesthandler.h" + + +class UpdateComicController : public HttpRequestHandler +{ + Q_OBJECT + Q_DISABLE_COPY(UpdateComicController); + +public: + UpdateComicController(); + + /** Generates the response */ + void service(HttpRequest& request, HttpResponse& response); +}; + +#endif // UPDATECOMICCONTROLLER_H diff --git a/YACReaderLibrary/server/requestmapper.cpp b/YACReaderLibrary/server/requestmapper.cpp index d010a4c1..5be29a92 100644 --- a/YACReaderLibrary/server/requestmapper.cpp +++ b/YACReaderLibrary/server/requestmapper.cpp @@ -18,6 +18,7 @@ #include "controllers/comiccontroller.h" #include "controllers/folderinfocontroller.h" #include "controllers/pagecontroller.h" +#include "controllers/updatecomiccontroller.h" #include "controllers/errorcontroller.h" #include "db_helper.h" @@ -34,6 +35,7 @@ void RequestMapper::service(HttpRequest& request, HttpResponse& response) { QRegExp folderInfo("/library/.+/folder/[0-9]+/info/?"); //get folder info QRegExp comic("/library/.+/comic/[0-9]+/?"); //get comic info QRegExp comicOpen("/library/.+/comic/[0-9]+/remote/?"); //the server will open for reading the comic + QRegExp comicUpdate("/library/.+/comic/[0-9]+/update/?"); //get comic info QRegExp comicClose("/library/.+/comic/[0-9]+/close/?"); //the server will close the comic and free memory QRegExp cover("/library/.+/cover/[0-9a-f]+.jpg"); //get comic cover (navigation) QRegExp comicPage("/library/.+/comic/[0-9]+/page/[0-9]+/?"); //get comic page @@ -76,7 +78,11 @@ void RequestMapper::service(HttpRequest& request, HttpResponse& response) { else if(comicPage.exactMatch(path)) { PageController().service(request,response); - } + } + else if(comicUpdate.exactMatch(path)) + { + UpdateComicController().service(request, response); + } } else { diff --git a/YACReaderLibrary/server/server.pri b/YACReaderLibrary/server/server.pri index dc1f2466..9e3b2920 100644 --- a/YACReaderLibrary/server/server.pri +++ b/YACReaderLibrary/server/server.pri @@ -12,7 +12,8 @@ HEADERS += \ $$PWD/controllers/librariescontroller.h \ $$PWD/controllers/pagecontroller.h \ $$PWD/controllers/sessionmanager.h \ - $$PWD/controllers/covercontroller.h + $$PWD/controllers/covercontroller.h \ + server/controllers/updatecomiccontroller.h SOURCES += \ $$PWD/static.cpp \ @@ -25,7 +26,8 @@ SOURCES += \ $$PWD/controllers/librariescontroller.cpp \ $$PWD/controllers/pagecontroller.cpp \ $$PWD/controllers/sessionmanager.cpp \ - $$PWD/controllers/covercontroller.cpp + $$PWD/controllers/covercontroller.cpp \ + server/controllers/updatecomiccontroller.cpp include(lib/bfLogging/bfLogging.pri) include(lib/bfHttpServer/bfHttpServer.pri) diff --git a/images/f.png b/images/f.png new file mode 100644 index 0000000000000000000000000000000000000000..232a785d75767e8fae82aae15cf36213ecec1598 GIT binary patch literal 710 zcmeAS@N?(olHy`uVBq!ia0vp^0YF^A!3HE#-<5s?Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07??6VT^vIyZoRp?F|Wx%=6In&AK%@WTIO07-ooXZUtUl* z=zZxkL;CU$mRgpXt6k(5?rU5v-CSLLea^|&5(Yl4@|t?i#EaQKf9x+RDEhkJ)h5W& zmV<#sz=46Yfq{ubff2}JQ~|LXSR5E~J@&ugUVnYHxa-DptGRR7B>RuY$++K3Fwpo? zwg1JEOIcrE+05(P5x4(pbfe`Smz>!qcV%N4xSM{4yqT87{omqR6+@{FI$`{63> zfOAt%wZ)##joXp&XA{5lsY`J>^X446{odYt|MD+e($;Nxs^T+e+3q8k_SY`7(hQS} zoYBX;_UPom{na(w8@HUTi0X^!oFVGSrf~fb*gY4HeR==2`Do|?k2iKl%+@B#eAj7H zets@w!GUUl-Ojuf^RgZ{QL&CicNKr?l_(xm9QL7*^%keCEkd%VK^x^JT5=>vb+yrXKE@%#ogm z5*nB>!^kp$0T@RN&lb=7vCV4P@r0|6H_V+Po~;1FtGgfba4!+xb^0)p?|bH!-0>=NnZ{;yDAvpV5zfC#%l7r zMg!NmD@02Dtld|nt}@y=VQ-=;=c(uuXT%*ozUn<#U8Nqk#H1-??T6jf@Bh|anyfnE z(dPH>tIb-3h=KzP2a`(!$rOhGO9z8v1Ca8tU!(V0e%|@#4}bg!wXpv$ zAlBWQzN?k3+407m8iBGhx%P(zJEr`Oh&<+II(_=|hc`FRZ@s=yfS)g}O<8#-yl>d`6m|J%Ax^1T4|>fp|J{n7{AgBxzkgcR2ip1f?|&OzZMe(cw^Tc+Mks%odF}hVyUkPQHyyoR z_ci9NX<@uCOGM}Tt%6~(93M`UY`YdH&NOG{@oTfT+BwWGi+;O^TU+66t$c;5gOxAP zV~kAKU(T|7%9G3ruoNN`+1_SfpKfj_4AW_9r!yj@pORrNYe z?eTejJ-ZC!`$n00-S(`@*V<11=%u*cWI2!vRJ3fywr?Vd+aGxs@9ME_p1vu*AnEX{ zyq4>ycvt6t>hoJn#HKo~fBl!-G}<3lIUhb%VzT_7ZNAmF#~ZI5X9%vj zfAoXilM8!(vBn=2@PG97cZ}dO8&>(Q^&JBGuQms~h;H!P`E*5<_=4{>t~+1EHi(o; z?GsYitKtAl0??EIq267|ikGjbwd|UI=<8Aqx0!8*+}EdT{j_~v-?@p&O#Xh^o}Uu^ z&m|vof300^ShME1$^p3}-&OAI;gkF?^oA`{XZ>%9hkNH8ogOylK9}61Epm$)th1tS zoGQQUWg(hi9=^Zi@9skGHmi4+Tkrnf!t_pRHAC?&voOYICPqNw&zEk7%{z^*GM!nr ze*ZI}gvhjGS_kI%^@KK9%1Q!N?&J5FuCO}F;L0k0@po@-zi;}^_1~o?wEtrJguZo6 zn-8g1tOr>rlUUXKf5nEW2E9)MZMP{LsB@{Xm)qaA$NtldtI0d=AOA7w-alWDzlUGO zzhc%_U}9lZau6Vea%q^ygf;N+33hQ57~Pbr{&jjnv0l--1|}VMedas;>-X>$&#(RJ zUA$rb>wn?1cP&1c0L+0$r^iQiAOHP>MdsM;S8v|rsUcY~i+>g&CN7P*mdKI;Vst0RKTg#Q*>R literal 0 HcmV?d00001