Use display-name from the ocs call in the settings dialog
authorThomas Müller <thomas.mueller@tmit.eu>
Thu, 5 Oct 2017 19:08:38 +0000 (21:08 +0200)
committerMarkus Goetz <markus@woboq.com>
Fri, 6 Oct 2017 08:59:20 +0000 (10:59 +0200)
src/gui/accountsettings.cpp
src/gui/accountstate.cpp
src/gui/accountstate.h
src/gui/settingsdialog.cpp
src/gui/settingsdialog.h
src/libsync/account.cpp
src/libsync/account.h
src/libsync/connectionvalidator.cpp

index 8183d4b8f273ad5be0670f3df978656b8ea7d34d..23b28724444b5be7f6cd8612047beec7aa80bd0c 100644 (file)
@@ -638,7 +638,11 @@ void AccountSettings::slotAccountStateChanged()
                                  Utility::escape(safeUrl.toString()));
         QString serverWithUser = server;
         if (AbstractCredentials *cred = account->credentials()) {
-            serverWithUser = tr("%1 as <i>%2</i>").arg(server, Utility::escape(cred->user()));
+            QString user = account->davDisplayName();
+            if (user.isEmpty()) {
+                user = cred->user();
+            }
+            serverWithUser = tr("%1 as <i>%2</i>").arg(server, Utility::escape(user));
         }
 
         if (state == AccountState::Connected) {
index 580f3b31ee1bd10333f9438aa8bf722201f309bd..0b19f3f88f3cb6e67367d003b4c0c032644ed444 100644 (file)
@@ -361,23 +361,4 @@ std::unique_ptr<QSettings> AccountState::settings()
     return s;
 }
 
-QString AccountState::shortDisplayNameForSettings(int width) const
-{
-    QString user = account()->credentials()->user();
-    QString host = account()->url().host();
-    int port = account()->url().port();
-    if (port > 0 && port != 80 && port != 443) {
-        host.append(QLatin1Char(':'));
-        host.append(QString::number(port));
-    }
-    if (width > 0) {
-        QFont f;
-        QFontMetrics fm(f);
-        host = fm.elidedText(host, Qt::ElideMiddle, width);
-        user = fm.elidedText(user, Qt::ElideRight, width);
-    }
-    return user + QLatin1String("\n") + host;
-}
-
-
 } // namespace OCC
index 03f17795f5236c6c26de5c318aabcf3c93baf4aa..3256424afe14b814936ebbf47ac871c62ef0f7d9 100644 (file)
@@ -113,11 +113,6 @@ public:
     /** Returns a new settings object for this account, already in the right groups. */
     std::unique_ptr<QSettings> settings();
 
-    /** display name with two lines that is displayed in the settings
-     * If width is bigger than 0, the string will be ellided so it does not exceed that width
-     */
-    QString shortDisplayNameForSettings(int width = 0) const;
-
     /** Mark the timestamp when the last successful ETag check happened for
      *  this account.
      *  The checkConnectivity() method uses the timestamp to save a call to
index a266157db7aa759e1fd4723cecc7c498f2dbec29..fc50dd120c6f76b5572d43823c61dbcd72d907b5 100644 (file)
@@ -236,7 +236,7 @@ void SettingsDialog::accountAdded(AccountState *s)
 
     if (!brandingSingleAccount) {
         accountAction->setToolTip(s->account()->displayName());
-        accountAction->setIconText(s->shortDisplayNameForSettings(height * buttonSizeRatio));
+        accountAction->setIconText(shortDisplayNameForSettings(s->account().data(),  height * buttonSizeRatio));
     }
     _toolBar->insertAction(_toolBar->actions().at(0), accountAction);
     auto accountSettings = new AccountSettings(s, this);
@@ -250,6 +250,7 @@ void SettingsDialog::accountAdded(AccountState *s)
         _gui, &ownCloudGui::slotFolderOpenAction);
     connect(accountSettings, &AccountSettings::showIssuesList, this, &SettingsDialog::showIssuesList);
     connect(s->account().data(), &Account::accountChangedAvatar, this, &SettingsDialog::slotAccountAvatarChanged);
+    connect(s->account().data(), &Account::accountChangedDisplayName, this, &SettingsDialog::slotAccountDisplayNameChanged);
 
     slotRefreshActivity(s);
 }
@@ -268,6 +269,41 @@ void SettingsDialog::slotAccountAvatarChanged()
     }
 }
 
+void SettingsDialog::slotAccountDisplayNameChanged()
+{
+    Account *account = static_cast<Account *>(sender());
+    if (account && _actionForAccount.contains(account)) {
+        QAction *action = _actionForAccount[account];
+        if (action) {
+            QString displayName = account->displayName();
+            action->setText(displayName);
+            auto height = _toolBar->sizeHint().height();
+            action->setIconText(shortDisplayNameForSettings(account, height * buttonSizeRatio));
+        }
+    }
+}
+
+QString SettingsDialog::shortDisplayNameForSettings(Account* account, int width) const
+{
+    QString user = account->davDisplayName();
+    if (user.isEmpty()) {
+        user = account->credentials()->user();
+    }
+    QString host = account->url().host();
+    int port = account->url().port();
+    if (port > 0 && port != 80 && port != 443) {
+        host.append(QLatin1Char(':'));
+        host.append(QString::number(port));
+    }
+    if (width > 0) {
+        QFont f;
+        QFontMetrics fm(f);
+        host = fm.elidedText(host, Qt::ElideMiddle, width);
+        user = fm.elidedText(user, Qt::ElideRight, width);
+    }
+    return user + QLatin1String("\n") + host;
+}
+
 void SettingsDialog::accountRemoved(AccountState *s)
 {
     for (auto it = _actionGroupWidgets.begin(); it != _actionGroupWidgets.end(); ++it) {
index 15596a00f0bed6895a2c2ccca89edfff2b981d1d..7c2ffcc03f7390fc240a8095354c9e3b5e309f50 100644 (file)
@@ -60,6 +60,7 @@ public slots:
     void slotSwitchPage(QAction *action);
     void slotRefreshActivity(AccountState *accountState);
     void slotAccountAvatarChanged();
+    void slotAccountDisplayNameChanged();
 
 protected:
     void reject() Q_DECL_OVERRIDE;
@@ -77,6 +78,11 @@ private:
     QAction *createColorAwareAction(const QString &iconName, const QString &fileName);
     QAction *createActionWithIcon(const QIcon &icon, const QString &text, const QString &iconPath = QString());
 
+    /** display name with two lines that is displayed in the settings
+     * If width is bigger than 0, the string will be ellided so it does not exceed that width
+     */
+    QString shortDisplayNameForSettings(Account* account, int width = 0) const;
+
     Ui::SettingsDialog *const _ui;
 
     QActionGroup *_actionGroup;
