Add a mechanism to control if automatic updates can start

For now they won't start if the user is editing comics information.
This commit is contained in:
Luis Ángel San Martín 2023-08-23 22:45:09 +02:00
parent e4fb0fd40c
commit b513103d9b
3 changed files with 14 additions and 5 deletions

View File

@ -5,8 +5,8 @@
#include "yacreader_libraries.h"
#include "yacreader_global.h"
LibrariesUpdateCoordinator::LibrariesUpdateCoordinator(QSettings *settings, YACReaderLibraries &libraries, QObject *parent)
: QObject(parent), libraries(libraries)
LibrariesUpdateCoordinator::LibrariesUpdateCoordinator(QSettings *settings, YACReaderLibraries &libraries, const std::function<bool()> &canStartUpdateProvider, QObject *parent)
: QObject(parent), libraries(libraries), canStartUpdateProvider(canStartUpdateProvider)
{
libraries.load();
@ -78,7 +78,9 @@ void LibrariesUpdateCoordinator::checkUpdatePolicy()
void LibrariesUpdateCoordinator::updateLibraries()
{
startUpdate();
if (canStartUpdateProvider()) {
startUpdate();
}
}
void LibrariesUpdateCoordinator::startUpdate()

View File

@ -11,7 +11,7 @@ class LibrariesUpdateCoordinator : public QObject
{
Q_OBJECT
public:
LibrariesUpdateCoordinator(QSettings *settings, YACReaderLibraries &libraries, QObject *parent = 0);
LibrariesUpdateCoordinator(QSettings *settings, YACReaderLibraries &libraries, const std::function<bool()> &canStartUpdateProvider, QObject *parent = 0);
void init();
void updateLibraries();
@ -37,6 +37,8 @@ private:
std::future<void> updateFuture;
bool canceled;
std::weak_ptr<LibraryCreator> currentLibraryCreator;
std::function<bool()> canStartUpdateProvider;
};
#endif // LIBRARIES_UPDATE_COORDINATOR_H

View File

@ -502,7 +502,12 @@ void LibraryWindow::doModels()
void LibraryWindow::setupCoordinators()
{
recentVisibilityCoordinator = new RecentVisibilityCoordinator(settings, foldersModel, contentViewsManager->folderContentView, comicsModel);
librariesUpdateCoordinator = new LibrariesUpdateCoordinator(settings, libraries, this);
auto canStartUpdateProvider = [this]() {
return comicVineDialog->isVisible() == false &&
propertiesDialog->isVisible() == false;
};
librariesUpdateCoordinator = new LibrariesUpdateCoordinator(settings, libraries, canStartUpdateProvider, this);
connect(librariesUpdateCoordinator, &LibrariesUpdateCoordinator::updateStarted, sideBar->librariesTitle, &YACReaderTitledToolBar::showBusyIndicator);
connect(librariesUpdateCoordinator, &LibrariesUpdateCoordinator::updateEnded, sideBar->librariesTitle, &YACReaderTitledToolBar::hideBusyIndicator);