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
This commit is contained in:
Luis Ángel San Martín 2014-07-30 18:28:01 +02:00
parent 093b2b0cb1
commit d584fc2879
13 changed files with 120 additions and 8 deletions

View File

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

View File

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

View File

@ -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<LibraryItem *> getFoldersFromParent(qulonglong parentId, QSqlDatabase & db, bool sort = true);
static QList<ComicDB> getSortedComicsFromParent(qulonglong parentId, QSqlDatabase & db);

View File

@ -100,6 +100,8 @@
<file>../images/comic_vine/downArrow.png</file>
<file>../images/comic_vine/upArrow.png</file>
<file>../images/find_folder.png</file>
<file>../images/f.png</file>
<file>../images/f_retina.png</file>
<!--<file>../images/busy_background.png</file>-->
</qresource>
</RCC>

View File

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

View File

@ -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+"<br/>");
//response.writeText(libraryName+"<br/>");
//response.writeText(libraries.value(libraryName)+"/.yacreaderlibrary/covers/"+fileName+"<br/>");
@ -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);

View File

@ -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<LibraryItem *> children = DBHelper::getFolderComicsFromLibrary(libraryName, item->id);
if(children.length()>0)
{
const ComicDB * comic = static_cast<ComicDB*>(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("<a class =\"browseButton\" href=\"%1\">browse</a>").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("<span class=\"numPages\">%1/%2 pages</span>").arg(comic->info.currentPage).arg(comic->info.numPages.toInt()));
else
t.setVariable(QString("element%1.pages").arg(i),QString("<span class=\"numPages\">%1</span>").arg(comic->info.numPages.toInt()));
t.setVariable(QString("element%1.pages").arg(i),QString("<span class=\"numPages\">%1 pages</span>").arg(comic->info.numPages.toInt()));
if(comic->info.read)
t.setVariable(QString("element%1.status").arg(i), QString("<div class=\"mark\"><img src=\"/images/readMark.png\" style = \"width: 15px\"/> </div>"));

View File

@ -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<QString> 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);
}

View File

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

View File

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

View File

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

BIN
images/f.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 710 B

BIN
images/f_retina.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB