Modificaci?n del SERVIDOR que mejora la estabilidad del sistema.

Se ha eliminado el soporte del servidor para conexiones persistentes.
A?adido soporte para buscar aleatoriamente un puerto v?lido, si el seleccionado por el usuario no esta disponible
This commit is contained in:
Luis Ángel San Martín
2012-11-04 21:02:15 +01:00
parent 047457da93
commit 4cee4117f8
21 changed files with 311 additions and 220 deletions

View File

@ -40,7 +40,7 @@ ComicController::ComicController() {}
void ComicController::service(HttpRequest& request, HttpResponse& response)
{
HttpSession session=Static::sessionStore->getSession(request,response);
HttpSession session=Static::sessionStore->getSession(request,response,false);
QString path = QUrl::fromPercentEncoding(request.getPath()).toLatin1();
QStringList pathElements = path.split('/');

View File

@ -10,8 +10,11 @@ CoverController::CoverController() {}
void CoverController::service(HttpRequest& request, HttpResponse& response)
{
response.setHeader("Content-Type", "image/jpeg");
HttpSession session=Static::sessionStore->getSession(request,response,false);
response.setHeader("Content-Type", "image/jpeg");
response.setHeader("Connection","close");
//response.setHeader("Content-Type", "plain/text; charset=ISO-8859-1");
QMap<QString,QString> libraries = mw->getLibraries();
@ -25,17 +28,32 @@ void CoverController::service(HttpRequest& request, HttpResponse& response)
//response.writeText(libraryName+"<br/>");
//response.writeText(libraries.value(libraryName)+"/.yacreaderlibrary/covers/"+fileName+"<br/>");
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(65536));
}
}
//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();
// file.close();
//}
QImage img(libraries.value(libraryName)+"/.yacreaderlibrary/covers/"+fileName);
if (!img.isNull()) {
int width = 80;
if(session.getDisplayType()=="retina")
width = 160;
img = img.scaledToWidth(width,Qt::SmoothTransformation);
QByteArray ba;
QBuffer buffer(&ba);
buffer.open(QIODevice::WriteOnly);
img.save(&buffer, "JPG");
response.write(ba,true);
}
}
}

View File

