From: Kevin Ottens Date: Thu, 8 Oct 2020 14:32:10 +0000 (+0200) Subject: Move pause/unpause helpers to Systray X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~22^2~67^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=1288ee0437be6db5dddd103bc3ba1091e7133224;p=nextcloud-desktop.git Move pause/unpause helpers to Systray We had signals just to call those backs in ownCloudGui, they were otherwise unused. So let's move them inside of Systray since it's specific to it anyway. Also fix the dangerous call to sender(). We can call this function without going through a signal/slot connection and also it's never connected to an AccountState. Signed-off-by: Kevin Ottens --- diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index 3f1cee09c..07b692598 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -76,12 +76,6 @@ ownCloudGui::ownCloudGui(Application *parent) connect(_tray.data(), &QSystemTrayIcon::activated, this, &ownCloudGui::slotTrayClicked); - connect(_tray.data(), &Systray::pauseSync, - this, &ownCloudGui::slotPauseAllFolders); - - connect(_tray.data(), &Systray::resumeSync, - this, &ownCloudGui::slotUnpauseAllFolders); - connect(_tray.data(), &Systray::openHelp, this, &ownCloudGui::slotHelp); @@ -507,41 +501,11 @@ void ownCloudGui::slotLogout() } } -void ownCloudGui::slotUnpauseAllFolders() -{ - setPauseOnAllFoldersHelper(false); -} - -void ownCloudGui::slotPauseAllFolders() -{ - setPauseOnAllFoldersHelper(true); -} - void ownCloudGui::slotNewAccountWizard() { OwncloudSetupWizard::runWizard(qApp, SLOT(slotownCloudWizardDone(int))); } -void ownCloudGui::setPauseOnAllFoldersHelper(bool pause) -{ - QList accounts; - if (auto account = qvariant_cast(sender()->property(propertyAccountC))) { - accounts.append(account.data()); - } else { - foreach (auto a, AccountManager::instance()->accounts()) { - accounts.append(a.data()); - } - } - foreach (Folder *f, FolderMan::instance()->map()) { - if (accounts.contains(f->accountState())) { - f->setSyncPaused(pause); - if (pause) { - f->slotTerminateSync(); - } - } - } -} - void ownCloudGui::slotShowGuiMessage(const QString &title, const QString &message) { auto *msgBox = new QMessageBox; diff --git a/src/gui/owncloudgui.h b/src/gui/owncloudgui.h index 74a1abfdd..f0c34b0e7 100644 --- a/src/gui/owncloudgui.h +++ b/src/gui/owncloudgui.h @@ -108,13 +108,9 @@ public slots: private slots: void slotLogin(); void slotLogout(); - void slotUnpauseAllFolders(); - void slotPauseAllFolders(); void slotNewAccountWizard(); private: - void setPauseOnAllFoldersHelper(bool pause); - QPointer _tray; QPointer _settingsDialog; QPointer _logBrowser; diff --git a/src/gui/systray.cpp b/src/gui/systray.cpp index 421e13c6c..bbcdb879d 100644 --- a/src/gui/systray.cpp +++ b/src/gui/systray.cpp @@ -136,6 +136,41 @@ void Systray::slotNewUserSelected() UserAppsModel::instance()->buildAppList(); } +void Systray::slotUnpauseAllFolders() +{ + setPauseOnAllFoldersHelper(false); +} + +void Systray::slotPauseAllFolders() +{ + setPauseOnAllFoldersHelper(true); +} + +void Systray::setPauseOnAllFoldersHelper(bool pause) +{ + // For some reason we get the raw pointer from Folder::accountState() + // that's why we need a list of raw pointers for the call to contains + // later on... + const auto accounts = [=] { + const auto ptrList = AccountManager::instance()->accounts(); + auto result = QList(); + result.reserve(ptrList.size()); + std::transform(std::cbegin(ptrList), std::cend(ptrList), std::back_inserter(result), [](const AccountStatePtr &account) { + return account.data(); + }); + return result; + }(); + const auto folders = FolderMan::instance()->map(); + for (auto f : folders) { + if (accounts.contains(f->accountState())) { + f->setSyncPaused(pause); + if (pause) { + f->slotTerminateSync(); + } + } + } +} + bool Systray::isOpen() { return _isOpen; @@ -187,10 +222,10 @@ void Systray::pauseResumeSync() { if (_syncIsPaused) { _syncIsPaused = false; - emit resumeSync(); + slotUnpauseAllFolders(); } else { _syncIsPaused = true; - emit pauseSync(); + slotPauseAllFolders(); } } diff --git a/src/gui/systray.h b/src/gui/systray.h index bf7e6133e..13f79ed01 100644 --- a/src/gui/systray.h +++ b/src/gui/systray.h @@ -66,8 +66,6 @@ signals: void openSettings(); void openHelp(); void shutdown(); - void pauseSync(); - void resumeSync(); Q_INVOKABLE void hideWindow(); Q_INVOKABLE void showWindow(); @@ -76,7 +74,13 @@ signals: public slots: void slotNewUserSelected(); +private slots: + void slotUnpauseAllFolders(); + void slotPauseAllFolders(); + private: + void setPauseOnAllFoldersHelper(bool pause); + static Systray *_instance; Systray();