QMLify the UserModel, use properties rather than setter methods
authorClaudio Cambra <claudio.cambra@gmail.com>
Fri, 8 Jul 2022 14:49:27 +0000 (16:49 +0200)
committerClaudio Cambra <claudio.cambra@gmail.com>
Fri, 15 Jul 2022 14:47:17 +0000 (16:47 +0200)
Signed-off-by: Claudio Cambra <claudio.cambra@gmail.com>
src/gui/settingsdialog.cpp
src/gui/systray.cpp
src/gui/systray.h
src/gui/tray/UserLine.qml
src/gui/tray/usermodel.cpp
src/gui/tray/usermodel.h

index cb503ef14eb480f869bc64de283bb02d5cf5e30f..611ef236e6d1d0a7a8614920b56d4eb7845bee37 100644 (file)
@@ -226,7 +226,7 @@ void SettingsDialog::showIssuesList(AccountState *account)
 {
     const auto userModel = UserModel::instance();
     const auto id = userModel->findUserIdForAccount(account);
-    UserModel::instance()->switchCurrentUser(id);
+    UserModel::instance()->setCurrentUserId(id);
     emit Systray::instance()->showWindow();
 }
 
index 8ec5f3374cfb8ca159df4a4b5aee8e78851ffb0d..cef7c57ad33fd6b09bbc6a3fe2a1a82800d7eb28 100644 (file)
@@ -113,8 +113,8 @@ Systray::Systray()
     setupContextMenu();
 #endif
 
-    connect(UserModel::instance(), &UserModel::newUserSelected,
-        this, &Systray::slotNewUserSelected);
+    connect(UserModel::instance(), &UserModel::currentUserChanged,
+        this, &Systray::slotCurrentUserChanged);
     connect(UserModel::instance(), &UserModel::addAccount,
             this, &Systray::openAccountWizard);
 
@@ -266,7 +266,7 @@ void Systray::createCallDialog(const Activity &callNotification, const AccountSt
     }
 }
 
-void Systray::slotNewUserSelected()
+void Systray::slotCurrentUserChanged()
 {
     if (_trayEngine) {
         // Change ActivityModel
index 55bce5792988daba5884bb744e34e7d4cfeb7512..522ae17309ed95f0a1c405372745f09597ad2eaa 100644 (file)
@@ -111,7 +111,7 @@ signals:
     void isOpenChanged();
 
 public slots:
-    void slotNewUserSelected();
+    void slotCurrentUserChanged();
 
     void forceWindowInit(QQuickWindow *window) const;
     void positionWindowAtTray(QQuickWindow *window) const;
index 02deaccf1e142a58a6b770066b642e4dde0c1716..e3d88888d8d08dd215de5a3b1b668cf42c57dafa 100644 (file)
@@ -36,10 +36,9 @@ MenuItem {
             Accessible.role: Accessible.Button\r
             Accessible.name: qsTr("Switch to account") + " " + name\r
 \r
-            onClicked: if (!isCurrentUser) {\r
-                UserModel.switchCurrentUser(id)\r
-            } else {\r
-                accountMenu.close()\r
+            onClicked: {\r
+                UserModel.currentUserId = id;\r
+                accountMenu.close();\r
             }\r
 \r
             background: Item {\r
index 566d93cd075970d6c06a83032888d0f042b524dc..c157425468c82fbd1ec2b4a3669b1781a66ef70f 100644 (file)
@@ -895,17 +895,17 @@ void UserModel::buildUserList()
     }
 }
 
-Q_INVOKABLE int UserModel::numUsers()
+int UserModel::numUsers()
 {
     return _users.size();
 }
 
-Q_INVOKABLE int UserModel::currentUserId() const
+int UserModel::currentUserId() const
 {
     return _currentUserId;
 }
 
-Q_INVOKABLE bool UserModel::isUserConnected(const int id)
+bool UserModel::isUserConnected(const int id)
 {
     if (id < 0 || id >= _users.size())
         return false;
@@ -921,7 +921,7 @@ QImage UserModel::avatarById(const int id)
     return _users[id]->avatar();
 }
 
-Q_INVOKABLE QString UserModel::currentUserServer()
+QString UserModel::currentUserServer()
 {
     if (_currentUserId < 0 || _currentUserId >= _users.size())
         return {};
@@ -971,7 +971,7 @@ void UserModel::addUser(AccountStatePtr &user, const bool &isCurrent)
         endInsertRows();
         ConfigFile cfg;
         u->setNotificationRefreshInterval(cfg.notificationRefreshInterval());
-        emit newUserSelected();
+        emit currentUserChanged();
     }
 }
 
@@ -980,7 +980,7 @@ int UserModel::currentUserIndex()
     return _currentUserId;
 }
 
-Q_INVOKABLE void UserModel::openCurrentAccountLocalFolder()
+void UserModel::openCurrentAccountLocalFolder()
 {
     if (_currentUserId < 0 || _currentUserId >= _users.size())
         return;
@@ -988,7 +988,7 @@ Q_INVOKABLE void UserModel::openCurrentAccountLocalFolder()
     _users[_currentUserId]->openLocalFolder();
 }
 
-Q_INVOKABLE void UserModel::openCurrentAccountTalk()
+void UserModel::openCurrentAccountTalk()
 {
     if (!currentUser())
         return;
@@ -1001,7 +1001,7 @@ Q_INVOKABLE void UserModel::openCurrentAccountTalk()
     }
 }
 
