From fcf07b60c4ea4ea9f7d3c2431d159b75686f81ae Mon Sep 17 00:00:00 2001 From: Camila Ayres Date: Tue, 4 Jun 2024 14:47:44 +0200 Subject: [PATCH] Move the logic for handling the featured app qml to cpp. Signed-off-by: Camila Ayres --- src/gui/tray/Window.qml | 11 +++----- src/gui/tray/usermodel.cpp | 52 +++++++++++++++++++++++--------------- src/gui/tray/usermodel.h | 17 ++++++++----- 3 files changed, 46 insertions(+), 34 deletions(-) diff --git a/src/gui/tray/Window.qml b/src/gui/tray/Window.qml index 00c6f887e7..386c8990b2 100644 --- a/src/gui/tray/Window.qml +++ b/src/gui/tray/Window.qml @@ -622,15 +622,12 @@ ApplicationWindow { HeaderButton { id: trayWindowFeaturedAppButton - visible: UserModel.currentUser.isNcAssistantEnabled || UserModel.currentUser.serverHasTalk - icon.source: UserModel.currentUser.isNcAssistantEnabled - ? "image:///client/theme/white/nc-assistant-app.svg" + "/" + Style.currentUserHeaderTextColor - : "image:///client/theme/white/talk-app.svg" + "/" + Style.currentUserHeaderTextColor - icon.color: Style.currentUserHeaderTextColor - onClicked: UserModel.currentUser.isNcAssistantEnabled ? UserModel.openCurrentAccountNcAssistant() : UserModel.openCurrentAccountTalk() + visible: UserModel.currentUser.isFeaturedAppEnabled + icon.source: UserModel.currentUser.featuredAppIcon + "/" + Style.currentUserHeaderTextColor + onClicked: UserModel.openCurrentAccountFeaturedApp() Accessible.role: Accessible.Button - Accessible.name: UserModel.currentUser.isNcAssistantEnabled ? qsTr("Open Nextcloud Assistant in browser") : qsTr("Open Nextcloud Talk in browser") + Accessible.name: UserModel.currentUser.featuredAppAccessibleName Accessible.onPressAction: trayWindowFeaturedAppButton.clicked() Layout.alignment: Qt.AlignRight diff --git a/src/gui/tray/usermodel.cpp b/src/gui/tray/usermodel.cpp index a694ac8d95..908f760bdd 100644 --- a/src/gui/tray/usermodel.cpp +++ b/src/gui/tray/usermodel.cpp @@ -470,8 +470,7 @@ void User::slotRefreshNotifications() void User::slotRebuildNavigationAppList() { - emit serverHasTalkChanged(); - emit ncAssistantAvailabityChanged(); + emit featuredAppChanged(); // Rebuild App list UserAppsModel::instance()->buildAppList(); } @@ -1037,6 +1036,22 @@ bool User::serverHasTalk() const return talkApp() != nullptr; } +bool User::isFeaturedAppEnabled() const +{ + return isNcAssistantEnabled() || serverHasTalk(); +} + +QString User::featuredAppIcon() const +{ + return isNcAssistantEnabled() ? "image://svgimage-custom-color/nc-assistant-app.svg" + : "image://svgimage-custom-color/talk-app.svg"; +} + +QString User::featuredAppAccessibleName() const +{ + return isNcAssistantEnabled() ? tr("Open Nextcloud Assistant in browser") : tr("Open Nextcloud Talk in browser"); +} + AccountApp *User::talkApp() const { return _account->findApp(QStringLiteral("spreed")); @@ -1335,19 +1350,6 @@ void UserModel::openCurrentAccountLocalFolder() _users[_currentUserId]->openLocalFolder(); } -void UserModel::openCurrentAccountTalk() -{ - if (!currentUser()) - return; - - const auto talkApp = currentUser()->talkApp(); - if (talkApp) { - Utility::openBrowser(talkApp->url()); - } else { - qCWarning(lcActivity) << "The Talk app is not enabled on" << currentUser()->server(); - } -} - void UserModel::openCurrentAccountServer() { if (_currentUserId < 0 || _currentUserId >= _users.size()) @@ -1370,16 +1372,26 @@ void UserModel::openCurrentAccountFolderFromTrayInfo(const QString &fullRemotePa _users[_currentUserId]->openFolderLocallyOrInBrowser(fullRemotePath); } -void UserModel::openCurrentAccountNcAssistant() +void UserModel::openCurrentAccountFeaturedApp() { if (!currentUser()) { return; } + if (!currentUser()->isFeaturedAppEnabled()) { + qCWarning(lcActivity) << "There is no feature app enabled on" << currentUser()->server(); + return; + } + if (currentUser()->isNcAssistantEnabled()) { - QDesktopServices::openUrl(QUrl(_users[_currentUserId]->server(false).append("/apps/assistant/"))); - } else { - qCWarning(lcActivity) << "The Nextcloud Assistant app is not enabled on" << currentUser()->server(); + auto serverUrl = currentUser()->server(false); + const auto assistanceUrl = serverUrl.append("/apps/assistant/"); + QDesktopServices::openUrl(QUrl::fromUserInput(assistanceUrl)); + return; + } + + if (const auto talkApp = currentUser()->talkApp()) { + Utility::openBrowser(talkApp->url()); } } @@ -1650,7 +1662,7 @@ void UserAppsModel::buildAppList() if (UserModel::instance()->appList().count() > 0) { const auto talkApp = UserModel::instance()->currentUser()->talkApp(); - for (auto &app : UserModel::instance()->appList()) { + for (const auto &app : UserModel::instance()->appList()) { // Filter out Talk because we have a dedicated button for it if (talkApp && app->id() == talkApp->id() && !UserModel::instance()->currentUser()->isNcAssistantEnabled()) { continue; diff --git a/src/gui/tray/usermodel.h b/src/gui/tray/usermodel.h index f294995203..33c3ae455a 100644 --- a/src/gui/tray/usermodel.h +++ b/src/gui/tray/usermodel.h @@ -56,8 +56,9 @@ class User : public QObject Q_PROPERTY(QString statusMessage READ statusMessage NOTIFY statusChanged) Q_PROPERTY(bool desktopNotificationsAllowed READ isDesktopNotificationsAllowed NOTIFY desktopNotificationsAllowedChanged) Q_PROPERTY(bool hasLocalFolder READ hasLocalFolder NOTIFY hasLocalFolderChanged) - Q_PROPERTY(bool serverHasTalk READ serverHasTalk NOTIFY serverHasTalkChanged) - Q_PROPERTY(bool isNcAssistantEnabled READ isNcAssistantEnabled NOTIFY ncAssistantAvailabityChanged) + Q_PROPERTY(bool isFeaturedAppEnabled READ isFeaturedAppEnabled NOTIFY featuredAppChanged) + Q_PROPERTY(QString featuredAppIcon READ featuredAppIcon NOTIFY featuredAppChanged) + Q_PROPERTY(QString featuredAppAccessibleName READ featuredAppAccessibleName NOTIFY featuredAppChanged) Q_PROPERTY(QString avatar READ avatarUrl NOTIFY avatarChanged) Q_PROPERTY(bool isConnected READ isConnected NOTIFY accountStateChanged) Q_PROPERTY(UnifiedSearchResultsListModel* unifiedSearchResultsListModel READ getUnifiedSearchResultsListModel CONSTANT) @@ -80,7 +81,9 @@ public: [[nodiscard]] QString name() const; [[nodiscard]] QString server(bool shortened = true) const; [[nodiscard]] bool hasLocalFolder() const; - [[nodiscard]] bool serverHasTalk() const; + [[nodiscard]] bool isFeaturedAppEnabled() const; + [[nodiscard]] QString featuredAppIcon() const; + [[nodiscard]] QString featuredAppAccessibleName() const; [[nodiscard]] bool serverHasUserStatus() const; [[nodiscard]] AccountApp *talkApp() const; [[nodiscard]] bool hasActivities() const; @@ -105,7 +108,7 @@ public: signals: void nameChanged(); void hasLocalFolderChanged(); - void serverHasTalkChanged(); + void featuredAppChanged(); void avatarChanged(); void accountStateChanged(); void statusChanged(); @@ -115,7 +118,6 @@ signals: void accentColorChanged(); void sendReplyMessage(const int activityIndex, const QString &conversationToken, const QString &message, const QString &replyTo); void groupFoldersChanged(); - void ncAssistantAvailabityChanged(); public slots: void slotItemCompleted(const QString &folder, const OCC::SyncFileItemPtr &item); @@ -171,6 +173,8 @@ private: void checkAndRemoveSeenActivities(const ActivityList &list, const int numTalkNotificationsReceived); + [[nodiscard]] bool serverHasTalk() const; + AccountStatePtr _account; bool _isCurrentUser; ActivityListModel *_activityModel; @@ -251,10 +255,9 @@ signals: public slots: void fetchCurrentActivityModel(); void openCurrentAccountLocalFolder(); - void openCurrentAccountTalk(); void openCurrentAccountServer(); void openCurrentAccountFolderFromTrayInfo(const QString &fullRemotePath); - void openCurrentAccountNcAssistant(); + void openCurrentAccountFeaturedApp(); void setCurrentUserId(const int id); void login(const int id); void logout(const int id);