index 4c5f8a4116f422b5fa1c637380cc3c1de93fc82b..0c2e44dbed20b6c5d00f81fe3adeb6877de4c1a8 100644 (file)
@@ -105,7 +105,7 @@ void Account::setAvatar(const QImage &img)
 
 QString Account::displayName() const
 {
-    QString dn = QString("%1@%2").arg(_credentials->user(), _url.host());
+    QString dn = QString("%1@%2").arg(davUser(), _url.host());
     int port = url().port();
     if (port > 0 && port != 80 && port != 443) {
         dn.append(QLatin1Char(':'));
@@ -114,6 +114,17 @@ QString Account::displayName() const
     return dn;
 }
 
+QString Account::davDisplayName() const
+{
+    return _displayName;
+}
+
+void Account::setDavDisplayName(const QString &newDisplayName)
+{
+    _displayName = newDisplayName;
+    emit accountChangedDisplayName();
+}
+
 QString Account::id() const
 {
     return _id;
index 249ff403d33c900d7c38e99cc072e2b2daa9002b..aa100928718dfb0a7a8a4e63d4e9316b810dad04 100644 (file)
@@ -83,6 +83,9 @@ public:
     QString davUser() const;
     void setDavUser(const QString &newDavUser);
 
+    QString davDisplayName() const;
+    void setDavDisplayName(const QString &newDisplayName);
+
     QImage avatar() const;
     void setAvatar(const QImage &img);
 
@@ -209,7 +212,7 @@ public:
 
     /** True when the server supports HTTP2  */
     bool isHttp2Supported() { return _http2Supported; }
-    void setHttp2Supported(bool value) { _http2Supported = value; };
+    void setHttp2Supported(bool value) { _http2Supported = value; }
 
     void clearCookieJar();
     void lendCookieJarTo(QNetworkAccessManager *guest);
@@ -246,6 +249,7 @@ signals:
     void serverVersionChanged(Account *account, const QString &newVersion, const QString &oldVersion);
 
     void accountChangedAvatar();
+    void accountChangedDisplayName();
 
 protected Q_SLOTS:
     void slotCredentialsFetched();
@@ -258,6 +262,7 @@ private:
     QWeakPointer<Account> _sharedThis;
     QString _id;
     QString _davUser;
+    QString _displayName;
     QImage _avatarImg;
     QMap<QString, QVariant> _settingsMap;
     QUrl _url;
index fd454e68ffe95ed8f15fad769b229be70f60a856..2acbf74f1ce8e051198b378875c90803f9ee7b20 100644 (file)
@@ -316,6 +316,10 @@ void ConnectionValidator::slotUserFetched(const QJsonDocument &json)
 
         job->start();
     }
+    QString displayName = json.object().value("ocs").toObject().value("data").toObject().value("display-name").toString();
+    if (!displayName.isEmpty()) {
+        _account->setDavDisplayName(displayName);
+    }
 }
 
 void ConnectionValidator::slotAvatarImage(const QImage &img)