void ownCloudGui::slotSyncStateChange( Folder* folder )
{
slotComputeOverallSyncStatus();
+ setupContextMenu();
if( !folder ) {
return; // Valid, just a general GUI redraw was needed.
void ownCloudGui::slotComputeOverallSyncStatus()
{
bool allSignedOut = true;
+ bool allPaused = true;
QVector<AccountStatePtr> problemAccounts;
foreach (auto a, AccountManager::instance()->accounts()) {
if (!a->isSignedOut()) {
problemAccounts.append(a);
}
}
+ foreach (Folder* f, FolderMan::instance()->map()) {
+ if (!f->syncPaused()) {
+ allPaused = false;
+ }
+ }
if (!problemAccounts.empty()) {
_tray->setIcon(Theme::instance()->folderOfflineIcon(true));
_tray->setIcon(Theme::instance()->folderOfflineIcon(true));
_tray->setToolTip(tr("Please sign in"));
return;
+ } else if (allPaused) {
+ _tray->setIcon(Theme::instance()->syncStateIcon(SyncResult::Paused, true));
+ _tray->setToolTip(tr("Account synchronization is disabled"));
+ return;
}
// display the info of the least successful sync (eg. do not just display the result of the latest sync)
FolderMan *folderMan = FolderMan::instance();
bool firstFolder = true;
bool singleSyncFolder = folderMan->map().size() == 1 && Theme::instance()->singleSyncFolder();
+ bool onePaused = false;
+ bool allPaused = true;
foreach (Folder* folder, folderMan->map()) {
if (folder->accountState() != accountState) {
continue;
}
+ if (folder->syncPaused()) {
+ onePaused = true;
+ } else {
+ allPaused = false;
+ }
+
if (firstFolder && !singleSyncFolder) {
firstFolder = false;
menu->addSeparator();
menu->addSeparator();
if (separateMenu) {
+ if (onePaused) {
+ QAction* enable = menu->addAction(tr("Unpause all folders"));
+ enable->setProperty(propertyAccountC, QVariant::fromValue(accountState));
+ connect(enable, SIGNAL(triggered(bool)), SLOT(slotUnpauseAllFolders()));
+ }
+ if (!allPaused) {
+ QAction* enable = menu->addAction(tr("Pause all folders"));
+ enable->setProperty(propertyAccountC, QVariant::fromValue(accountState));
+ connect(enable, SIGNAL(triggered(bool)), SLOT(slotPauseAllFolders()));
+ }
+
if (accountState->isSignedOut()) {
QAction* signin = menu->addAction(tr("Log in..."));
signin->setProperty(propertyAccountC, QVariant::fromValue(accountState));
bool atLeastOneConnected = false;
bool atLeastOneSignedOut = false;
bool atLeastOneSignedIn = false;
+ bool atLeastOnePaused = false;
+ bool atLeastOneNotPaused = false;
foreach (auto a, accountList) {
if (a->isConnected()) {
atLeastOneConnected = true;
}
- if (a->isSignedOut()){
+ if (a->isSignedOut()) {
atLeastOneSignedOut = true;
} else {
atLeastOneSignedIn = true;
}
}
+ foreach (auto f, FolderMan::instance()->map()) {
+ if (f->syncPaused()) {
+ atLeastOnePaused = true;
+ } else {
+ atLeastOneNotPaused = true;
+ }
+ }
if ( _contextMenu ) {
if (_qdbusmenuWorkaround) {
}
_contextMenu->addSeparator();
+ if (atLeastOnePaused) {
+ QString text;
+ if (accountList.count() > 1) {
+ text = tr("Unpause all synchronization");
+ } else {
+ text = tr("Unpause synchronization");
+ }
+ QAction* action = _contextMenu->addAction(text);
+ connect(action, SIGNAL(triggered(bool)), SLOT(slotUnpauseAllFolders()));
+ }
+ if (atLeastOneNotPaused) {
+ QString text;
+ if (accountList.count() > 1) {
+ text = tr("Pause all synchronization");
+ } else {
+ text = tr("Pause synchronization");
+ }
+ QAction* action = _contextMenu->addAction(text);
+ connect(action, SIGNAL(triggered(bool)), SLOT(slotPauseAllFolders()));
+ }
if (atLeastOneSignedIn) {
if (accountList.count() > 1) {
_actionLogout->setText(tr("Log out of all accounts"));
void ownCloudGui::slotLogin()
{
- auto list = AccountManager::instance()->accounts();
if (auto account = qvariant_cast<AccountStatePtr>(sender()->property(propertyAccountC))) {
account->signIn();
} else {
+ auto list = AccountManager::instance()->accounts();
foreach (const auto &a, list) {
a->signIn();
}
}
}
+void ownCloudGui::slotUnpauseAllFolders()
+{
+ setPauseOnAllFoldersHelper(false);
+}
+
+void ownCloudGui::slotPauseAllFolders()
+{
+ setPauseOnAllFoldersHelper(true);
+}
+
+void ownCloudGui::setPauseOnAllFoldersHelper(bool pause)
+{
+ QList<AccountState*> accounts;
+ if (auto account = qvariant_cast<AccountStatePtr>(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);
+ }
+ }
+}
+
void ownCloudGui::slotShowGuiMessage(const QString &title, const QString &message)
{
QMessageBox *msgBox = new QMessageBox;