-Q_INVOKABLE void UserModel::openCurrentAccountServer()
+void UserModel::openCurrentAccountServer()
 {
     if (_currentUserId < 0 || _currentUserId >= _users.size())
         return;
@@ -1014,18 +1014,18 @@ Q_INVOKABLE void UserModel::openCurrentAccountServer()
     QDesktopServices::openUrl(url);
 }
 
-Q_INVOKABLE void UserModel::switchCurrentUser(const int id)
+void UserModel::setCurrentUserId(const int id)
 {
-    if (_currentUserId < 0 || _currentUserId >= _users.size())
+    if (_currentUserId == id || _currentUserId < 0 || _currentUserId >= _users.size())
         return;
     
     _users[_currentUserId]->setCurrentUser(false);
     _users[id]->setCurrentUser(true);
     _currentUserId = id;
-    emit newUserSelected();
+    emit currentUserChanged();
 }
 
-Q_INVOKABLE void UserModel::login(const int id)
+void UserModel::login(const int id)
 {
     if (id < 0 || id >= _users.size())
         return;
@@ -1033,7 +1033,7 @@ Q_INVOKABLE void UserModel::login(const int id)
     _users[id]->login();
 }
 
-Q_INVOKABLE void UserModel::logout(const int id)
+void UserModel::logout(const int id)
 {
     if (id < 0 || id >= _users.size())
         return;
@@ -1041,7 +1041,7 @@ Q_INVOKABLE void UserModel::logout(const int id)
     _users[id]->logout();
 }
 
-Q_INVOKABLE void UserModel::removeAccount(const int id)
+void UserModel::removeAccount(const int id)
 {
     if (id < 0 || id >= _users.size())
         return;
@@ -1062,7 +1062,7 @@ Q_INVOKABLE void UserModel::removeAccount(const int id)
     }
 
     if (_users[id]->isCurrentUser() && _users.count() > 1) {
-        id == 0 ? switchCurrentUser(1) : switchCurrentUser(0);
+        id == 0 ? setCurrentUserId(1) : setCurrentUserId(0);
     }
 
     _users[id]->logout();
index 28a7eb9ac093401a7951224af6fd3ab73680f154..054802e3e71c5e7573f3dbf7d6ee305b916167c7 100644 (file)
@@ -147,8 +147,8 @@ private:
 class UserModel : public QAbstractListModel
 {
     Q_OBJECT
-    Q_PROPERTY(User* currentUser READ currentUser NOTIFY newUserSelected)
-    Q_PROPERTY(int currentUserId READ currentUserId NOTIFY newUserSelected)
+    Q_PROPERTY(User* currentUser READ currentUser NOTIFY currentUserChanged)
+    Q_PROPERTY(int currentUserId READ currentUserId WRITE setCurrentUserId NOTIFY currentUserChanged)
 public:
     static UserModel *instance();
     ~UserModel() override = default;
@@ -157,7 +157,6 @@ public:
     int currentUserIndex();
 
     int rowCount(const QModelIndex &parent = QModelIndex()) const override;
-
     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
 
     QImage avatarById(const int id);
@@ -166,18 +165,11 @@ public:
 
     int findUserIdForAccount(AccountState *account) const;
 
-    Q_INVOKABLE void fetchCurrentActivityModel();
-    Q_INVOKABLE void openCurrentAccountLocalFolder();
-    Q_INVOKABLE void openCurrentAccountTalk();
-    Q_INVOKABLE void openCurrentAccountServer();
     Q_INVOKABLE int numUsers();
     Q_INVOKABLE QString currentUserServer();
     int currentUserId() const;
+
     Q_INVOKABLE bool isUserConnected(const int id);
-    Q_INVOKABLE void switchCurrentUser(const int id);
-    Q_INVOKABLE void login(const int id);
-    Q_INVOKABLE void logout(const int id);
-    Q_INVOKABLE void removeAccount(const int id);
 
     Q_INVOKABLE std::shared_ptr<OCC::UserStatusConnector> userStatusConnector(int id);
 
@@ -200,8 +192,18 @@ public:
     AccountAppList appList() const;
 
 signals:
-    Q_INVOKABLE void addAccount();
-    Q_INVOKABLE void newUserSelected();
+    void addAccount();
+    void currentUserChanged();
+
+public slots:
+    void fetchCurrentActivityModel();
+    void openCurrentAccountLocalFolder();
+    void openCurrentAccountTalk();
+    void openCurrentAccountServer();
+    void setCurrentUserId(const int id);
+    void login(const int id);
+    void logout(const int id);
+    void removeAccount(const int id);
 
 protected:
     QHash<int, QByteArray> roleNames() const override;