]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
Detect newly added user and rebuild account menu automatically
authorDominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
Sat, 11 Jan 2020 14:47:36 +0000 (15:47 +0100)
committerDominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
Sat, 11 Jan 2020 14:47:36 +0000 (15:47 +0100)
Signed-off-by: Dominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
src/gui/tray/UserModel.cpp
src/gui/tray/UserModel.h

index 86ff62f9927d0008f5584691f7bc4df16219db68..1a72a3eab342f363d99dc5be5b1904673d5ef3c4 100644 (file)
@@ -136,17 +136,23 @@ UserModel::UserModel(QObject *parent)
 {
     // TODO: Remember selected user from last quit via settings file
     if (AccountManager::instance()->accounts().size() > 0) {
-        initUserList();
+        buildUserList();
     }
+
+    connect(AccountManager::instance(), &AccountManager::accountAdded,
+        this, &UserModel::buildUserList);
 }
 
-void UserModel::initUserList()
+void UserModel::buildUserList()
 {
     for (int i = 0; i < AccountManager::instance()->accounts().size(); i++) {
         auto user = AccountManager::instance()->accounts().at(i);
         addUser(user);
     }
-    _users.first().setCurrentUser(true);
+    if (_init) {
+        _users.first().setCurrentUser(true);
+        _init = false;
+    }
 }
 
 Q_INVOKABLE int UserModel::numUsers()
@@ -186,12 +192,22 @@ Q_INVOKABLE bool UserModel::currentServerHasTalk()
 
 void UserModel::addUser(AccountStatePtr &user, const bool &isCurrent)
 {
-    beginInsertRows(QModelIndex(), rowCount(), rowCount());
-    _users << User(user, isCurrent);
-    if (isCurrent) {
-        _currentUserId = _users.indexOf(_users.last());
+    bool containsUser = false;
+    for (int i = 0; i < _users.size(); i++) {
+        if (_users[i] == user) {
+            containsUser = true;
+            continue;
+        }
+    }
+
+    if (!containsUser) {
+        beginInsertRows(QModelIndex(), rowCount(), rowCount());
+        _users << User(user, isCurrent);
+        if (isCurrent) {
+            _currentUserId = _users.indexOf(_users.last());
+        }
+        endInsertRows();
     }
-    endInsertRows();
 }
 
 int UserModel::currentUserIndex()
index 5a2e9cadf1630eee9b68604f0423a27c79be0d9d..ee7198641394914ddb67791b794cdbc62c44f11e 100644 (file)
@@ -95,8 +95,9 @@ private:
     UserModel(QObject *parent = 0);
     QList<User> _users;
     int _currentUserId;
+    bool _init = true;
 
-    void initUserList();
+    void buildUserList();
 };
 
 class ImageProvider : public QQuickImageProvider