@ -22,11 +22,12 @@ FolderController::FolderController() {}
void FolderController::service(HttpRequest& request, HttpResponse& response)
{
HttpSession session=Static::sessionStore->getSession(request,response,false);
response.setHeader("Content-Type", "text/html; charset=ISO-8859-1");
response.setHeader("Connection","close");
HttpSession session=Static::sessionStore->getSession(request,response);
QString y = session.get("xxx").toString();
//QString y = session.get("xxx").toString();
//response.writeText(QString("session xxx : %1 <br/>").arg(y));
Template t=Static::templateLoader->getTemplate("folder_"+session.getDeviceType(),request.getHeader("Accept-Language"));
@ -35,10 +36,15 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
QStringList pathElements = path.split('/');
QString libraryName = pathElements.at(2);
qulonglong parentId = pathElements.at(4).toULongLong();
QString folderName = mw->getFolderName(libraryName,parentId);
if(parentId!=1)
t.setVariable("folder.name",folderName);
else
t.setVariable("folder.name",libraryName);
QList<LibraryItem *> folderContent = mw->getFolderContentFromLibrary(libraryName,parentId);
QList<LibraryItem *> folderComics = mw->getFolderComicsFromLibrary(libraryName,parentId);
response.writeText(libraryName);
//response.writeText(libraryName);
folderContent.append(folderComics);
@ -76,7 +82,7 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
//t.loop("element",folderContent.length());
int elementsPerPage = 20;
int elementsPerPage = 18;
int numFolders = folderContent.length();
int numComics = folderComics.length();
@ -107,25 +113,27 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
t.setVariable(QString("element%1.name").arg(i),folderContent.at(i + (page*elementsPerPage))->name);
if(item->isDir())
{
t.setVariable(QString("element%1.class").arg(i),"folder");
t.setVariable(QString("element%1.image.width").arg(i),"89px");
t.setVariable(QString("element%1.image.url").arg(i),"/images/f.png");
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.browse").arg(i),QString("<a class =\"browseButton\" 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.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)));
t.setVariable(QString("element%1.download").arg(i),QString("<a class =\"importButton\" href=\"%1\">import</a>").arg("/library/"+QUrl::toPercentEncoding(libraryName)+"/folder/"+QString("%1/info").arg(folderContent.at(i + (page*elementsPerPage))->id)));
}
else
{
t.setVariable(QString("element%1.class").arg(i),"cover");
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));
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)));
t.setVariable(QString("element%1.download").arg(i),QString("<a class =\"importButton\" href=\"%1\">import</a>").arg("/library/"+QUrl::toPercentEncoding(libraryName)+"/comic/"+QString("%1").arg(comic->id)));
else
t.setVariable(QString("element%1.download").arg(i),QString(""));
t.setVariable(QString("element%1.download").arg(i),QString("<div class=\"importedButton\">imported</div>"));
//t.setVariable(QString("element%1.image.url").arg(i),"/images/f.png");
@ -134,53 +142,55 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
i++;
}
int comicsOffset;// = qMax(0,((page - (numFolderPages - 1)) * 10) - (numFolders%10));
//int comicsOffset;// = qMax(0,((page - (numFolderPages - 1)) * 10) - (numFolders%10));
int comicPage = numFolderPages!=0?page-(numFolderPages - 1):page;
//int comicPage = numFolderPages!=0?page-(numFolderPages - 1):page;
if(comicPage > 0)
{
comicsOffset = elementsPerPage - (numFolders%elementsPerPage);
comicsOffset += (comicPage-1) *elementsPerPage;
}
else
comicsOffset = 0;
//if(comicPage > 0)
//{
// comicsOffset = elementsPerPage - (numFolders%elementsPerPage);
// comicsOffset += (comicPage-1) *elementsPerPage;
//}
//else
// comicsOffset = 0;
int globalComicsOffset = elementsPerPage - (numFolders%elementsPerPage);
int numComicsAtCurrentPage = 0;
if(comicPage == 0) //primera p<>gina de los c<>mics
numComicsAtCurrentPage = qMin(globalComicsOffset,numComics);
else if (page == (numPages-1)) //<2F>ltima p<>gina de los c<>mics
numComicsAtCurrentPage = elementsPerPage-globalComicsOffset + (numComics%elementsPerPage);
else
numComicsAtCurrentPage = elementsPerPage - numFoldersAtCurrentPage;
if(numComics == 0)
numComicsAtCurrentPage = 0;
//response.writeText(QString("numComicsAtCurrentPage : %1 <br/>").arg(numComicsAtCurrentPage));
//response.writeText(QString("comicsOffset : %1 <br/>").arg(comicsOffset));
t.loop("elementcomic",numComicsAtCurrentPage);
//
int j = 0;
while(j<numComicsAtCurrentPage)
{
const ComicDB * comic = (ComicDB *)folderComics.at(j+comicsOffset);
//if(comic->info.title == 0 || comic->info.title->isEmpty())
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/"+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++;
}
//int globalComicsOffset = elementsPerPage - (numFolders%elementsPerPage);
//int numComicsAtCurrentPage = 0;
//if(comicPage == 0) //primera p<>gina de los c<>mics
// numComicsAtCurrentPage = qMin(globalComicsOffset,numComics);
// else if (page == (numPages-1)) //<2F>ltima p<>gina de los c<>mics
// numComicsAtCurrentPage = elementsPerPage-globalComicsOffset + (numComics%elementsPerPage);
// else
// numComicsAtCurrentPage = elementsPerPage - numFoldersAtCurrentPage;
//if(numComics == 0)
// numComicsAtCurrentPage = 0;
////response.writeText(QString("numComicsAtCurrentPage : %1 <br/>").arg(numComicsAtCurrentPage));
////response.writeText(QString("comicsOffset : %1 <br/>").arg(comicsOffset));
//t.loop("elementcomic",numComicsAtCurrentPage);
////
//int j = 0;
//while(j<numComicsAtCurrentPage)
//{
// const ComicDB * comic = (ComicDB *)folderComics.at(j+comicsOffset);
// //if(comic->info.title == 0 || comic->info.title->isEmpty())
// 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/"+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++;
//}
if(numPages > 1)
{
t.setCondition("pageIndex",true);
QMap<QString,int> indexCount;
QString firstChar;
@ -203,20 +213,31 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
}
QList<QString> index = indexCount.keys();
qSort(index.begin(),index.end(),naturalSortLessThanCI);
t.loop("index",index.length());
int i=0;
int count=0;
int indexPage=0;
for(QList<QString>::const_iterator itr=index.constBegin();itr!=index.constEnd();itr++)
if(index.length()>1)
{
//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(QString(QUrl::toPercentEncoding(libraryName))).arg(parentId).arg(indexPage));
i++;
count += indexCount.value(*itr);
indexPage = count/elementsPerPage;
t.setCondition("alphaIndex",true);
qSort(index.begin(),index.end(),naturalSortLessThanCI);
t.loop("index",index.length());
int i=0;
int count=0;
int indexPage=0;
for(QList<QString>::const_iterator itr=index.constBegin();itr!=index.constEnd();itr++)
{
//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(QString(QUrl::toPercentEncoding(libraryName))).arg(parentId).arg(indexPage));
i++;
count += indexCount.value(*itr);
indexPage = count/elementsPerPage;
}
}
else
{
t.loop("index",0);
t.setCondition("alphaIndex",false);
}
t.loop("page",numPages);
@ -237,13 +258,19 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
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
{
t.loop("page",0);
t.loop("index",0);
t.setCondition("pageIndex",false);
t.setCondition("alphaIndex",false);
}
t.setVariable("page",QString("%1").arg(page+1));
t.setVariable("pages",QString("%1").arg(numPages));
response.write(t.toLatin1(),true);
}

