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

-