mirror of
https://github.com/YACReader/yacreader
synced 2025-07-21 06:24:39 -04:00
a?adido comic flow con opengl a yacreaderlibrary
modificados los paginadores soporte multidispositivo del servidor a?adido nuevos templates de la web agregados
This commit is contained in:
@ -42,7 +42,8 @@ void ComicController::service(HttpRequest& request, HttpResponse& response)
|
||||
{
|
||||
HttpSession session=Static::sessionStore->getSession(request,response);
|
||||
|
||||
QStringList pathElements = ((QString)request.getPath()).split('/');
|
||||
QString path = QUrl::fromPercentEncoding(request.getPath()).toLatin1();
|
||||
QStringList pathElements = path.split('/');
|
||||
QString libraryName = pathElements.at(2);
|
||||
qulonglong comicId = pathElements.at(4).toULongLong();
|
||||
|
||||
|
@ -16,7 +16,7 @@ void CoverController::service(HttpRequest& request, HttpResponse& response)
|
||||
|
||||
QMap<QString,QString> libraries = mw->getLibraries();
|
||||
|
||||
QString path = request.getPath();
|
||||
QString path = QUrl::fromPercentEncoding(request.getPath()).toLatin1();
|
||||
QStringList pathElements = path.split('/');
|
||||
QString libraryName = pathElements.at(2);
|
||||
QString fileName = pathElements.at(4);
|
||||
|
@ -12,6 +12,16 @@ ErrorController::ErrorController(int errorCode)
|
||||
|
||||
void ErrorController::service(HttpRequest& request, HttpResponse& response)
|
||||
{
|
||||
response.setStatus(300,"redirect");
|
||||
response.write("<html> <head> <meta http-equiv=\"refresh\" content=\"0; URL=/\"> </head> <body> </body> </html>", true);
|
||||
switch(error)
|
||||
{
|
||||
case 300:
|
||||
response.setStatus(300,"redirect");
|
||||
response.write("<html> <head> <meta http-equiv=\"refresh\" content=\"0; URL=/\"> </head> <body> </body> </html>", true);
|
||||
break;
|
||||
case 404:
|
||||
response.setStatus(404,"not found");
|
||||
response.write("404 not found",true);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
@ -29,25 +29,24 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
|
||||
QString y = session.get("xxx").toString();
|
||||
//response.writeText(QString("session xxx : %1 <br/>").arg(y));
|
||||
|
||||
Template t=Static::templateLoader->getTemplate("folder",request.getHeader("Accept-Language"));
|
||||
Template t=Static::templateLoader->getTemplate("folder_"+session.getDeviceType(),request.getHeader("Accept-Language"));
|
||||
t.enableWarnings();
|
||||
QString path = request.getPath();
|
||||
QString path = QUrl::fromPercentEncoding(request.getPath()).toLatin1();
|
||||
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);
|
||||
|
||||
response.writeText(libraryName);
|
||||
|
||||
folderContent.append(folderComics);
|
||||
|
||||
qSort(folderContent.begin(),folderContent.end(),LibraryItemSorter());
|
||||
folderComics.clear();
|
||||
|
||||
|
||||
|
||||
qulonglong backId = mw->getParentFromComicFolderId(libraryName,parentId);
|
||||
|
||||
|
||||
int page = 0;
|
||||
QByteArray p = request.getParameter("page");
|
||||
if(p.length() != 0)
|
||||
@ -57,11 +56,10 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
|
||||
//QString currentPath = session.get("currentPath").toString();
|
||||
//QStringList pathSize = currentPath.split("/").last().toInt;
|
||||
|
||||
|
||||
if(backId == 1 && parentId == 1)
|
||||
t.setVariable(QString("upurl"),"/?page=0");
|
||||
else
|
||||
t.setVariable(QString("upurl"),"/library/" + libraryName + "/folder/" +QString("%1").arg(backId));//.arg(upPage));
|
||||
t.setVariable(QString("upurl"),"/library/" + QUrl::toPercentEncoding(libraryName) + "/folder/" +QString("%1").arg(backId));//.arg(upPage));
|
||||
|
||||
/*if(currentPath.length()>0)
|
||||
{
|
||||
@ -115,19 +113,23 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
|
||||
t.setVariable(QString("element%1.browse").arg(i),QString("<a href=\"%1\">Browse</a>").arg(QString("/library/%1/folder/%2").arg(libraryName).arg(item->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*elementsPerPage))->id));
|
||||
//t.setVariable(QString("element%1.downloadurl").arg(i),"/library/"+libraryName+"/folder/"+QString("%1/info").arg(folderContent.at(i + (page*elementsPerPage))->id));
|
||||
t.setVariable(QString("element%1.download").arg(i),QString("<a href=\"%1\">Download</a>").arg("/library/"+QUrl::toPercentEncoding(libraryName)+"/folder/"+QString("%1/info").arg(folderContent.at(i + (page*elementsPerPage))->id)));
|
||||
}
|
||||
else
|
||||
{
|
||||
const ComicDB * comic = (ComicDB *)item;
|
||||
t.setVariable(QString("element%1.browse").arg(i),"");
|
||||
t.setVariable(QString("element%1.image.width").arg(i),"80px");
|
||||
t.setVariable(QString("element%1.downloadurl").arg(i),"/library/"+libraryName+"/comic/"+QString("%1").arg(comic->id));
|
||||
//t.setVariable(QString("element%1.image.url").arg(i),"/images/f.png");
|
||||
if(session.isComicOnDevice(comic->info.hash))
|
||||
t.setVariable(QString("element%1.image.url").arg(i),"/images/f.png");
|
||||
//t.setVariable(QString("element%1.downloadurl").arg(i),"/library/"+libraryName+"/comic/"+QString("%1").arg(comic->id));
|
||||
if(!session.isComicOnDevice(comic->info.hash))
|
||||
t.setVariable(QString("element%1.download").arg(i),QString("<a href=\"%1\">Download</a>").arg("/library/"+QUrl::toPercentEncoding(libraryName)+"/comic/"+QString("%1").arg(comic->id)));
|
||||
else
|
||||
t.setVariable(QString("element%1.image.url").arg(i),QString("/library/%1/cover/%2.jpg").arg(libraryName).arg(comic->info.hash));
|
||||
t.setVariable(QString("element%1.download").arg(i),QString(""));
|
||||
|
||||
//t.setVariable(QString("element%1.image.url").arg(i),"/images/f.png");
|
||||
|
||||
t.setVariable(QString("element%1.image.url").arg(i),QString("/library/%1/cover/%2.jpg").arg(QString(QUrl::toPercentEncoding(libraryName))).arg(comic->info.hash));
|
||||
}
|
||||
i++;
|
||||
}
|
||||
@ -172,8 +174,8 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
|
||||
t.setVariable(QString("elementcomic%1.name").arg(j),comic->name);
|
||||
//else
|
||||
// t.setVariable(QString("elementcomic%1.name").arg(i),*comic->info.title);
|
||||
t.setVariable(QString("elementcomic%1.url").arg(j),"/library/"+libraryName+"/comic/"+QString("%1").arg(comic->id));
|
||||
t.setVariable(QString("elementcomic%1.coverulr").arg(j),"/library/"+libraryName+"/cover/"+QString("%1").arg(comic->info.hash + ".jpg"));
|
||||
t.setVariable(QString("elementcomic%1.url").arg(j),"/library/"+QUrl::toPercentEncoding(libraryName)+"/comic/"+QString("%1").arg(comic->id));
|
||||
t.setVariable(QString("elementcomic%1.coverulr").arg(j),"/library/"+QUrl::toPercentEncoding(libraryName)+"/cover/"+QString("%1").arg(comic->info.hash + ".jpg"));
|
||||
j++;
|
||||
}
|
||||
|
||||
@ -210,7 +212,7 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
|
||||
{
|
||||
//response.writeText(QString("%1 - %2 <br />").arg(*itr).arg(count));
|
||||
t.setVariable(QString("index%1.indexname").arg(i), *itr);
|
||||
t.setVariable(QString("index%1.url").arg(i),QString("/library/%1/folder/%2?page=%3").arg(libraryName).arg(parentId).arg(indexPage));
|
||||
t.setVariable(QString("index%1.url").arg(i),QString("/library/%1/folder/%2?page=%3").arg(QString(QUrl::toPercentEncoding(libraryName))).arg(parentId).arg(indexPage));
|
||||
i++;
|
||||
count += indexCount.value(*itr);
|
||||
indexPage = count/elementsPerPage;
|
||||
@ -222,13 +224,19 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
|
||||
while(z < numPages)
|
||||
{
|
||||
|
||||
t.setVariable(QString("page%1.url").arg(z),QString("/library/%1/folder/%2?page=%3").arg(libraryName).arg(parentId).arg(z));
|
||||
t.setVariable(QString("page%1.url").arg(z),QString("/library/%1/folder/%2?page=%3").arg(QString(QUrl::toPercentEncoding(libraryName))).arg(parentId).arg(z));
|
||||
t.setVariable(QString("page%1.number").arg(z),QString("%1").arg(z));
|
||||
if(page == z)
|
||||
t.setVariable(QString("page%1.number").arg(z),QString("<strong>%1</strong>").arg(z));
|
||||
t.setVariable(QString("page%1.current").arg(z),"current");
|
||||
else
|
||||
t.setVariable(QString("page%1.number").arg(z),QString("%1").arg(z));
|
||||
t.setVariable(QString("page%1.current").arg(z),"");
|
||||
z++;
|
||||
}
|
||||
|
||||
t.setVariable("page.first",QString("/library/%1/folder/%2?page=%3").arg(QString(QUrl::toPercentEncoding(libraryName))).arg(parentId).arg(0));
|
||||
t.setVariable("page.previous",QString("/library/%1/folder/%2?page=%3").arg(QString(QUrl::toPercentEncoding(libraryName))).arg(parentId).arg((page==0)?page:page-1));
|
||||
t.setVariable("page.next",QString("/library/%1/folder/%2?page=%3").arg(QString(QUrl::toPercentEncoding(libraryName))).arg(parentId).arg((page==numPages-1)?page:page+1));
|
||||
t.setVariable("page.last",QString("/library/%1/folder/%2?page=%3").arg(QString(QUrl::toPercentEncoding(libraryName))).arg(parentId).arg(numPages-1));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -15,7 +15,7 @@ void FolderInfoController::service(HttpRequest& request, HttpResponse& response)
|
||||
{
|
||||
response.setHeader("Content-Type", "plain/text; charset=ISO-8859-1");
|
||||
|
||||
QString path = request.getPath();
|
||||
QString path = QUrl::fromPercentEncoding(request.getPath()).toLatin1();
|
||||
QStringList pathElements = path.split('/');
|
||||
QString libraryName = pathElements.at(2);
|
||||
qulonglong parentId = pathElements.at(4).toULongLong();
|
||||
@ -26,14 +26,14 @@ void FolderInfoController::service(HttpRequest& request, HttpResponse& response)
|
||||
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));
|
||||
response.writeText(QString("/library/%1/folder/%2/info\n").arg(QString(QUrl::toPercentEncoding(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));
|
||||
response.writeText(QString("/library/%1/comic/%2\n").arg(QString(QUrl::toPercentEncoding(libraryName))).arg(currentComic->id));
|
||||
}
|
||||
|
||||
}
|
@ -13,21 +13,28 @@ void LibrariesController::service(HttpRequest& request, HttpResponse& response)
|
||||
response.setHeader("Content-Type", "text/html; charset=ISO-8859-1");
|
||||
|
||||
HttpSession session=Static::sessionStore->getSession(request,response);
|
||||
|
||||
session.set("xxx","yyy");
|
||||
session.set("ySession","ok");
|
||||
QString postData = QString::fromUtf8(request.getBody());
|
||||
response.writeText(postData);
|
||||
|
||||
QList<QString> data = postData.split("\n");
|
||||
session.setDeviceType(data.at(0).split(":").at(1));
|
||||
session.setDisplayType(data.at(1).split(":").at(1));
|
||||
QList<QString> comics = data.at(2).split(":").at(1).split("\t");
|
||||
foreach(QString hash,comics)
|
||||
if(data.length() > 2)
|
||||
{
|
||||
session.setComicOnDevice(hash);
|
||||
session.setDeviceType(data.at(0).split(":").at(1));
|
||||
session.setDisplayType(data.at(1).split(":").at(1));
|
||||
QList<QString> comics = data.at(2).split(":").at(1).split("\t");
|
||||
foreach(QString hash,comics)
|
||||
{
|
||||
session.setComicOnDevice(hash);
|
||||
}
|
||||
}
|
||||
else //valores por defecto, con propositos de depuraci<63>n
|
||||
{
|
||||
session.setDeviceType("iphone");
|
||||
session.setDisplayType("retina");
|
||||
}
|
||||
|
||||
Template t=Static::templateLoader->getTemplate("libraries",request.getHeader("Accept-Language"));
|
||||
Template t=Static::templateLoader->getTemplate("libraries_"+session.getDeviceType(),request.getHeader("Accept-Language"));
|
||||
t.enableWarnings();
|
||||
|
||||
QMap<QString,QString> libraries = mw->getLibraries();
|
||||
@ -36,7 +43,7 @@ void LibrariesController::service(HttpRequest& request, HttpResponse& response)
|
||||
t.loop("library",names.length());
|
||||
int i=0;
|
||||
while (i<names.length()) {
|
||||
t.setVariable(QString("library%1.name").arg(i),names.at(i));
|
||||
t.setVariable(QString("library%1.name").arg(i),QUrl::toPercentEncoding(names.at(i)));
|
||||
t.setVariable(QString("library%1.label").arg(i),names.at(i));
|
||||
i++;
|
||||
}
|
||||
|
@ -13,7 +13,8 @@ void PageController::service(HttpRequest& request, HttpResponse& response)
|
||||
{
|
||||
HttpSession session=Static::sessionStore->getSession(request,response);
|
||||
|
||||
QStringList pathElements = ((QString)request.getPath()).split('/');
|
||||
QString path = QUrl::fromPercentEncoding(request.getPath()).toLatin1();
|
||||
QStringList pathElements = path.split('/');
|
||||
QString libraryName = pathElements.at(2);
|
||||
qulonglong comicId = pathElements.at(4).toULongLong();
|
||||
unsigned int page = pathElements.at(6).toUInt();
|
||||
|
@ -7,6 +7,8 @@
|
||||
#include <QFileInfo>
|
||||
#include <QDir>
|
||||
#include <QDateTime>
|
||||
#include "httpsession.h"
|
||||
#include "static.h"
|
||||
|
||||
StaticFileController::StaticFileController(QSettings* settings, QObject* parent)
|
||||
:HttpRequestHandler(parent)
|
||||
@ -61,12 +63,14 @@ void StaticFileController::service(HttpRequest& request, HttpResponse& response)
|
||||
path+="/index.html";
|
||||
}
|
||||
|
||||
//TODO(DONE) carga sensible a la localizaci<63>n
|
||||
//TODO(DONE) carga sensible al dispositivo y a la localizaci<63>n
|
||||
QString stringPath = path;
|
||||
QStringList paths = QString(path).split('/');
|
||||
QString fileName = paths.last();
|
||||
stringPath.remove(fileName);
|
||||
fileName = getLocalizedFileName(fileName, request.getHeader("Accept-Language"), stringPath);
|
||||
HttpSession session=Static::sessionStore->getSession(request,response);
|
||||
QString device = session.getDeviceType();
|
||||
fileName = getDeviceAwareFileName(fileName, device, request.getHeader("Accept-Language"), stringPath);
|
||||
QString newPath = stringPath.append(fileName);
|
||||
//END_TODO
|
||||
QFile file(docroot+path);
|
||||
@ -171,3 +175,17 @@ QString StaticFileController::getLocalizedFileName(QString fileName, QString loc
|
||||
|
||||
return fileName;
|
||||
}
|
||||
|
||||
QString StaticFileController::getDeviceAwareFileName(QString fileName, QString device, QString locales, QString path) const
|
||||
{
|
||||
QFileInfo fi(fileName);
|
||||
QString baseName = fi.baseName();
|
||||
QString extension = fi.completeSuffix();
|
||||
|
||||
QString completeFileName = getLocalizedFileName(fileName+"_"+device+"."+extension,locales,path);
|
||||
|
||||
if(QFile(docroot+"/"+path+completeFileName).exists())
|
||||
return completeFileName; //existe un archivo espec<65>fico para este dispositivo y locales
|
||||
else
|
||||
return getLocalizedFileName(fileName,locales,path); //no hay archivo espec<65>fico para el dispositivo, pero puede haberlo para estas locales
|
||||
}
|
@ -69,6 +69,7 @@ private:
|
||||
/** Timeout for each cached file */
|
||||
int cacheTimeout;
|
||||
|
||||
|
||||
/** Maximum size of files in cache, larger files are not cached */
|
||||
int maxCachedFileSize;
|
||||
|
||||
@ -81,7 +82,8 @@ private:
|
||||
/** Set a content-type header in the response depending on the ending of the filename */
|
||||
void setContentType(QString file, HttpResponse& response) const;
|
||||
|
||||
QString StaticFileController::getLocalizedFileName(QString fileName, QString locales, QString path) const;
|
||||
QString getLocalizedFileName(QString fileName, QString locales, QString path) const;
|
||||
QString getDeviceAwareFileName(QString fileName, QString device, QString locales, QString path) const;
|
||||
|
||||
bool exists(QString localizedName, QString path) const;
|
||||
};
|
||||
|
@ -20,6 +20,10 @@
|
||||
#include "controllers/pagecontroller.h"
|
||||
#include "controllers/errorcontroller.h"
|
||||
|
||||
#include "library_window.h"
|
||||
|
||||
extern LibraryWindow * mw;
|
||||
|
||||
RequestMapper::RequestMapper(QObject* parent)
|
||||
:HttpRequestHandler(parent) {}
|
||||
|
||||
@ -34,6 +38,10 @@ void RequestMapper::service(HttpRequest& request, HttpResponse& response) {
|
||||
QRegExp cover("/library/.+/cover/[0-9a-f]+.jpg");
|
||||
QRegExp comicPage("/library/.+/comic/[0-9]+/page/[0-9]+/?");
|
||||
|
||||
QRegExp library("/library/([^/.]+)/.+");
|
||||
|
||||
path = QUrl::fromPercentEncoding(path).toLatin1();
|
||||
|
||||
//primera petici<63>n, se ha hecho un post, se sirven las bibliotecas si la seguridad mediante login no est<73> habilitada
|
||||
if(path == "/")
|
||||
{
|
||||
@ -41,42 +49,44 @@ void RequestMapper::service(HttpRequest& request, HttpResponse& response) {
|
||||
}
|
||||
|
||||
else
|
||||
|
||||
{
|
||||
//se comprueba que la sesi<73>n sea la correcta con el fin de evitar accesos no autorizados
|
||||
HttpSession session=Static::sessionStore->getSession(request,response);
|
||||
if(session.contains("xxx"))
|
||||
if(session.contains("ySession"))
|
||||
{
|
||||
|
||||
//listar el contenido del folder
|
||||
if(folder.exactMatch(path))
|
||||
if(library.indexIn(path)!=-1 && mw->getLibraries().contains(library.cap(1)) )
|
||||
{
|
||||
FolderController().service(request, response);
|
||||
}
|
||||
else if (folderInfo.exactMatch(path))
|
||||
{
|
||||
FolderInfoController().service(request, response);
|
||||
}
|
||||
else if(cover.exactMatch(path))
|
||||
{
|
||||
CoverController().service(request, response);
|
||||
}
|
||||
else if(comic.exactMatch(path))
|
||||
{
|
||||
ComicController().service(request, response);
|
||||
}
|
||||
else if(comicPage.exactMatch(path))
|
||||
{
|
||||
PageController().service(request,response);
|
||||
//listar el contenido del folder
|
||||
if(folder.exactMatch(path))
|
||||
{
|
||||
FolderController().service(request, response);
|
||||
}
|
||||
else if (folderInfo.exactMatch(path))
|
||||
{
|
||||
FolderInfoController().service(request, response);
|
||||
}
|
||||
else if(cover.exactMatch(path))
|
||||
{
|
||||
CoverController().service(request, response);
|
||||
}
|
||||
else if(comic.exactMatch(path))
|
||||
{
|
||||
ComicController().service(request, response);
|
||||
}
|
||||
else if(comicPage.exactMatch(path))
|
||||
{
|
||||
PageController().service(request,response);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
response.writeText(library.cap(1));
|
||||
Static::staticFileController->service(request, response);
|
||||
}
|
||||
}
|
||||
else //acceso no autorizado
|
||||
else //acceso no autorizado, redirecci<63>n
|
||||
{
|
||||
ErrorController(403).service(request,response);
|
||||
ErrorController(300).service(request,response);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5,11 +5,6 @@ HEADERS += \
|
||||
$$PWD/static.h \
|
||||
$$PWD/startup.h \
|
||||
$$PWD/requestmapper.h \
|
||||
$$PWD/controllers/dumpcontroller.h \
|
||||
$$PWD/controllers/templatecontroller.h \
|
||||
$$PWD/controllers/formcontroller.h \
|
||||
$$PWD/controllers/fileuploadcontroller.h \
|
||||
$$PWD/controllers/sessioncontroller.h \
|
||||
$$PWD/controllers/comiccontroller.h \
|
||||
$$PWD/controllers/errorcontroller.h \
|
||||
$$PWD/controllers/foldercontroller.h \
|
||||
@ -23,11 +18,6 @@ SOURCES += \
|
||||
$$PWD/static.cpp \
|
||||
$$PWD/startup.cpp \
|
||||
$$PWD/requestmapper.cpp \
|
||||
$$PWD/controllers/dumpcontroller.cpp \
|
||||
$$PWD/controllers/templatecontroller.cpp \
|
||||
$$PWD/controllers/formcontroller.cpp \
|
||||
$$PWD/controllers/fileuploadcontroller.cpp \
|
||||
$$PWD/controllers/sessioncontroller.cpp \
|
||||
$$PWD/controllers/comiccontroller.cpp \
|
||||
$$PWD/controllers/errorcontroller.cpp \
|
||||
$$PWD/controllers/foldercontroller.cpp \
|
||||
|
Reference in New Issue
Block a user