diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index a89dae26e4..bd8256386b 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -759,68 +759,61 @@ void ownCloudGui::fetchNavigationApps(AccountStatePtr account, QMenu *accountMen job->getNavigationApps(); } -void ownCloudGui::buildNavigationAppsMenu(QMenu *accountMenu){ - QMapIterator it(_navApps); - while(it.hasNext()){ +void ownCloudGui::buildNavigationAppsMenu(AccountStatePtr account, QMenu *accountMenu){ + auto navLinks = _navApps.value(account); + if(navLinks.size() > 0){ - //qDebug() << it.key() << it.value(); + // when there is only one account add the nav links above the settings + QAction *actionBefore = _actionSettings; - auto account = it.key(); - auto navLinks = it.value(); + // when there is more than one account add the nav links above pause/unpause folder or logout action + if(AccountManager::instance()->accounts().size() > 1){ + foreach(QAction *action, accountMenu->actions()){ - if(navLinks.size() > 0){ - - // when there is only one account add the nav links above the settings - QAction *actionBefore = _actionSettings; - - // when there is more than one account add the nav links above pause/unpause folder or logout action - if(AccountManager::instance()->accounts().size() > 1){ - foreach(QAction *action, accountMenu->actions()){ - - // pause/unpause folder and logout actions have propertyAccountC - if(auto actionAccount = qvariant_cast(action->property(propertyAccountC))){ - if(actionAccount == account){ - actionBefore = action; - break; - } + // pause/unpause folder and logout actions have propertyAccountC + if(auto actionAccount = qvariant_cast(action->property(propertyAccountC))){ + if(actionAccount == account){ + actionBefore = action; + break; } } } - - // Create submenu with links - QMenu *navLinksMenu = new QMenu(tr("Apps")); - accountMenu->insertSeparator(actionBefore); - accountMenu->insertMenu(actionBefore, navLinksMenu); - foreach (const QJsonValue &value, navLinks) { - auto navLink = value.toObject(); - QAction *action = new QAction(navLink.value("name").toString(), this); - QUrl href(navLink.value("href").toString()); - connect(action, &QAction::triggered, this, [href] { QDesktopServices::openUrl(href); }); - navLinksMenu->addAction(action); - } - accountMenu->insertSeparator(actionBefore); } - it.next(); + // Create submenu with links + QMenu *navLinksMenu = new QMenu(tr("Apps")); + accountMenu->insertSeparator(actionBefore); + accountMenu->insertMenu(actionBefore, navLinksMenu); + foreach (const QJsonValue &value, navLinks) { + auto navLink = value.toObject(); + QAction *action = new QAction(navLink.value("name").toString(), this); + QUrl href(navLink.value("href").toString()); + connect(action, &QAction::triggered, this, [href] { QDesktopServices::openUrl(href); }); + navLinksMenu->addAction(action); + } + accountMenu->insertSeparator(actionBefore); } } void ownCloudGui::slotNavigationAppsFetched(const QJsonDocument &reply, int statusCode) { + auto account = qvariant_cast(sender()->property(propertyAccountC)); + auto accountMenu = qvariant_cast(sender()->property(propertyMenuC)); + if (statusCode == 304) { qCWarning(lcApplication) << "Status code " << statusCode << " Not Modified - No new navigation apps."; } else { if(!reply.isEmpty()){ auto element = reply.object().value("ocs").toObject().value("data"); auto navLinks = element.toArray(); - if(auto account = qvariant_cast(sender()->property(propertyAccountC))){ + if(account){ _navApps.insert(account, navLinks); } } } - if(QMenu *accountMenu = qvariant_cast(sender()->property(propertyMenuC))) - buildNavigationAppsMenu(accountMenu); + if(accountMenu) + buildNavigationAppsMenu(account, accountMenu); } void ownCloudGui::slotOcsError(int statusCode, const QString &message) diff --git a/src/gui/owncloudgui.h b/src/gui/owncloudgui.h index 8420f3f894..c855c5c740 100644 --- a/src/gui/owncloudgui.h +++ b/src/gui/owncloudgui.h @@ -123,7 +123,7 @@ private: void setupActions(); void addAccountContextMenu(AccountStatePtr accountState, QMenu *menu, bool separateMenu); void fetchNavigationApps(AccountStatePtr account, QMenu *accountMenu); - void buildNavigationAppsMenu(QMenu *accountMenu); + void buildNavigationAppsMenu(AccountStatePtr account, QMenu *accountMenu); QPointer _tray; #if defined(Q_OS_MAC)