\n"
+ "
\n"
+ "YACReaderLibraryServer is up and running.
\n"
+ "YACReader {yr.version}
\n"
+ "
Server {server.version}
\n"
+ "
OS:\t{os.name} {os.version}
\n"
+ "Port:\t{os.port}
\n"
+ "\n"
+ "\n"
+ "\n"
+ "| Library | \n"
+ "Path | \n"
+ "
\n"
+ "\n"
+ "{loop Library}"
+ "\n"
+ "| {Library.Name} | \n"
+ "{Library.Path} | \n"
+ "
\n"
+ "{end Library}"
+ "\n"
+ "\n"
+ "\n"
+ "\n"),
+
+ "StatusPage");
+
+ StatusPage.enableWarnings();
+
+ // Set template variables
+ StatusPage.setVariable("os.name", QSysInfo::prettyProductName());
+ StatusPage.setVariable("os.version", QSysInfo::productVersion());
+ // Getting the port from the request is basically a hack, but should do the trick
+ StatusPage.setVariable("os.port", QString(request.getHeader("host")).split(":")[1]);
+
+ StatusPage.setVariable("server.version", SERVER_VERSION_NUMBER);
+ StatusPage.setVariable("yr.version", VERSION);
+
+ // Get library info
+ YACReaderLibraries libraries = DBHelper::getLibraries();
+ QList library_names = libraries.getNames();
+ size_t num_libs = libraries.getNames().size();
+
+ // Fill template
+ StatusPage.loop("Library", num_libs);
+ for (size_t i = 0; i < num_libs; i++) {
+ StatusPage.setVariable(QString("Library%1.Name").arg(i), library_names.at(i));
+ StatusPage.setVariable(QString("Library%1.Path").arg(i), libraries.getPath(library_names.at(i)));
+ }
+
+ response.write(StatusPage.toUtf8(), true);
+}
diff --git a/YACReaderLibrary/server/controllers/webui/statuspagecontroller.h b/YACReaderLibrary/server/controllers/webui/statuspagecontroller.h
new file mode 100644
index 00000000..22dae09f
--- /dev/null
+++ b/YACReaderLibrary/server/controllers/webui/statuspagecontroller.h
@@ -0,0 +1,19 @@
+#ifndef STATUSPAGE_CONTROLLER
+#define STATUSPAGE_CONTROLLER
+
+#include "httprequest.h"
+#include "httpresponse.h"
+#include "httprequesthandler.h"
+
+class StatusPageController : public stefanfrings::HttpRequestHandler
+{
+ Q_OBJECT
+ Q_DISABLE_COPY(StatusPageController);
+
+public:
+ StatusPageController();
+
+ void service(stefanfrings::HttpRequest &request, stefanfrings::HttpResponse &response) override;
+};
+
+#endif // STATUSPAGE_CONTROLLER
diff --git a/YACReaderLibrary/server/requestmapper.cpp b/YACReaderLibrary/server/requestmapper.cpp
index c0694c97..4051b6f2 100644
--- a/YACReaderLibrary/server/requestmapper.cpp
+++ b/YACReaderLibrary/server/requestmapper.cpp
@@ -41,6 +41,8 @@
#include "controllers/v2/comicfullinfocontroller_v2.h"
#include "controllers/v2/comiccontrollerinreadinglist_v2.h"
+#include "controllers/webui/statuspagecontroller.h"
+
#include "db_helper.h"
#include "yacreader_libraries.h"
@@ -159,11 +161,18 @@ void RequestMapper::service(HttpRequest &request, HttpResponse &response)
if (path.startsWith("/v2")) {
serviceV2(request, response);
+ } else if (path.startsWith("/webui")) {
+ serviceWebUI(request, response);
} else {
serviceV1(request, response);
}
}
+void RequestMapper::serviceWebUI(HttpRequest &request, HttpResponse &response)
+{
+ StatusPageController().service(request, response);
+}
+
void RequestMapper::serviceV1(HttpRequest &request, HttpResponse &response)
{
QByteArray path = request.getPath();
@@ -273,6 +282,7 @@ void RequestMapper::serviceV2(HttpRequest &request, HttpResponse &response)
VersionController().service(request, response);
} else if (sync.exactMatch(path)) {
SyncControllerV2().service(request, response);
+ emit clientSync();
} else {
if (library.indexIn(path) != -1 && DBHelper::getLibraries().contains(library.cap(1).toInt())) {
if (folderInfo.exactMatch(path)) {
@@ -290,7 +300,12 @@ void RequestMapper::serviceV2(HttpRequest &request, HttpResponse &response)
} else if (comicPage.exactMatch(path) || comicPageRemote.exactMatch(path)) {
PageControllerV2().service(request, response);
} else if (comicUpdate.exactMatch(path)) {
- UpdateComicControllerV2().service(request, response);
+ auto updateController = UpdateComicControllerV2();
+ updateController.service(request, response);
+
+ if (!updateController.error) {
+ emit comicUpdated(updateController.updatedLibraryId, updateController.updatedComicId);
+ }
} else if (folderContent.exactMatch(path)) {
FolderContentControllerV2().service(request, response);
} else if (tags.exactMatch(path)) {
diff --git a/YACReaderLibrary/server/requestmapper.h b/YACReaderLibrary/server/requestmapper.h
index ba786f07..4ec435fa 100644
--- a/YACReaderLibrary/server/requestmapper.h
+++ b/YACReaderLibrary/server/requestmapper.h
@@ -20,9 +20,14 @@ public:
void loadSessionV1(stefanfrings::HttpRequest &request, stefanfrings::HttpResponse &response);
void loadSessionV2(stefanfrings::HttpRequest &request, stefanfrings::HttpResponse &response);
+signals:
+ void clientSync();
+ void comicUpdated(qulonglong libraryId, qulonglong comicId);
+
private:
void serviceV1(stefanfrings::HttpRequest &request, stefanfrings::HttpResponse &response);
void serviceV2(stefanfrings::HttpRequest &request, stefanfrings::HttpResponse &response);
+ void serviceWebUI(stefanfrings::HttpRequest &request, stefanfrings::HttpResponse &response);
static QMutex mutex;
};
diff --git a/YACReaderLibrary/server/server.pri b/YACReaderLibrary/server/server.pri
index 9c17a2b3..345ea1cc 100644
--- a/YACReaderLibrary/server/server.pri
+++ b/YACReaderLibrary/server/server.pri
@@ -10,8 +10,8 @@ DEPENDPATH += $$PWD/controllers/v2
HEADERS += \
$$PWD/static.h \
- $$PWD/startup.h \
$$PWD/requestmapper.h \
+ $$PWD/yacreader_http_server.h \
$$PWD/yacreader_http_session.h \
$$PWD/yacreader_http_session_store.h \
$$PWD/yacreader_server_data_helper.h \
@@ -47,13 +47,15 @@ HEADERS += \
$$PWD/controllers/v2/comicfullinfocontroller_v2.h \
$$PWD/controllers/v2/readinglistinfocontroller_v2.h \
$$PWD/controllers/v2/taginfocontroller_v2.h \
- $$PWD/controllers/v2/comiccontrollerinreadinglist_v2.h
+ $$PWD/controllers/v2/comiccontrollerinreadinglist_v2.h\
+ #Browser
+ $$PWD/controllers/webui/statuspagecontroller.h
SOURCES += \
$$PWD/static.cpp \
- $$PWD/startup.cpp \
$$PWD/requestmapper.cpp \
+ $$PWD/yacreader_http_server.cpp \
$$PWD/yacreader_http_session.cpp \
$$PWD/yacreader_http_session_store.cpp \
$$PWD/yacreader_server_data_helper.cpp \
@@ -89,7 +91,9 @@ SOURCES += \
$$PWD/controllers/v2/comicfullinfocontroller_v2.cpp \
$$PWD/controllers/v2/readinglistinfocontroller_v2.cpp \
$$PWD/controllers/v2/taginfocontroller_v2.cpp \
- $$PWD/controllers/v2/comiccontrollerinreadinglist_v2.cpp
+ $$PWD/controllers/v2/comiccontrollerinreadinglist_v2.cpp \
+ #WebUI
+ $$PWD/controllers/webui/statuspagecontroller.cpp
include(../../third_party/QtWebApp/httpserver/httpserver.pri)
include(../../third_party/QtWebApp/templateengine/templateengine.pri)
diff --git a/YACReaderLibrary/server/startup.h b/YACReaderLibrary/server/startup.h
deleted file mode 100644
index 1c6d992c..00000000
--- a/YACReaderLibrary/server/startup.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- @file
- @author Stefan Frings
-*/
-
-#ifndef STARTUP_H
-#define STARTUP_H
-
-#include
-
-namespace stefanfrings {
-class HttpListener;
-}
-
-/**
- Helper class to install and run the application as a windows
- service.
-*/
-class Startup
-{
-private:
- // QTcpServer
- stefanfrings::HttpListener *listener;
-
-public:
- /** Constructor */
- Startup();
- /** Start the server */
- void start(quint16 port = 0);
- /** Stop the server */
- void stop();
-
- QString getPort();
-
-protected:
-};
-
-#endif // STARTUP_H
diff --git a/YACReaderLibrary/server/startup.cpp b/YACReaderLibrary/server/yacreader_http_server.cpp
similarity index 87%
rename from YACReaderLibrary/server/startup.cpp
rename to YACReaderLibrary/server/yacreader_http_server.cpp
index b31c475b..40ba799d 100644
--- a/YACReaderLibrary/server/startup.cpp
+++ b/YACReaderLibrary/server/yacreader_http_server.cpp
@@ -4,7 +4,7 @@
*/
#include "static.h"
-#include "startup.h"
+#include "yacreader_http_server.h"
//#include "dualfilelogger.h"
#include "httplistener.h"
#include "requestmapper.h"
@@ -32,7 +32,7 @@ using stefanfrings::HttpSessionStore;
using stefanfrings::StaticFileController;
using stefanfrings::TemplateCache;
-void Startup::start(quint16 port)
+void YACReaderHttpServer::start(quint16 port)
{
// Initialize the core application
QCoreApplication *app = QCoreApplication::instance();
@@ -53,8 +53,8 @@ void Startup::start(quint16 port)
#else
templatePath = QFileInfo(QCoreApplication::applicationDirPath(), baseTemplatePath).absoluteFilePath();
#endif
-
- templateSettings->setValue("path", templatePath);
+ if (!templateSettings->contains("path"))
+ templateSettings->setValue("path", templatePath);
Static::templateLoader = new TemplateCache(templateSettings, app);
@@ -84,7 +84,8 @@ void Startup::start(quint16 port)
docroot = QFileInfo(QCoreApplication::applicationDirPath(), basedocroot).absoluteFilePath();
#endif
- fileSettings->setValue("path", docroot);
+ if (!fileSettings->contains("path"))
+ fileSettings->setValue("path", docroot);
Static::staticFileController = new StaticFileController(fileSettings, app);
@@ -137,7 +138,11 @@ void Startup::start(quint16 port)
testServer.close();
}
- listener = new HttpListener(listenerSettings, new RequestMapper(app), app);
+ auto requestMapper = new RequestMapper(app);
+ listener = new HttpListener(listenerSettings, requestMapper, app);
+
+ connect(requestMapper, &RequestMapper::comicUpdated, this, &YACReaderHttpServer::comicUpdated);
+ connect(requestMapper, &RequestMapper::clientSync, this, &YACReaderHttpServer::clientSync);
if (listener->isListening()) {
qDebug("ServiceHelper: Service has started");
@@ -146,7 +151,7 @@ void Startup::start(quint16 port)
}
}
-void Startup::stop()
+void YACReaderHttpServer::stop()
{
qDebug("ServiceHelper: Service has been stopped");
// QCoreApplication destroys all objects that have been created in start().
@@ -157,12 +162,12 @@ void Startup::stop()
}
}
-Startup::Startup()
- : listener(nullptr)
+YACReaderHttpServer::YACReaderHttpServer()
+ : QObject(nullptr), listener(nullptr)
{
}
-QString Startup::getPort()
+QString YACReaderHttpServer::getPort()
{
return QString("%1").arg(listener->serverPort());
}
diff --git a/YACReaderLibrary/server/yacreader_http_server.h b/YACReaderLibrary/server/yacreader_http_server.h
new file mode 100644
index 00000000..ba5d9f54
--- /dev/null
+++ b/YACReaderLibrary/server/yacreader_http_server.h
@@ -0,0 +1,30 @@
+#ifndef YACREADER_HTTP_SERVER_H
+#define YACREADER_HTTP_SERVER_H
+
+#include
+#include
+
+namespace stefanfrings {
+class HttpListener;
+}
+
+class YACReaderHttpServer : public QObject
+{
+ Q_OBJECT
+public:
+ YACReaderHttpServer();
+
+ void start(quint16 port = 0);
+ void stop();
+
+ QString getPort();
+
+signals:
+ void clientSync();
+ void comicUpdated(qulonglong libraryId, qulonglong comicId);
+
+private:
+ stefanfrings::HttpListener *listener;
+};
+
+#endif // YACREADER_HTTP_SERVER_H
diff --git a/YACReaderLibrary/server_config_dialog.cpp b/YACReaderLibrary/server_config_dialog.cpp
index ab4b4e68..d16211eb 100644
--- a/YACReaderLibrary/server_config_dialog.cpp
+++ b/YACReaderLibrary/server_config_dialog.cpp
@@ -11,7 +11,7 @@
#include
#include
-#include "startup.h"
+#include "yacreader_http_server.h"
#include "yacreader_global_gui.h"
#include "qnaturalsorting.h"
@@ -78,7 +78,7 @@ QList addresses()
#endif
-extern Startup *s;
+extern YACReaderHttpServer *httpServer;
ServerConfigDialog::ServerConfigDialog(QWidget *parent)
: QDialog(parent)
@@ -184,11 +184,11 @@ void ServerConfigDialog::enableServer(int status)
settings->beginGroup("libraryConfig");
if (status == Qt::Checked) {
- s->start();
+ httpServer->start();
this->generateQR();
settings->setValue(SERVER_ON, true);
} else {
- s->stop();
+ httpServer->stop();
qrCode->setPixmap(QPixmap());
ip->clear();
port->setText("");
@@ -247,14 +247,14 @@ void ServerConfigDialog::generateQR()
if (otherAddresses.length() > 0 || !dir.isEmpty()) {
if (!dir.isEmpty()) {
- generateQR(dir + ":" + s->getPort());
+ generateQR(dir + ":" + httpServer->getPort());
ip->addItem(dir);
} else {
- generateQR(otherAddresses.first() + ":" + s->getPort());
+ generateQR(otherAddresses.first() + ":" + httpServer->getPort());
}
ip->addItems(otherAddresses);
- port->setText(s->getPort());
+ port->setText(httpServer->getPort());
}
}
@@ -280,7 +280,7 @@ void ServerConfigDialog::generateQR(const QString &serverAddress)
void ServerConfigDialog::regenerateQR(const QString &ip)
{
- generateQR(ip + ":" + s->getPort());
+ generateQR(ip + ":" + httpServer->getPort());
}
void ServerConfigDialog::updatePort()
@@ -291,8 +291,8 @@ void ServerConfigDialog::updatePort()
settings->setValue("port", port->text().toInt());
settings->endGroup();
- s->stop();
- s->start();
+ httpServer->stop();
+ httpServer->start();
generateQR(ip->currentText() + ":" + port->text());
}
@@ -303,6 +303,13 @@ QrEncoder::QrEncoder()
QLibrary encoder(QCoreApplication::applicationDirPath() + "/utils/libqrencode.dylib");
#else
QLibrary encoder("qrencode");
+#ifdef Q_OS_UNIX
+ encoder.load();
+ // Fallback - this loads libqrencode.4.x.x.so when libqrencode.so is not available
+ if (!encoder.isLoaded()) {
+ encoder.setFileNameAndVersion("qrencode", 4);
+ }
+#endif
#endif
QRcode_encodeString8bit = (_QRcode_encodeString8bit)encoder.resolve("QRcode_encodeString8bit");
QRcode_free = (_QRcode_free)encoder.resolve("QRcode_free");
diff --git a/YACReaderLibrary/xml_info_library_scanner.cpp b/YACReaderLibrary/xml_info_library_scanner.cpp
index 223bc13c..3170b269 100644
--- a/YACReaderLibrary/xml_info_library_scanner.cpp
+++ b/YACReaderLibrary/xml_info_library_scanner.cpp
@@ -6,6 +6,7 @@
#include "initial_comic_info_extractor.h"
#include "xml_info_parser.h"
#include "yacreader_global.h"
+#include "folder_item.h"
#include "QsLog.h"
@@ -23,6 +24,21 @@ void XMLInfoLibraryScanner::scanLibrary(const QString &source, const QString &ta
this->stopRunning = false;
+ partialUpdate = false;
+
+ start();
+}
+
+void XMLInfoLibraryScanner::scanFolder(const QString &source, const QString &target, const QString &folder, const QModelIndex &dest)
+{
+ this->source = source;
+ this->target = target;
+
+ this->stopRunning = false;
+
+ partialUpdate = true;
+ folderDestinationModelIndex = dest;
+
start();
}
@@ -52,36 +68,29 @@ void XMLInfoLibraryScanner::run()
database.transaction();
- QSqlQuery comicsInfo("SELECT * FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id)", database);
- comicsInfo.exec();
+ if (!partialUpdate) {
+ QSqlQuery comicsInfo("SELECT * FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id)", database);
+ comicsInfo.exec();
- QSqlRecord record = comicsInfo.record();
+ updateFromSQLQuery(database, comicsInfo);
+ } else {
+ if (folderDestinationModelIndex.isValid()) {
+ YACReader::iterate(folderDestinationModelIndex, folderDestinationModelIndex.model(), [&](const QModelIndex &idx) {
+ if (stopRunning) {
+ return false;
+ }
- int id = record.indexOf("id");
- // int parentIdIndex = record.indexOf("parentId");
- int fileNameIndex = record.indexOf("fileName");
- int pathIndex = record.indexOf("path");
+ auto item = static_cast(idx.internalPointer());
- while (comicsInfo.next()) {
- if (this->stopRunning) {
- break;
- }
- /* currentItem.id = selectQuery.value(id).toULongLong();
- currentItem.parentId = parentId; //selectQuery.value(parentId).toULongLong();
- currentItem.name = selectQuery.value(fileName).toString(); */
- auto fileName = comicsInfo.value(fileNameIndex).toString();
- auto path = comicsInfo.value(pathIndex).toString();
+ QSqlQuery comicsInfo(database);
+ comicsInfo.prepare("SELECT * FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) WHERE c.parentId = :parentId");
+ comicsInfo.bindValue(":parentId", item->id);
+ comicsInfo.exec();
- emit comicScanned(path, fileName);
+ updateFromSQLQuery(database, comicsInfo);
- auto info = DBHelper::getComicInfoFromQuery(comicsInfo, "comicInfoId");
-
- InitialComicInfoExtractor ie(QDir::cleanPath(this->source + path), "None");
-
- ie.extract();
-
- if (parseXMLIntoInfo(ie.getXMLInfoRawData(), info)) {
- DBHelper::update(&info, database);
+ return true;
+ });
}
}
@@ -96,3 +105,33 @@ void XMLInfoLibraryScanner::stop()
{
stopRunning = true;
}
+
+void XMLInfoLibraryScanner::updateFromSQLQuery(QSqlDatabase &db, QSqlQuery &query)
+{
+ QSqlRecord record = query.record();
+
+ int id = record.indexOf("id");
+ // int parentIdIndex = record.indexOf("parentId");
+ int fileNameIndex = record.indexOf("fileName");
+ int pathIndex = record.indexOf("path");
+
+ while (query.next()) {
+ if (this->stopRunning) {
+ break;
+ }
+ auto fileName = query.value(fileNameIndex).toString();
+ auto path = query.value(pathIndex).toString();
+
+ emit comicScanned(path, fileName);
+
+ auto info = DBHelper::getComicInfoFromQuery(query, "comicInfoId");
+
+ InitialComicInfoExtractor ie(QDir::cleanPath(this->source + path), "None", info.coverPage.toInt(), true);
+
+ ie.extract();
+
+ if (parseXMLIntoInfo(ie.getXMLInfoRawData(), info)) {
+ DBHelper::update(&info, db);
+ }
+ }
+}
diff --git a/YACReaderLibrary/xml_info_library_scanner.h b/YACReaderLibrary/xml_info_library_scanner.h
index d8607b76..b752a2e1 100644
--- a/YACReaderLibrary/xml_info_library_scanner.h
+++ b/YACReaderLibrary/xml_info_library_scanner.h
@@ -2,6 +2,7 @@
#define XMLINFOLIBRARYSCANNER_H
#include
+#include
namespace YACReader {
@@ -11,6 +12,7 @@ class XMLInfoLibraryScanner : public QThread
public:
XMLInfoLibraryScanner();
void scanLibrary(const QString &source, const QString &target);
+ void scanFolder(const QString &source, const QString &target, const QString &folder, const QModelIndex &dest);
protected:
void run() override;
@@ -25,6 +27,10 @@ private:
QString source;
QString target;
bool stopRunning;
+ bool partialUpdate;
+ QModelIndex folderDestinationModelIndex;
+
+ void updateFromSQLQuery(QSqlDatabase &db, QSqlQuery &query);
};
}
diff --git a/YACReaderLibrary/yacreader_comics_views_manager.cpp b/YACReaderLibrary/yacreader_content_views_manager.cpp
similarity index 75%
rename from YACReaderLibrary/yacreader_comics_views_manager.cpp
rename to YACReaderLibrary/yacreader_content_views_manager.cpp
index ad7e5c49..f61c23f1 100644
--- a/YACReaderLibrary/yacreader_comics_views_manager.cpp
+++ b/YACReaderLibrary/yacreader_content_views_manager.cpp
@@ -1,4 +1,4 @@
-#include "yacreader_comics_views_manager.h"
+#include "yacreader_content_views_manager.h"
#include "library_window.h"
@@ -6,7 +6,7 @@
#include "grid_comics_view.h"
#include "info_comics_view.h"
#include "comics_view_transition.h"
-#include "empty_folder_widget.h"
+#include "folder_content_view.h"
#include "empty_label_widget.h"
#include "empty_special_list.h"
#include "empty_reading_list_widget.h"
@@ -18,7 +18,7 @@
#include "yacreader_search_line_edit.h"
#include "options_dialog.h"
-YACReaderComicsViewsManager::YACReaderComicsViewsManager(QSettings *settings, LibraryWindow *parent)
+YACReaderContentViewsManager::YACReaderContentViewsManager(QSettings *settings, LibraryWindow *parent)
: QObject(parent), libraryWindow(parent), classicComicsView(nullptr), gridComicsView(nullptr), infoComicsView(nullptr)
{
comicsViewStack = new QStackedWidget();
@@ -29,26 +29,23 @@ YACReaderComicsViewsManager::YACReaderComicsViewsManager(QSettings *settings, Li
comicsViewStatus = Flow;
break;
- case Grid:
- comicsView = gridComicsView = new GridComicsView();
- connect(libraryWindow->optionsDialog, &YACReaderOptionsDialog::optionsChanged, gridComicsView, &GridComicsView::updateBackgroundConfig);
- comicsViewStatus = Grid;
- break;
-
case Info:
comicsView = infoComicsView = new InfoComicsView();
comicsViewStatus = Info;
break;
+ case Grid:
default:
- comicsView = classicComicsView = new ClassicComicsView();
- comicsViewStatus = Flow;
+ comicsView = gridComicsView = new GridComicsView();
+ connect(libraryWindow->optionsDialog, &YACReaderOptionsDialog::optionsChanged, gridComicsView, &GridComicsView::updateBackgroundConfig);
+ comicsViewStatus = Grid;
+ break;
}
doComicsViewConnections();
comicsViewStack->addWidget(comicsViewTransition = new ComicsViewTransition());
- comicsViewStack->addWidget(emptyFolderWidget = new EmptyFolderWidget());
+ comicsViewStack->addWidget(folderContentView = new FolderContentView());
comicsViewStack->addWidget(emptyLabelWidget = new EmptyLabelWidget());
comicsViewStack->addWidget(emptySpecialList = new EmptySpecialListWidget());
comicsViewStack->addWidget(emptyReadingList = new EmptyReadingListWidget());
@@ -59,23 +56,46 @@ YACReaderComicsViewsManager::YACReaderComicsViewsManager(QSettings *settings, Li
comicsViewStack->setCurrentWidget(comicsView);
// connections
- connect(emptyFolderWidget, &EmptyFolderWidget::copyComicsToCurrentFolder, libraryWindow, &LibraryWindow::copyAndImportComicsToCurrentFolder);
- connect(emptyFolderWidget, &EmptyFolderWidget::moveComicsToCurrentFolder, libraryWindow, &LibraryWindow::moveAndImportComicsToCurrentFolder);
+ connect(folderContentView, &FolderContentView::copyComicsToCurrentFolder, libraryWindow, &LibraryWindow::copyAndImportComicsToCurrentFolder);
+ connect(folderContentView, &FolderContentView::moveComicsToCurrentFolder, libraryWindow, &LibraryWindow::moveAndImportComicsToCurrentFolder);
}
-QWidget *YACReaderComicsViewsManager::containerWidget()
+QWidget *YACReaderContentViewsManager::containerWidget()
{
return comicsViewStack;
}
-void YACReaderComicsViewsManager::updateCurrentComicView()
+void YACReaderContentViewsManager::updateCurrentComicView()
{
if (comicsViewStack->currentWidget() == comicsView) {
comicsView->updateCurrentComicView();
}
}
-void YACReaderComicsViewsManager::showComicsView()
+void YACReaderContentViewsManager::updateContinueReadingView()
+{
+ if (comicsViewStack->currentWidget() == folderContentView) {
+ folderContentView->reloadContinueReadingModel();
+ }
+}
+
+void YACReaderContentViewsManager::toFullscreen()
+{
+ if (comicsViewStack->currentWidget() == comicsView) {
+ comicsView->toFullScreen();
+ return;
+ }
+}
+
+void YACReaderContentViewsManager::toNormal()
+{
+ if (comicsViewStack->currentWidget() == comicsView) {
+ comicsView->toNormal();
+ return;
+ }
+}
+
+void YACReaderContentViewsManager::showComicsView()
{
comicsViewStack->setCurrentWidget(comicsView);
@@ -84,50 +104,50 @@ void YACReaderComicsViewsManager::showComicsView()
libraryWindow->sideBar->update();
}
-void YACReaderComicsViewsManager::showEmptyFolderView()
+void YACReaderContentViewsManager::showFolderContentView()
{
- comicsViewStack->setCurrentWidget(emptyFolderWidget);
+ comicsViewStack->setCurrentWidget(folderContentView);
}
-void YACReaderComicsViewsManager::showEmptyLabelView()
+void YACReaderContentViewsManager::showEmptyLabelView()
{
comicsViewStack->setCurrentWidget(emptyLabelWidget);
}
-void YACReaderComicsViewsManager::showEmptySpecialList()
+void YACReaderContentViewsManager::showEmptySpecialList()
{
comicsViewStack->setCurrentWidget(emptySpecialList);
}
-void YACReaderComicsViewsManager::showEmptyReadingListWidget()
+void YACReaderContentViewsManager::showEmptyReadingListWidget()
{
comicsViewStack->setCurrentWidget(emptyReadingList);
}
-void YACReaderComicsViewsManager::showNoSearchResultsView()
+void YACReaderContentViewsManager::showNoSearchResultsView()
{
comicsViewStack->setCurrentWidget(noSearchResultsWidget);
}
// TODO recover the current comics selection and restore it in the destination
-void YACReaderComicsViewsManager::toggleComicsView()
+void YACReaderContentViewsManager::toggleComicsView()
{
if (comicsViewStack->currentWidget() == comicsView) {
- QTimer::singleShot(0, this, &YACReaderComicsViewsManager::showComicsViewTransition);
- QTimer::singleShot(100, this, &YACReaderComicsViewsManager::_toggleComicsView);
+ QTimer::singleShot(0, this, &YACReaderContentViewsManager::showComicsViewTransition);
+ QTimer::singleShot(100, this, &YACReaderContentViewsManager::_toggleComicsView);
} else {
_toggleComicsView();
}
}
-void YACReaderComicsViewsManager::focusComicsViewViaShortcut()
+void YACReaderContentViewsManager::focusComicsViewViaShortcut()
{
comicsView->focusComicsNavigation(Qt::ShortcutFocusReason);
}
// PROTECTED
-void YACReaderComicsViewsManager::disconnectComicsViewConnections(ComicsView *widget)
+void YACReaderContentViewsManager::disconnectComicsViewConnections(ComicsView *widget)
{
disconnect(widget, &ComicsView::comicRated, libraryWindow->comicsModel, &ComicModel::updateRating);
disconnect(libraryWindow->showHideMarksAction, &QAction::toggled, widget, &ComicsView::setShowMarks);
@@ -140,7 +160,7 @@ void YACReaderComicsViewsManager::disconnectComicsViewConnections(ComicsView *wi
disconnect(comicsView, &ComicsView::customContextMenuItemRequested, libraryWindow, &LibraryWindow::showComicsItemContextMenu);
}
-void YACReaderComicsViewsManager::doComicsViewConnections()
+void YACReaderContentViewsManager::doComicsViewConnections()
{
connect(comicsView, &ComicsView::comicRated, libraryWindow->comicsModel, &ComicModel::updateRating);
connect(libraryWindow->showHideMarksAction, &QAction::toggled, comicsView, &ComicsView::setShowMarks);
@@ -156,7 +176,7 @@ void YACReaderComicsViewsManager::doComicsViewConnections()
connect(comicsView, &ComicsView::moveComicsToCurrentFolder, libraryWindow, &LibraryWindow::moveAndImportComicsToCurrentFolder);
}
-void YACReaderComicsViewsManager::switchToComicsView(ComicsView *from, ComicsView *to)
+void YACReaderContentViewsManager::switchToComicsView(ComicsView *from, ComicsView *to)
{
// setup views
disconnectComicsViewConnections(from);
@@ -180,17 +200,17 @@ void YACReaderComicsViewsManager::switchToComicsView(ComicsView *from, ComicsVie
}
}
-void YACReaderComicsViewsManager::showComicsViewTransition()
+void YACReaderContentViewsManager::showComicsViewTransition()
{
comicsViewStack->setCurrentWidget(comicsViewTransition);
}
-void YACReaderComicsViewsManager::_toggleComicsView()
+void YACReaderContentViewsManager::_toggleComicsView()
{
switch (comicsViewStatus) {
case Flow: {
QIcon icoViewsButton;
- icoViewsButton.addFile(":/images/main_toolbar/info.png", QSize(), QIcon::Normal);
+ icoViewsButton.addFile(addExtensionToIconPath(":/images/main_toolbar/info"), QSize(), QIcon::Normal);
libraryWindow->toggleComicsViewAction->setIcon(icoViewsButton);
#ifdef Q_OS_MAC
libraryWindow->libraryToolBar->updateViewSelectorIcon(icoViewsButton);
@@ -207,7 +227,7 @@ void YACReaderComicsViewsManager::_toggleComicsView()
case Grid: {
QIcon icoViewsButton;
- icoViewsButton.addFile(":/images/main_toolbar/flow.png", QSize(), QIcon::Normal);
+ icoViewsButton.addFile(addExtensionToIconPath(":/images/main_toolbar/flow"), QSize(), QIcon::Normal);
libraryWindow->toggleComicsViewAction->setIcon(icoViewsButton);
#ifdef Q_OS_MAC
libraryWindow->libraryToolBar->updateViewSelectorIcon(icoViewsButton);
@@ -223,7 +243,7 @@ void YACReaderComicsViewsManager::_toggleComicsView()
case Info: {
QIcon icoViewsButton;
- icoViewsButton.addFile(":/images/main_toolbar/grid.png", QSize(), QIcon::Normal);
+ icoViewsButton.addFile(addExtensionToIconPath(":/images/main_toolbar/grid"), QSize(), QIcon::Normal);
libraryWindow->toggleComicsViewAction->setIcon(icoViewsButton);
#ifdef Q_OS_MAC
libraryWindow->libraryToolBar->updateViewSelectorIcon(icoViewsButton);
diff --git a/YACReaderLibrary/yacreader_comics_views_manager.h b/YACReaderLibrary/yacreader_content_views_manager.h
similarity index 76%
rename from YACReaderLibrary/yacreader_comics_views_manager.h
rename to YACReaderLibrary/yacreader_content_views_manager.h
index 4e79dd25..cfd6b8ae 100644
--- a/YACReaderLibrary/yacreader_comics_views_manager.h
+++ b/YACReaderLibrary/yacreader_content_views_manager.h
@@ -1,5 +1,5 @@
-#ifndef YACREADERCOMICSVIEWSMANAGER_H
-#define YACREADERCOMICSVIEWSMANAGER_H
+#ifndef YACREADERCONTENTVIEWSMANAGER_H
+#define YACREADERCONTENTVIEWSMANAGER_H
#include