From e00d76b81ab6b102420813a4aa921f09642a79eb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?=
 <luisangelsm@gmail.com>
Date: Thu, 26 Mar 2015 22:10:51 +0100
Subject: [PATCH] added a dummy (yet) SyncController for testing sync info from
 iOS

---
 .../server/controllers/synccontroller.cpp     |  25 ++++
 .../server/controllers/synccontroller.h       |  21 ++++
 YACReaderLibrary/server/requestmapper.cpp     | 116 +++++++++---------
 YACReaderLibrary/server/server.pri            |  42 ++++---
 4 files changed, 128 insertions(+), 76 deletions(-)
 create mode 100644 YACReaderLibrary/server/controllers/synccontroller.cpp
 create mode 100644 YACReaderLibrary/server/controllers/synccontroller.h

diff --git a/YACReaderLibrary/server/controllers/synccontroller.cpp b/YACReaderLibrary/server/controllers/synccontroller.cpp
new file mode 100644
index 00000000..14a2ed2a
--- /dev/null
+++ b/YACReaderLibrary/server/controllers/synccontroller.cpp
@@ -0,0 +1,25 @@
+#include "synccontroller.h"
+
+#include "QsLog.h"
+#include <QUrl>
+
+SyncController::SyncController()
+{
+
+}
+
+void SyncController::service(HttpRequest &request, HttpResponse &response)
+{
+    QString path = QUrl::fromPercentEncoding(request.getPath()).toUtf8();
+    QStringList pathElements = path.split('/');
+    qulonglong libraryId = pathElements.at(2).toULongLong();
+
+    QString postData = QString::fromUtf8(request.getBody());
+
+    QLOG_INFO() << "POST DATA: " << postData;
+
+    //TODO Process postData and update the comics
+
+    response.write("OK",true);
+}
+
diff --git a/YACReaderLibrary/server/controllers/synccontroller.h b/YACReaderLibrary/server/controllers/synccontroller.h
new file mode 100644
index 00000000..6f6a5d76
--- /dev/null
+++ b/YACReaderLibrary/server/controllers/synccontroller.h
@@ -0,0 +1,21 @@
+#ifndef SYNCCONTROLLER_H
+#define SYNCCONTROLLER_H
+
+#include <QObject>
+
+#include "httprequest.h"
+#include "httpresponse.h"
+#include "httprequesthandler.h"
+
+class SyncController : public HttpRequestHandler {
+    Q_OBJECT
+    Q_DISABLE_COPY(SyncController);
+public:
+    /** Constructor */
+    SyncController();
+
+    /** Generates the response */
+    void service(HttpRequest& request, HttpResponse& response);
+};
+
+#endif // SYNCCONTROLLER_H
diff --git a/YACReaderLibrary/server/requestmapper.cpp b/YACReaderLibrary/server/requestmapper.cpp
index 87057869..3da463f4 100644
--- a/YACReaderLibrary/server/requestmapper.cpp
+++ b/YACReaderLibrary/server/requestmapper.cpp
@@ -21,6 +21,7 @@
 #include "controllers/updatecomiccontroller.h"
 #include "controllers/errorcontroller.h"
 #include "controllers/comicdownloadinfocontroller.h"
+#include "controllers/synccontroller.h"
 
 #include "db_helper.h"
 #include "yacreader_libraries.h"
