From e4b4f96369de25cb595af85fada1c22c13ff4b81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Thu, 26 Apr 2018 18:27:42 +0200 Subject: [PATCH] Use better http status code to notify clientes about what is going on while loading comics. --- .../controllers/v2/pagecontroller_v2.cpp | 119 +++++++++--------- 1 file changed, 62 insertions(+), 57 deletions(-) diff --git a/YACReaderLibrary/server/controllers/v2/pagecontroller_v2.cpp b/YACReaderLibrary/server/controllers/v2/pagecontroller_v2.cpp index 79279865..2b38bd82 100644 --- a/YACReaderLibrary/server/controllers/v2/pagecontroller_v2.cpp +++ b/YACReaderLibrary/server/controllers/v2/pagecontroller_v2.cpp @@ -21,24 +21,24 @@ void PageControllerV2::service(HttpRequest& request, HttpResponse& response) YACReaderHttpSession *ySession = Static::yacreaderSessionStore->getYACReaderSessionHttpSession(token); if (ySession == nullptr) { - response.setStatus(404,"not found"); - response.write("404 not found",true); + response.setStatus(424,"no session for this comic"); + response.write("424 no session for this comic",true); return; } QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8(); bool remote = path.endsWith("remote"); - - //QByteArray path2=request.getPath(); - //qDebug("PageController: request to -> %s ",path2.data()); - - QStringList pathElements = path.split('/'); - QString libraryName = DBHelper::getLibraryName(pathElements.at(2).toInt()); + + //QByteArray path2=request.getPath(); + //qDebug("PageController: request to -> %s ",path2.data()); + + QStringList pathElements = path.split('/'); + QString libraryName = DBHelper::getLibraryName(pathElements.at(2).toInt()); qulonglong comicId = pathElements.at(5).toULongLong(); unsigned int page = pathElements.at(7).toUInt(); - - //qDebug("lib name : %s",pathElements.at(2).data()); - + + //qDebug("lib name : %s",pathElements.at(2).data()); + Comic * comicFile; qulonglong currentComicId; if(remote) @@ -53,53 +53,58 @@ void PageControllerV2::service(HttpRequest& request, HttpResponse& response) comicFile = ySession->getCurrentComic(); currentComicId = ySession->getCurrentComicId(); } - + if(currentComicId != 0 && !QPointer(comicFile).isNull()) - { - if(comicId == currentComicId && page < comicFile->numPages()) - { - if(comicFile->pageIsLoaded(page)) - { - //qDebug("PageController: La página estaba cargada -> %s ",path.data()); - response.setHeader("Content-Type", "image/jpeg"); - response.setHeader("Transfer-Encoding","chunked"); - QByteArray pageData = comicFile->getRawPage(page); - QDataStream data(pageData); - char buffer[4096]; - while (!data.atEnd()) { - int len = data.readRawData(buffer,4096); - response.write(QByteArray(buffer,len)); - } - //response.write(pageData,true); - response.write(QByteArray(),true); - } - else - { - //qDebug("PageController: La página NO estaba cargada 404 -> %s ",path.data()); - response.setStatus(404,"not found"); //TODO qué mensaje enviar - response.write("404 not found",true); - } - } - else - { - if(comicId != currentComicId) - { - //delete comicFile; - if(remote) - ySession->dismissCurrentRemoteComic(); + { + if (comicFile->numPages() == 0) { + response.setStatus(412,"opening file"); + response.write("412 opening file",true); + } else { + if(comicId == currentComicId && page < comicFile->numPages()) + { + if(comicFile->pageIsLoaded(page)) + { + //qDebug("PageController: La página estaba cargada -> %s ",path.data()); + response.setHeader("Content-Type", "image/jpeg"); + response.setHeader("Transfer-Encoding","chunked"); + QByteArray pageData = comicFile->getRawPage(page); + QDataStream data(pageData); + char buffer[100000]; + while (!data.atEnd()) { + int len = data.readRawData(buffer,100000); + response.write(QByteArray(buffer,len)); + } + //response.write(pageData,true); + response.write(QByteArray(),true); + } else - ySession->dismissCurrentComic(); + { + //qDebug("PageController: La página NO estaba cargada 404 -> %s ",path.data()); + response.setStatus(412,"loading page"); //TODO qué mensaje enviar + response.write("412 loading page",true); + } } - response.setStatus(404,"not found"); //TODO qué mensaje enviar - response.write("404 not found",true); - } - } - else - { - response.setStatus(404,"not found"); - response.write("404 not found",true); - } - - //response.write(t.toLatin1(),true); - + else + { + if(comicId != currentComicId) + { + //delete comicFile; + if(remote) + ySession->dismissCurrentRemoteComic(); + else + ySession->dismissCurrentComic(); + } + response.setStatus(412,"not found"); //TODO qué mensaje enviar + response.write("412 not found",true); + } + } + } + else + { + response.setStatus(404,"not found"); + response.write("404 not found",true); + } + + //response.write(t.toLatin1(),true); + }