View File

@ -10,12 +10,15 @@ LibrariesController::LibrariesController() {}
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("ySession","ok");
response.setHeader("Content-Type", "text/html; charset=ISO-8859-1");
response.setHeader("Connection","close");
QString postData = QString::fromUtf8(request.getBody());
response.writeText(postData);
//response.writeText(postData);
QList<QString> data = postData.split("\n");
if(data.length() > 2)
@ -30,7 +33,7 @@ void LibrariesController::service(HttpRequest& request, HttpResponse& response)
}
else //valores por defecto, con propositos de depuraci<63>n
{
session.setDeviceType("iphone");
session.setDeviceType("ipad");
session.setDisplayType("retina");
}

View File

@ -11,7 +11,7 @@ PageController::PageController() {}
void PageController::service(HttpRequest& request, HttpResponse& response)
{
HttpSession session=Static::sessionStore->getSession(request,response);
HttpSession session=Static::sessionStore->getSession(request,response,false);
QString path = QUrl::fromPercentEncoding(request.getPath()).toLatin1();
QStringList pathElements = path.split('/');
@ -26,15 +26,15 @@ void PageController::service(HttpRequest& request, HttpResponse& response)
{
if(comicFile->pageIsLoaded(page))
{
response.setHeader("Content-Type", "yacreader/page");
response.setHeader("Content-Type", "image/jpeg");
QByteArray pageData = comicFile->getRawPage(page);
QDataStream data(pageData);
char buffer[65536];
char buffer[4096];
while (!data.atEnd()) {
int len = data.readRawData(buffer,65536);
int len = data.readRawData(buffer,4096);
response.write(QByteArray(buffer,len));
}
//response.write(pageData);
response.write(pageData);
}
else
{