@@ -91,81 +92,84 @@ void RequestMapper::loadSession(HttpRequest & request, HttpResponse& response)
 }
 
 void RequestMapper::service(HttpRequest& request, HttpResponse& response) {
-	QByteArray path=request.getPath();
-	qDebug("RequestMapper: path=%s",path.data());
+    QByteArray path=request.getPath();
+    qDebug("RequestMapper: path=%s",path.data());
 
-	QRegExp folder("/library/.+/folder/[0-9]+/?");//get comic content
-	QRegExp folderInfo("/library/.+/folder/[0-9]+/info/?"); //get folder info
+    QRegExp folder("/library/.+/folder/[0-9]+/?");//get comic content
+    QRegExp folderInfo("/library/.+/folder/[0-9]+/info/?"); //get folder info
     QRegExp comicDownloadInfo("/library/.+/comic/[0-9]+/?"); //get comic info (basic/download info)
     QRegExp comicFullInfo("/library/.+/comic/[0-9]+/info/?"); //get comic info (full info)
     QRegExp comicOpen("/library/.+/comic/[0-9]+/remote/?"); //the server will open for reading the comic
     QRegExp comicUpdate("/library/.+/comic/[0-9]+/update/?"); //get comic info
-	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 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 comicPageRemote("/library/.+/comic/[0-9]+/page/[0-9]+/remote?"); //get comic page (remote reading)
 
+    QRegExp sync("/library/.+/sync");
+
     QRegExp library("/library/([0-9]+)/.+"); //permite verificar que la biblioteca solicitada existe
 
     path = QUrl::fromPercentEncoding(path).toUtf8();
 
     loadSession(request, response);
 
-	//primera petición, se ha hecho un post, se sirven las bibliotecas si la seguridad mediante login no está habilitada
+    //primera petición, se ha hecho un post, se sirven las bibliotecas si la seguridad mediante login no está habilitada
     if(path == "/")  //Don't send data to the server using '/' !!!!
     {
-		LibrariesController().service(request, 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,false);
-        if(!session.isNull() && session.contains("ySession"))
+        LibrariesController().service(request, response);
+    }
+    else
+    {
+        if(sync.exactMatch(path))
+            SyncController().service(request, response);
         {
-		if(library.indexIn(path)!=-1 && DBHelper::getLibraries().contains(library.cap(1).toInt()) )
-			{
-				//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(comicDownloadInfo.exactMatch(path))
+            //se comprueba que la sesión sea la correcta con el fin de evitar accesos no autorizados
+            HttpSession session=Static::sessionStore->getSession(request,response,false);
+            if(!session.isNull() && session.contains("ySession"))
+            {
+                if(library.indexIn(path)!=-1 && DBHelper::getLibraries().contains(library.cap(1).toInt()) )
                 {
-                    ComicDownloadInfoController().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(comicDownloadInfo.exactMatch(path))
+                    {
+                        ComicDownloadInfoController().service(request, response);
+                    }
+                    else if(comicFullInfo.exactMatch(path) || comicOpen.exactMatch(path))//start download or start remote reading
+                    {
+                        ComicController().service(request, response);
+                    }
+                    else if(comicPage.exactMatch(path) || comicPageRemote.exactMatch(path))
+                    {
+                        PageController().service(request,response);
+                    }
+                    else if(comicUpdate.exactMatch(path))
+                    {
+                        UpdateComicController().service(request, response);
+                    }
                 }
-                else if(comicFullInfo.exactMatch(path) || comicOpen.exactMatch(path))//start download or start remote reading
-				{
-                    ComicController().service(request, response);
-				}
-                else if(comicPage.exactMatch(path) || comicPageRemote.exactMatch(path))
-				{
-                    PageController().service(request,response);
-                }
-                else if(comicUpdate.exactMatch(path))
+                else
                 {
-                    UpdateComicController().service(request, response);
+                    //response.writeText(library.cap(1));
+                    Static::staticFileController->service(request, response);
                 }
-			}
-			else
-			{
-				//response.writeText(library.cap(1));
-				Static::staticFileController->service(request, response);
-			}
+            }
+            else //acceso no autorizado, redirección
+            {
+                ErrorController(300).service(request,response);
+            }
         }
-        else //acceso no autorizado, redirección
-        {
-            ErrorController(300).service(request,response);
-        }
-	}
-
+    }
 }
diff --git a/YACReaderLibrary/server/server.pri b/YACReaderLibrary/server/server.pri
index 5fc65043..4be20612 100644
--- a/YACReaderLibrary/server/server.pri
+++ b/YACReaderLibrary/server/server.pri
@@ -5,31 +5,33 @@ HEADERS += \
     $$PWD/static.h \
     $$PWD/startup.h \
     $$PWD/requestmapper.h \
-	$$PWD/controllers/comiccontroller.h \ 
-	$$PWD/controllers/errorcontroller.h \
-	$$PWD/controllers/foldercontroller.h \
-	$$PWD/controllers/folderinfocontroller.h \
-	$$PWD/controllers/librariescontroller.h \
-	$$PWD/controllers/pagecontroller.h \
-	$$PWD/controllers/sessionmanager.h \
-	$$PWD/controllers/covercontroller.h \ 
-    server/controllers/updatecomiccontroller.h \
-    server/controllers/comicdownloadinfocontroller.h
+    $$PWD/controllers/comiccontroller.h \
+    $$PWD/controllers/errorcontroller.h \
+    $$PWD/controllers/foldercontroller.h \
+    $$PWD/controllers/folderinfocontroller.h \
+    $$PWD/controllers/librariescontroller.h \
+    $$PWD/controllers/pagecontroller.h \
+    $$PWD/controllers/sessionmanager.h \
+    $$PWD/controllers/covercontroller.h \
+    $$PWD/controllers/updatecomiccontroller.h \
+    $$PWD/controllers/comicdownloadinfocontroller.h \
+    $$PWD/controllers/synccontroller.h
 
 SOURCES += \
     $$PWD/static.cpp \
     $$PWD/startup.cpp \
     $$PWD/requestmapper.cpp \
-	$$PWD/controllers/comiccontroller.cpp \
-	$$PWD/controllers/errorcontroller.cpp \
-	$$PWD/controllers/foldercontroller.cpp \
-	$$PWD/controllers/folderinfocontroller.cpp \
-	$$PWD/controllers/librariescontroller.cpp \
-	$$PWD/controllers/pagecontroller.cpp \
-	$$PWD/controllers/sessionmanager.cpp \
-	$$PWD/controllers/covercontroller.cpp \
-    server/controllers/updatecomiccontroller.cpp \
-    server/controllers/comicdownloadinfocontroller.cpp
+    $$PWD/controllers/comiccontroller.cpp \
+    $$PWD/controllers/errorcontroller.cpp \
+    $$PWD/controllers/foldercontroller.cpp \
+    $$PWD/controllers/folderinfocontroller.cpp \
+    $$PWD/controllers/librariescontroller.cpp \
+    $$PWD/controllers/pagecontroller.cpp \
+    $$PWD/controllers/sessionmanager.cpp \
+    $$PWD/controllers/covercontroller.cpp \
+    $$PWD/controllers/updatecomiccontroller.cpp \
+    $$PWD/controllers/comicdownloadinfocontroller.cpp \
+    $$PWD/controllers/synccontroller.cpp
 	
 include(lib/bfLogging/bfLogging.pri)
 include(lib/bfHttpServer/bfHttpServer.pri)