From 4cee4117f8928471a6b4d8b818d8839814c3f716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Sun, 4 Nov 2012 21:02:15 +0100 Subject: [PATCH] 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 --- YACReaderLibrary/library_window.cpp | 24 +++ YACReaderLibrary/library_window.h | 1 + .../server/controllers/comiccontroller.cpp | 2 +- .../server/controllers/covercontroller.cpp | 44 ++++-- .../server/controllers/foldercontroller.cpp | 149 +++++++++++------- .../controllers/librariescontroller.cpp | 11 +- .../server/controllers/pagecontroller.cpp | 10 +- .../bfHttpServer/httpconnectionhandler.cpp | 20 ++- .../server/lib/bfHttpServer/httplistener.cpp | 11 +- .../server/lib/bfHttpServer/httpresponse.cpp | 10 +- .../lib/bfHttpServer/staticfilecontroller.cpp | 96 +++++------ .../server/lib/bfLogging/filelogger.cpp | 4 +- .../server/lib/bfLogging/logger.cpp | 2 +- .../server/lib/bfTemplateEngine/template.cpp | 2 +- YACReaderLibrary/server/requestmapper.cpp | 21 +-- release/server/templates/folder_ipad.tpl | 53 +++++-- release/server/templates/folder_iphone.tpl | 19 ++- .../server/templates/libraries_ipad-es.tpl | 22 --- release/server/templates/libraries_ipad.tpl | 6 +- .../server/templates/libraries_iphone-es.tpl | 22 --- release/server/templates/libraries_iphone.tpl | 2 +- 21 files changed, 311 insertions(+), 220 deletions(-) delete mode 100644 release/server/templates/libraries_ipad-es.tpl delete mode 100644 release/server/templates/libraries_iphone-es.tpl diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index 55883463..358a9a07 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -1420,4 +1420,28 @@ ComicDB LibraryWindow::getComicInfo(const QString & libraryName, qulonglong id) db.close(); QSqlDatabase::removeDatabase(libraries.value(libraryName)); return comic; +} + +QString LibraryWindow::getFolderName(const QString & libraryName, qulonglong id) +{ + QSqlDatabase db = DataBaseManagement::loadDatabase(libraries.value(libraryName)+"/.yacreaderlibrary"); + + QString name=""; + + { + QSqlQuery selectQuery(db); //TODO check + selectQuery.prepare("SELECT name FROM folder WHERE id = :id"); + selectQuery.bindValue(":id", id); + selectQuery.exec(); + + if(selectQuery.next()) + { + QSqlRecord record = selectQuery.record(); + name = record.value(0).toString(); + } + } + + db.close(); + QSqlDatabase::removeDatabase(libraries.value(libraryName)); + return name; } \ No newline at end of file diff --git a/YACReaderLibrary/library_window.h b/YACReaderLibrary/library_window.h index bc27aaae..f16fc538 100644 --- a/YACReaderLibrary/library_window.h +++ b/YACReaderLibrary/library_window.h @@ -214,6 +214,7 @@ public: QList getFolderComicsFromLibrary(const QString & libraryName, qulonglong folderId); qulonglong getParentFromComicFolderId(const QString & libraryName, qulonglong id); ComicDB getComicInfo(const QString & libraryName, qulonglong id); + QString getFolderName(const QString & libraryName, qulonglong id); }; #endif diff --git a/YACReaderLibrary/server/controllers/comiccontroller.cpp b/YACReaderLibrary/server/controllers/comiccontroller.cpp index 2c81f152..89cf9a70 100644 --- a/YACReaderLibrary/server/controllers/comiccontroller.cpp +++ b/YACReaderLibrary/server/controllers/comiccontroller.cpp @@ -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('/'); diff --git a/YACReaderLibrary/server/controllers/covercontroller.cpp b/YACReaderLibrary/server/controllers/covercontroller.cpp index 08ce5ebf..3f8523be 100644 --- a/YACReaderLibrary/server/controllers/covercontroller.cpp +++ b/YACReaderLibrary/server/controllers/covercontroller.cpp @@ -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 libraries = mw->getLibraries(); @@ -25,17 +28,32 @@ void CoverController::service(HttpRequest& request, HttpResponse& response) //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(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); } -} \ No newline at end of file +} + diff --git a/YACReaderLibrary/server/controllers/foldercontroller.cpp b/YACReaderLibrary/server/controllers/foldercontroller.cpp index d54b5b3d..f0921309 100644 --- a/YACReaderLibrary/server/controllers/foldercontroller.cpp +++ b/YACReaderLibrary/server/controllers/foldercontroller.cpp @@ -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
").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 folderContent = mw->getFolderContentFromLibrary(libraryName,parentId); QList 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("Browse").arg(QString("/library/%1/folder/%2").arg(libraryName).arg(item->id))); + t.setVariable(QString("element%1.browse").arg(i),QString("browse").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("Download").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("import").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("Download").arg("/library/"+QUrl::toPercentEncoding(libraryName)+"/comic/"+QString("%1").arg(comic->id))); + t.setVariable(QString("element%1.download").arg(i),QString("import").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("
imported
")); //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)) //ú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
").arg(numComicsAtCurrentPage)); - //response.writeText(QString("comicsOffset : %1
").arg(comicsOffset)); - - t.loop("elementcomic",numComicsAtCurrentPage); // - int j = 0; - while(jinfo.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)) //ú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
").arg(numComicsAtCurrentPage)); + ////response.writeText(QString("comicsOffset : %1
").arg(comicsOffset)); + + //t.loop("elementcomic",numComicsAtCurrentPage); + //// + //int j = 0; + + //while(jinfo.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 indexCount; QString firstChar; @@ -203,20 +213,31 @@ void FolderController::service(HttpRequest& request, HttpResponse& response) } QList 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::const_iterator itr=index.constBegin();itr!=index.constEnd();itr++) + if(index.length()>1) { - //response.writeText(QString("%1 - %2
").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::const_iterator itr=index.constBegin();itr!=index.constEnd();itr++) + { + //response.writeText(QString("%1 - %2
").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); } \ No newline at end of file diff --git a/YACReaderLibrary/server/controllers/librariescontroller.cpp b/YACReaderLibrary/server/controllers/librariescontroller.cpp index fc71a239..8c4efe88 100644 --- a/YACReaderLibrary/server/controllers/librariescontroller.cpp +++ b/YACReaderLibrary/server/controllers/librariescontroller.cpp @@ -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 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ón { - session.setDeviceType("iphone"); + session.setDeviceType("ipad"); session.setDisplayType("retina"); } diff --git a/YACReaderLibrary/server/controllers/pagecontroller.cpp b/YACReaderLibrary/server/controllers/pagecontroller.cpp index 10aeeeab..4d131d6c 100644 --- a/YACReaderLibrary/server/controllers/pagecontroller.cpp +++ b/YACReaderLibrary/server/controllers/pagecontroller.cpp @@ -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 { diff --git a/YACReaderLibrary/server/lib/bfHttpServer/httpconnectionhandler.cpp b/YACReaderLibrary/server/lib/bfHttpServer/httpconnectionhandler.cpp index d3f74860..f3d2ef89 100644 --- a/YACReaderLibrary/server/lib/bfHttpServer/httpconnectionhandler.cpp +++ b/YACReaderLibrary/server/lib/bfHttpServer/httpconnectionhandler.cpp @@ -129,6 +129,7 @@ void HttpConnectionHandler::read() { readTimer.stop(); qDebug("HttpConnectionHandler (%p): received request",this); HttpResponse response(&socket); + //response.setHeader("Connection","close"); No funciona bien con NSURLConnection try { requestHandler->service(*currentRequest, response); } @@ -140,15 +141,18 @@ void HttpConnectionHandler::read() { if (!response.hasSentLastPart()) { response.write(QByteArray(),true); } + + socket.disconnectFromHost(); //CAMBIADO sólo se van a soportar conexiones NO persistentes + // Close the connection after delivering the response, if requested - if (QString::compare(currentRequest->getHeader("Connection"),"close",Qt::CaseInsensitive)==0) { - socket.disconnectFromHost(); - } - else { - // Start timer for next request - int readTimeout=settings->value("readTimeout",10000).toInt(); - readTimer.start(readTimeout); - } + //if (QString::compare(currentRequest->getHeader("Connection"),"close",Qt::CaseInsensitive)==0) { + // socket.disconnectFromHost(); + //} + //else { + // // Start timer for next request + // int readTimeout=settings->value("readTimeout",10000).toInt(); + // readTimer.start(readTimeout); + //} // Prepare for next request delete currentRequest; currentRequest=0; diff --git a/YACReaderLibrary/server/lib/bfHttpServer/httplistener.cpp b/YACReaderLibrary/server/lib/bfHttpServer/httplistener.cpp index bcac23cb..107d1e71 100644 --- a/YACReaderLibrary/server/lib/bfHttpServer/httplistener.cpp +++ b/YACReaderLibrary/server/lib/bfHttpServer/httplistener.cpp @@ -16,9 +16,16 @@ HttpListener::HttpListener(QSettings* settings, HttpRequestHandler* requestHandl // Start listening int port=settings->value("port").toInt(); listen(QHostAddress::Any, port); - if (!isListening()) { - qCritical("HttpListener: Cannot bind on port %i: %s",port,qPrintable(errorString())); + //Cambiado + int i = 0; + while (!isListening() && i < 1000) { + listen(QHostAddress::Any, (rand() % 45535)+20000); + i++; } + if(!isListening()) + { + qCritical("HttpListener: Cannot bind on port %i: %s",port,qPrintable(errorString())); + } else { qDebug("HttpListener: Listening on port %i",port); } diff --git a/YACReaderLibrary/server/lib/bfHttpServer/httpresponse.cpp b/YACReaderLibrary/server/lib/bfHttpServer/httpresponse.cpp index e6b3937b..a1347d5c 100644 --- a/YACReaderLibrary/server/lib/bfHttpServer/httpresponse.cpp +++ b/YACReaderLibrary/server/lib/bfHttpServer/httpresponse.cpp @@ -14,12 +14,12 @@ HttpResponse::HttpResponse(QTcpSocket* socket) { } void HttpResponse::setHeader(QByteArray name, QByteArray value) { - Q_ASSERT(sentHeaders==false); + //Q_ASSERT(sentHeaders==false); headers.insert(name,value); } void HttpResponse::setHeader(QByteArray name, int value) { - Q_ASSERT(sentHeaders==false); + //Q_ASSERT(sentHeaders==false); headers.insert(name,QByteArray::number(value)); } @@ -33,7 +33,7 @@ void HttpResponse::setStatus(int statusCode, QByteArray description) { } void HttpResponse::writeHeaders() { - Q_ASSERT(sentHeaders==false); + //Q_ASSERT(sentHeaders==false); QByteArray buffer; buffer.append("HTTP/1.1 "); buffer.append(QByteArray::number(statusCode)); @@ -67,7 +67,7 @@ void HttpResponse::writeToSocket(QByteArray data) { } void HttpResponse::write(QByteArray data, bool lastPart) { - Q_ASSERT(sentLastPart==false); + //Q_ASSERT(sentLastPart==false); if (sentHeaders==false) { QByteArray connectionMode=headers.value("Connection"); if (!headers.contains("Content-Length") && !headers.contains("Transfer-Encoding") && connectionMode!="close" && connectionMode!="Close") { @@ -115,7 +115,7 @@ bool HttpResponse::hasSentLastPart() const { void HttpResponse::setCookie(const HttpCookie& cookie) { - Q_ASSERT(sentHeaders==false); + //Q_ASSERT(sentHeaders==false); if (!cookie.getName().isEmpty()) { cookies.insert(cookie.getName(),cookie); } diff --git a/YACReaderLibrary/server/lib/bfHttpServer/staticfilecontroller.cpp b/YACReaderLibrary/server/lib/bfHttpServer/staticfilecontroller.cpp index c8c6ace7..cef61697 100644 --- a/YACReaderLibrary/server/lib/bfHttpServer/staticfilecontroller.cpp +++ b/YACReaderLibrary/server/lib/bfHttpServer/staticfilecontroller.cpp @@ -42,61 +42,69 @@ void StaticFileController::service(HttpRequest& request, HttpResponse& response) response.setStatus(403,"forbidden"); response.write("403 forbidden",true); } + + //TODO(DONE) carga sensible al dispositivo y a la localización + QString stringPath = path; + QStringList paths = QString(path).split('/'); + QString fileName = paths.last(); + stringPath.remove(fileName); + HttpSession session=Static::sessionStore->getSession(request,response,false); + QString device = session.getDeviceType(); + fileName = getDeviceAwareFileName(fileName, device, request.getHeader("Accept-Language"), stringPath); + QString newPath = stringPath.append(fileName); + path = newPath.toLocal8Bit(); + + //CAMBIADO + response.setHeader("Connection","close"); + //END_TODO + // Check if we have the file in cache - qint64 now=QDateTime::currentMSecsSinceEpoch(); - mutex.lock(); - CacheEntry* entry=cache.object(path); - if (entry && (cacheTimeout==0 || entry->created>now-cacheTimeout)) { - QByteArray document=entry->document; //copy the cached document, because other threads may destroy the cached entry immediately after mutex unlock. - mutex.unlock(); - qDebug("StaticFileController: Cache hit for %s",path.data()); - setContentType(path,response); - response.setHeader("Cache-Control","max-age="+QByteArray::number(maxAge/1000)); - response.write(document); - } - else { - mutex.unlock(); - qDebug("StaticFileController: Cache miss for %s",path.data()); + //qint64 now=QDateTime::currentMSecsSinceEpoch(); + // mutex.lock(); + // CacheEntry* entry=cache.object(path); + //if (entry && (cacheTimeout==0 || entry->created>now-cacheTimeout)) { + // QByteArray document=entry->document; //copy the cached document, because other threads may destroy the cached entry immediately after mutex unlock. + // mutex.unlock(); + // qDebug("StaticFileController: Cache hit for %s",path.data()); + // setContentType(path,response); + // response.setHeader("Cache-Control","max-age="+QByteArray::number(maxAge/1000)); + // response.write(document); + //} + //else { + + // mutex.unlock(); + //qDebug("StaticFileController: Cache miss for %s",path.data()); // The file is not in cache. // If the filename is a directory, append index.html. if (QFileInfo(docroot+path).isDir()) { path+="/index.html"; } - //TODO(DONE) carga sensible al dispositivo y a la localización - QString stringPath = path; - QStringList paths = QString(path).split('/'); - QString fileName = paths.last(); - stringPath.remove(fileName); - 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); if (file.exists()) { qDebug("StaticFileController: Open file %s",qPrintable(file.fileName())); if (file.open(QIODevice::ReadOnly)) { setContentType(path,response); - response.setHeader("Cache-Control","max-age="+QByteArray::number(maxAge/1000)); - if (file.size()<=maxCachedFileSize) { - // Return the file content and store it also in the cache - entry=new CacheEntry(); + //response.setHeader("Cache-Control","max-age="+QByteArray::number(maxAge/1000)); + //if (file.size()<=maxCachedFileSize) { + // // Return the file content and store it also in the cache + // entry=new CacheEntry(); + // while (!file.atEnd() && !file.error()) { + // QByteArray buffer=file.read(65536); + // response.write(buffer); + // entry->document.append(buffer); + // } + // entry->created=now; + // mutex.lock(); + // cache.insert(request.getPath(),entry,entry->document.size()); + // mutex.unlock(); + //} + //else { + // Return the file content, do not store in cache*/ while (!file.atEnd() && !file.error()) { - QByteArray buffer=file.read(65536); - response.write(buffer); - entry->document.append(buffer); - } - entry->created=now; - mutex.lock(); - cache.insert(request.getPath(),entry,entry->document.size()); - mutex.unlock(); - } - else { - // Return the file content, do not store in cache - while (!file.atEnd() && !file.error()) { - response.write(file.read(65536)); - } + response.write(file.read(131072)); + //} } file.close(); } @@ -110,7 +118,7 @@ void StaticFileController::service(HttpRequest& request, HttpResponse& response) response.setStatus(404,"not found"); response.write("404 not found",true); } - } + //} } void StaticFileController::setContentType(QString fileName, HttpResponse& response) const { @@ -182,7 +190,7 @@ QString StaticFileController::getDeviceAwareFileName(QString fileName, QString d QString baseName = fi.baseName(); QString extension = fi.completeSuffix(); - QString completeFileName = getLocalizedFileName(fileName+"_"+device+"."+extension,locales,path); + QString completeFileName = getLocalizedFileName(baseName+"_"+device+"."+extension,locales,path); if(QFile(docroot+"/"+path+completeFileName).exists()) return completeFileName; //existe un archivo específico para este dispositivo y locales diff --git a/YACReaderLibrary/server/lib/bfLogging/filelogger.cpp b/YACReaderLibrary/server/lib/bfLogging/filelogger.cpp index 7e35a6d9..ed24b4d2 100644 --- a/YACReaderLibrary/server/lib/bfLogging/filelogger.cpp +++ b/YACReaderLibrary/server/lib/bfLogging/filelogger.cpp @@ -53,8 +53,8 @@ void FileLogger::refreshSettings() { FileLogger::FileLogger(QSettings* settings, const int refreshInterval, QObject* parent) : Logger(parent) { - Q_ASSERT(settings!=0); - Q_ASSERT(refreshInterval>=0); + //Q_ASSERT(settings!=0); + //Q_ASSERT(refreshInterval>=0); this->settings=settings; file=0; if (refreshInterval>0) diff --git a/YACReaderLibrary/server/lib/bfLogging/logger.cpp b/YACReaderLibrary/server/lib/bfLogging/logger.cpp index 065bb897..cf559471 100644 --- a/YACReaderLibrary/server/lib/bfLogging/logger.cpp +++ b/YACReaderLibrary/server/lib/bfLogging/logger.cpp @@ -61,7 +61,7 @@ void Logger::msgHandler(const QtMsgType type, const char* message) { // Abort the program after logging a fatal message if (type>=QtFatalMsg) { - abort(); + //abort(); } recursiveMutex.unlock(); diff --git a/YACReaderLibrary/server/lib/bfTemplateEngine/template.cpp b/YACReaderLibrary/server/lib/bfTemplateEngine/template.cpp index daea4b51..787a41ca 100644 --- a/YACReaderLibrary/server/lib/bfTemplateEngine/template.cpp +++ b/YACReaderLibrary/server/lib/bfTemplateEngine/template.cpp @@ -114,7 +114,7 @@ int Template::setCondition(QString name, bool value) { } int Template::loop(QString name, int repetitions) { - Q_ASSERT(repetitions>=0); + //Q_ASSERT(repetitions>=0); int count=0; QString startTag="{loop "+name+"}"; QString elseTag="{else "+name+"}"; diff --git a/YACReaderLibrary/server/requestmapper.cpp b/YACReaderLibrary/server/requestmapper.cpp index 31fc39be..d7a64aa2 100644 --- a/YACReaderLibrary/server/requestmapper.cpp +++ b/YACReaderLibrary/server/requestmapper.cpp @@ -31,14 +31,15 @@ void RequestMapper::service(HttpRequest& request, HttpResponse& response) { QByteArray path=request.getPath(); qDebug("RequestMapper: path=%s",path.data()); - QRegExp folder("/library/.+/folder/[0-9]+/?");//(?page=[0-9]+)? - QRegExp folderInfo("/library/.+/folder/[0-9]+/info/?"); - QRegExp comic("/library/.+/comic/[0-9]+/?"); - QRegExp comicClose("/library/.+/comic/[0-9]+/close/?"); - QRegExp cover("/library/.+/cover/[0-9a-f]+.jpg"); - QRegExp comicPage("/library/.+/comic/[0-9]+/page/[0-9]+/?"); + QRegExp folder("/library/.+/folder/[0-9]+/?");//get comic content + 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]+/open/?"); //the server will open for reading the comic + 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 - QRegExp library("/library/([^/.]+)/.+"); + QRegExp library("/library/([^/.]+)/.+"); //permite verificar que la biblioteca solicitada existe path = QUrl::fromPercentEncoding(path).toLatin1(); @@ -51,8 +52,8 @@ void RequestMapper::service(HttpRequest& request, HttpResponse& response) { else { //se comprueba que la sesión sea la correcta con el fin de evitar accesos no autorizados - HttpSession session=Static::sessionStore->getSession(request,response); - if(session.contains("ySession")) + HttpSession session=Static::sessionStore->getSession(request,response,false); + if(!session.isNull() && session.contains("ySession")) { if(library.indexIn(path)!=-1 && mw->getLibraries().contains(library.cap(1)) ) { @@ -80,7 +81,7 @@ void RequestMapper::service(HttpRequest& request, HttpResponse& response) { } else { - response.writeText(library.cap(1)); + //response.writeText(library.cap(1)); Static::staticFileController->service(request, response); } } diff --git a/release/server/templates/folder_ipad.tpl b/release/server/templates/folder_ipad.tpl index e5e2c3aa..24aa214e 100644 --- a/release/server/templates/folder_ipad.tpl +++ b/release/server/templates/folder_ipad.tpl @@ -3,28 +3,61 @@ - Login + Folder

BROWSE AND IMPORT

-

nombre folder?

+

{folder.name} {if pageIndex} - PAGE {page} OF {pages}{end pageIndex}

- Libraries up +
{if pageIndex} {end pageIndex} up Libraries
- +
    {loop element} -
  • {element.name}

    {element.browse} - {element.download}
  • +
  • {element.name}

    {element.download} {element.browse}
  • {end element}
- -
{loop index} {index.indexname} {end index}
-
-
{loop page} {page.number} {end page}
- +
 
+
 
+ + {if alphaIndex} + +
+ +
 
+
+
 
+ + {end alphaIndex} + + + {if pageIndex} + +
+ +
 
+
+
 
+ {end pageIndex} + + diff --git a/release/server/templates/folder_iphone.tpl b/release/server/templates/folder_iphone.tpl index a193ad6d..231a6843 100644 --- a/release/server/templates/folder_iphone.tpl +++ b/release/server/templates/folder_iphone.tpl @@ -9,19 +9,22 @@

BROWSE AND IMPORT

-

nombre folder?

+

{folder.name} {if pageIndex} - PAGE {page} OF {pages} {end pageIndex}

- Libraries up +
Libraries up {if pageIndex} {end pageIndex}
- +
    {loop element} -
  • {element.name}

    {element.browse} - {element.download}
  • +
  • {element.name}

    {element.download} {element.browse}
  • {end element} -
+ +
 
+
 
+ {if alphaIndex}
    {loop index} @@ -34,6 +37,10 @@
 
+ {end alphaIndex} + + + {if pageIndex}
    @@ -49,5 +56,7 @@
 
+ {end pageIndex} + diff --git a/release/server/templates/libraries_ipad-es.tpl b/release/server/templates/libraries_ipad-es.tpl deleted file mode 100644 index 128bc2ce..00000000 --- a/release/server/templates/libraries_ipad-es.tpl +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Login - - -
-

BIBLIOTECAS

-

Selecciona una biblioteca

-

-

-

-
-
 
- - \ No newline at end of file diff --git a/release/server/templates/libraries_ipad.tpl b/release/server/templates/libraries_ipad.tpl index 73821b92..e4bb6a35 100644 --- a/release/server/templates/libraries_ipad.tpl +++ b/release/server/templates/libraries_ipad.tpl @@ -6,17 +6,17 @@ Login -
+

LIBRARIES

Select a comic library

-

-
 
+
 
\ No newline at end of file diff --git a/release/server/templates/libraries_iphone-es.tpl b/release/server/templates/libraries_iphone-es.tpl deleted file mode 100644 index b6fd5661..00000000 --- a/release/server/templates/libraries_iphone-es.tpl +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Login - - -
-

BIBLIOTECAS

-

Selecciona una biblioteca

-

-

-

-
-
 
- - \ No newline at end of file diff --git a/release/server/templates/libraries_iphone.tpl b/release/server/templates/libraries_iphone.tpl index 73821b92..a438be81 100644 --- a/release/server/templates/libraries_iphone.tpl +++ b/release/server/templates/libraries_iphone.tpl @@ -10,7 +10,7 @@

LIBRARIES

Select a comic library

-