Hello community,

here is the log from the commit of package matrix-quaternion for 
openSUSE:Factory checked in at 2020-04-01 19:16:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/matrix-quaternion (Old)
 and      /work/SRC/openSUSE:Factory/.matrix-quaternion.new.3248 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "matrix-quaternion"

Wed Apr  1 19:16:49 2020 rev:3 rq:790403 version:0.0.9.4d

Changes:
--------
--- /work/SRC/openSUSE:Factory/matrix-quaternion/matrix-quaternion.changes      
2019-06-12 13:12:29.216930697 +0200
+++ 
/work/SRC/openSUSE:Factory/.matrix-quaternion.new.3248/matrix-quaternion.changes
    2020-04-01 19:17:29.619508314 +0200
@@ -1,0 +2,21 @@
+Tue Mar 31 20:02:32 UTC 2020 - [email protected]
+
+- Update to 0.0.9.4d
+  This is a "sustaining" "rebuild" of the "stable" (that is - users
+  know its bugs by now) Quaternion on top of libQMatrixClient 
+  0.5.3.1. Unlike previous rebuilds, this incorporates two major
+  changes in Quaternion itself, backported from the master branch:
+
+  - (#653) Single sign-on support, to help Mozilla homeserver users
+  - (#663) Interoperability with Pantalaimon, to help practically
+    any Matrix user who agrees to use Pantalaimon as an E2EE proxy.
+
+-------------------------------------------------------------------
+Wed Jan 29 08:58:00 UTC 2020 - [email protected]
+
+- Update to 0.0.9.4c
+  - A problem that led to appstream-util validate failure 
+    preventing correct construction of Flatpaks has been fixed.
+- Run spec-cleaner.
+
+-------------------------------------------------------------------

Old:
----
  matrix-quaternion-0.0.9.4.tar.gz

New:
----
  matrix-quaternion-0.0.9.4d.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ matrix-quaternion.spec ++++++
--- /var/tmp/diff_new_pack.o0UPNh/_old  2020-04-01 19:17:32.203509476 +0200
+++ /var/tmp/diff_new_pack.o0UPNh/_new  2020-04-01 19:17:32.207509478 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package matrix-quaternion
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,21 +17,16 @@
 
 
 Name:           matrix-quaternion
-Version:        0.0.9.4
+Version:        0.0.9.4d
 Release:        0
 Summary:        QT Matrix client
 License:        GPL-3.0-only
 Group:          Productivity/Networking/Instant Messenger
-Url:            https://github.com/QMatrixClient/Quaternion
+URL:            https://github.com/QMatrixClient/Quaternion
 Source0:        
https://github.com/QMatrixClient/Quaternion/archive/%{version}/%{name}-%{version}.tar.gz
-BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  cmake
-%if 0%{?suse_version} < 1500
-BuildRequires:  gcc7-c++
-%else
-BuildRequires:  gcc-c++
-%endif
 BuildRequires:  hicolor-icon-theme
+BuildRequires:  pkgconfig
 BuildRequires:  cmake(Qt5Keychain)
 BuildRequires:  cmake(Qt5LinguistTools)
 BuildRequires:  pkgconfig(QMatrixClient) >= 0.5.1
@@ -46,6 +41,11 @@
 Requires:       %{name}-lang
 Requires:       libqt5-qtquickcontrols
 Requires:       libqt5-qtquickcontrols2
+%if 0%{?suse_version} < 1500
+BuildRequires:  gcc7-c++
+%else
+BuildRequires:  gcc-c++
+%endif
 # upstream use instead Qt5Core, Qt5Gui, Qt5Network, Qt5Quick, Qt5Widgets:
 # BuildRequires:  libqt5-qtdeclarative-devel libqt5-qtquickcontrols
 
@@ -81,8 +81,8 @@
 %endif
 
 %files
-%defattr(-,root,root,-)
-%doc COPYING README.md
+%license COPYING
+%doc README.md
 %{_bindir}/quaternion
 %{_datadir}/applications/*.desktop
 %{_datadir}/icons/hicolor/*/apps/*

++++++ matrix-quaternion-0.0.9.4.tar.gz -> matrix-quaternion-0.0.9.4d.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Quaternion-0.0.9.4/.travis.yml 
new/Quaternion-0.0.9.4d/.travis.yml
--- old/Quaternion-0.0.9.4/.travis.yml  2019-04-29 11:59:48.000000000 +0200
+++ new/Quaternion-0.0.9.4d/.travis.yml 2020-03-31 08:00:03.000000000 +0200
@@ -64,6 +64,7 @@
         - qt512tools
         - qt512translations
         - qt5keychain-dev
+        - appstream-util
   - os: osx
     env: [ 'PATH=/usr/local/opt/qt/bin:$PATH' ]
     addons:
@@ -82,7 +83,7 @@
 - mkdir build && pushd build
 # TODO: add building with an external lib
 - cmake .. -LA -DUSE_INTREE_LIBQMC=1 -DCMAKE_BUILD_TYPE=RelWithDebInfo 
-DCMAKE_INSTALL_PREFIX=/usr -DDEPLOY_VERBOSITY=$DEPLOY_VERBOSITY
-#- appstream-util validate linux/*.appdata.xml
+- if [ -f "$(which appstream-util)" ]; then appstream-util validate 
../linux/*.appdata.xml; fi
 - cmake --build . --target all
 - export DESTDIR=$TRAVIS_BUILD_DIR/install
 - if [ "$TRAVIS_OS_NAME" = "linux" ]; then cmake --build . --target install; fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Quaternion-0.0.9.4/CMakeLists.txt 
new/Quaternion-0.0.9.4d/CMakeLists.txt
--- old/Quaternion-0.0.9.4/CMakeLists.txt       2019-04-29 11:59:48.000000000 
+0200
+++ new/Quaternion-0.0.9.4d/CMakeLists.txt      2020-03-31 08:00:03.000000000 
+0200
@@ -1,7 +1,7 @@
 CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
 
 set(IDENTIFIER "com.github.quaternion")
-set(COPYRIGHT "Copyright © 2018-2019 QMatrixClient Project")
+set(COPYRIGHT "Copyright © 2018-2020 QMatrixClient Project")
 
 project(quaternion VERSION 0.0.9.4 LANGUAGES CXX)
 
@@ -239,10 +239,10 @@
         RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
         BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR})
 if(LINUX)
-    install(FILES linux/quaternion.desktop
+    install(FILES linux/${IDENTIFIER}.desktop
             DESTINATION  ${CMAKE_INSTALL_DATADIR}/applications
             )
-    install(FILES linux/com.github.quaternion.appdata.xml
+    install(FILES linux/${IDENTIFIER}.appdata.xml
             DESTINATION  ${CMAKE_INSTALL_DATADIR}/metainfo
             )
     install(FILES ${quaternion_QM}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Quaternion-0.0.9.4/client/chatroomwidget.cpp 
new/Quaternion-0.0.9.4d/client/chatroomwidget.cpp
--- old/Quaternion-0.0.9.4/client/chatroomwidget.cpp    2019-04-29 
11:59:48.000000000 +0200
+++ new/Quaternion-0.0.9.4d/client/chatroomwidget.cpp   2020-03-31 
08:00:03.000000000 +0200
@@ -236,11 +236,10 @@
 
 void ChatRoomWidget::encryptionChanged()
 {
-    m_chatEdit->setReadOnly(m_currentRoom && m_currentRoom->usesEncryption());
     m_chatEdit->setPlaceholderText(
         m_currentRoom
             ? m_currentRoom->usesEncryption()
-                ? tr("Sending encrypted messages is not supported yet")
+                ? tr("Send a message (no end-to-end encryption support 
yet)...")
                 : tr("Send a message (over %1) or enter a command...",
                      "%1 is the protocol used by the server (usually HTTPS)")
                   .arg(m_currentRoom->connection()->homeserver()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Quaternion-0.0.9.4/client/dialog.cpp 
new/Quaternion-0.0.9.4d/client/dialog.cpp
--- old/Quaternion-0.0.9.4/client/dialog.cpp    2019-04-29 11:59:48.000000000 
+0200
+++ new/Quaternion-0.0.9.4d/client/dialog.cpp   2020-03-31 08:00:03.000000000 
+0200
@@ -25,7 +25,7 @@
                UseStatusLine useStatusLine, const QString& applyTitle,
                QDialogButtonBox::StandardButtons addButtons)
     : Dialog(title
-        , QDialogButtonBox::Ok | QDialogButtonBox::Cancel | addButtons
+        , QDialogButtonBox::Ok | /*QDialogButtonBox::Cancel |*/ addButtons
         , parent, useStatusLine)
 {
     if (!applyTitle.isEmpty())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Quaternion-0.0.9.4/client/logindialog.cpp 
new/Quaternion-0.0.9.4d/client/logindialog.cpp
--- old/Quaternion-0.0.9.4/client/logindialog.cpp       2019-04-29 
11:59:48.000000000 +0200
+++ new/Quaternion-0.0.9.4d/client/logindialog.cpp      2020-03-31 
08:00:03.000000000 +0200
@@ -20,6 +20,7 @@
 #include "logindialog.h"
 
 #include <connection.h>
+#include <ssosession.h>
 #include <settings.h>
 
 #include <QtWidgets/QLineEdit>
@@ -27,10 +28,13 @@
 #include <QtWidgets/QLabel>
 #include <QtWidgets/QCheckBox>
 #include <QtWidgets/QFormLayout>
+#include <QtWidgets/QMessageBox>
+#include <QtGui/QDesktopServices>
 
 using QMatrixClient::Connection;
 
-LoginDialog::LoginDialog(QWidget* parent, const QStringList& knownAccounts)
+LoginDialog::LoginDialog(const QString& statusMessage, QWidget* parent,
+                         const QStringList& knownAccounts)
     : Dialog(tr("Login"), parent, Dialog::StatusLine, tr("Login"),
              Dialog::NoExtraButtons)
     , userEdit(new QLineEdit(this))
@@ -40,7 +44,7 @@
     , saveTokenCheck(new QCheckBox(tr("Stay logged in"), this))
     , m_connection(new Connection)
 {
-    setup();
+    setup(statusMessage);
     setPendingApplyMessage(tr("Connecting and logging in, please wait"));
 
     connect(userEdit, &QLineEdit::editingFinished, m_connection.data(),
@@ -50,6 +54,26 @@
                     m_connection->resolveServer(userId);
             });
 
+    // This button is only shown when BOTH password auth and SSO are available
+    // If only one flow is there, the "Login" button text is changed instead
+    auto* ssoButton = buttonBox()->addButton(tr("Login with SSO"),
+                                             QDialogButtonBox::AcceptRole);
+    connect(ssoButton, &QPushButton::clicked, this, 
&LoginDialog::loginWithSso);
+    ssoButton->setHidden(true);
+    connect(m_connection.data(), &Connection::loginFlowsChanged, this,
+            [this, ssoButton] {
+                // There may be more ways to login but Quaternion only supports
+                // SSO and password for now; in the worst case of no known
+                // options password login is kept enabled as the last resort.
+                bool canUseSso = m_connection->supportsSso();
+                bool canUsePassword = m_connection->supportsPasswordAuth();
+                ssoButton->setVisible(canUseSso && canUsePassword);
+                button(QDialogButtonBox::Ok)
+                    ->setText(canUseSso && !canUsePassword
+                                  ? QStringLiteral("Login with SSO")
+                                  : QStringLiteral("Login"));
+            });
+
     {
         // Fill defaults
         using namespace QMatrixClient;
@@ -76,7 +100,7 @@
     }
 }
 
-LoginDialog::LoginDialog(QWidget* parent,
+LoginDialog::LoginDialog(const QString &statusMessage, QWidget* parent,
                          const QMatrixClient::AccountSettings& reloginData)
     : Dialog(tr("Re-login"), parent, Dialog::StatusLine, tr("Re-login"),
              Dialog::NoExtraButtons)
@@ -87,14 +111,15 @@
     , saveTokenCheck(new QCheckBox(tr("Stay logged in"), this))
     , m_connection(new Connection)
 {
-    setup();
+    setup(statusMessage);
     userEdit->setReadOnly(true);
     userEdit->setFrame(false);
     setPendingApplyMessage(tr("Restoring access, please wait"));
 }
 
-void LoginDialog::setup()
+void LoginDialog::setup(const QString& statusMessage)
 {
+    setStatusMessage(statusMessage);
     passwordEdit->setEchoMode( QLineEdit::Password );
 
     connect(m_connection.data(), &Connection::homeserverChanged, serverEdit,
@@ -130,11 +155,61 @@
     auto url = QUrl::fromUserInput(serverEdit->text());
     if (!serverEdit->text().isEmpty() && 
!serverEdit->text().startsWith("http:"))
         url.setScheme("https"); // Qt defaults to http (or even ftp for some)
-    m_connection->setHomeserver(url);
-    connect( m_connection.data(), &Connection::connected,
-             this, &Dialog::accept );
-    connect( m_connection.data(), &Connection::loginError,
-             this, &Dialog::applyFailed);
+
+    // Whichever the flow, the two connections are the same
+    connect(m_connection.data(), &Connection::connected,
+            this, &Dialog::accept);
+    connect(m_connection.data(), &Connection::loginError,
+            this, &Dialog::applyFailed);
+    if (m_connection->homeserver() == url && 
!m_connection->loginFlows().empty())
+        loginWithBestFlow();
+    else {
+        m_connection->setHomeserver(url);
+
+        // Wait for new flows and check them
+        connectSingleShot(m_connection.data(), &Connection::loginFlowsChanged,
+                          this, [this] {
+                              qDebug()
+                                  << "Received login flows, trying to login";
+                              loginWithBestFlow();
+                          });
+    }
+}
+
+void LoginDialog::loginWithBestFlow()
+{
+    if (m_connection->loginFlows().empty()
+        || m_connection->supportsPasswordAuth())
+        loginWithPassword();
+    else if (m_connection->supportsSso())
+        loginWithSso();
+    else
+        emit applyFailed(tr("No supported login flows"));
+}
+
+void LoginDialog::loginWithPassword()
+{
     m_connection->connectToServer(userEdit->text(), passwordEdit->text(),
                                   initialDeviceName->text());
 }
+
+void LoginDialog::loginWithSso()
+{
+    auto* ssoSession = m_connection->prepareForSso(initialDeviceName->text());
+    if (!QDesktopServices::openUrl(ssoSession->ssoUrl())) {
+        auto* instructionsBox =
+            new Dialog(tr("Single sign-on"), QDialogButtonBox::NoButton, this);
+        instructionsBox->addWidget(new QLabel(
+            tr("Quaternion couldn't automatically open the single sign-on URL. 
"
+               "Please copy and paste it to the right application (usually "
+               "a web browser):")));
+        auto* urlBox = new QLineEdit(ssoSession->ssoUrl().toString());
+        urlBox->setReadOnly(true);
+        instructionsBox->addWidget(urlBox);
+        instructionsBox->addWidget(
+            new QLabel(tr("After authentication, the browser will follow "
+                          "the temporary local address setup by Quaternion "
+                          "to conclude the login sequence.")));
+        instructionsBox->open();
+    }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Quaternion-0.0.9.4/client/logindialog.h 
new/Quaternion-0.0.9.4d/client/logindialog.h
--- old/Quaternion-0.0.9.4/client/logindialog.h 2019-04-29 11:59:48.000000000 
+0200
+++ new/Quaternion-0.0.9.4d/client/logindialog.h        2020-03-31 
08:00:03.000000000 +0200
@@ -33,11 +33,12 @@
 {
         Q_OBJECT
     public:
-        explicit LoginDialog(QWidget* parent = nullptr,
+        explicit LoginDialog(const QString& statusMessage,
+                             QWidget* parent = nullptr,
                              const QStringList& knownAccounts = {});
-        explicit LoginDialog(QWidget* parent,
+        explicit LoginDialog(const QString& statusMessage, QWidget* parent,
                              const QMatrixClient::AccountSettings& 
reloginData);
-        void setup();
+        void setup(const QString &statusMessage);
         ~LoginDialog() override;
 
         QMatrixClient::Connection* releaseConnection();
@@ -46,6 +47,9 @@
 
     private slots:
         void apply() override;
+        void loginWithBestFlow();
+        void loginWithPassword();
+        void loginWithSso();
         
     private:
         QLineEdit* userEdit;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Quaternion-0.0.9.4/client/main.cpp 
new/Quaternion-0.0.9.4d/client/main.cpp
--- old/Quaternion-0.0.9.4/client/main.cpp      2019-04-29 11:59:48.000000000 
+0200
+++ new/Quaternion-0.0.9.4d/client/main.cpp     2020-03-31 08:00:03.000000000 
+0200
@@ -39,7 +39,7 @@
     QApplication::setOrganizationName(QStringLiteral("QMatrixClient"));
     QApplication::setApplicationName(QStringLiteral("quaternion"));
     QApplication::setApplicationDisplayName(QStringLiteral("Quaternion"));
-    QApplication::setApplicationVersion(QStringLiteral("0.0.9.4"));
+    QApplication::setApplicationVersion(QStringLiteral("0.0.9.4d"));
 
     QMatrixClient::Settings::setLegacyNames(
                 QStringLiteral("Quaternion"), QStringLiteral("quaternion"));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Quaternion-0.0.9.4/client/mainwindow.cpp 
new/Quaternion-0.0.9.4d/client/mainwindow.cpp
--- old/Quaternion-0.0.9.4/client/mainwindow.cpp        2019-04-29 
11:59:48.000000000 +0200
+++ new/Quaternion-0.0.9.4d/client/mainwindow.cpp       2020-03-31 
08:00:03.000000000 +0200
@@ -783,6 +783,14 @@
     c->deleteLater();
 }
 
+bool MainWindow::isInConnections(const QString& userId)
+{
+    return std::any_of(connections.cbegin(), connections.cend(),
+                       [&userId](Connection* c) {
+                           return c->userId() == userId;
+                       });
+}
+
 void MainWindow::showFirstSyncIndicator()
 {
     busyLabel->show();
@@ -796,80 +804,63 @@
         QMatrixClient::SettingsGroup("Accounts").childGroups();
     QStringList loggedOffAccounts;
     for (const auto& a: allKnownAccounts)
-    {
-        AccountSettings as { a };
         // Skip accounts mentioned in active connections
-        if ([&] {
-                    for (auto c: connections)
-                        if (as.userId() == c->userId())
-                            return false;
-                    return true;
-                }())
+        if (!isInConnections(AccountSettings(a).userId()))
             loggedOffAccounts.push_back(a);
-    }
 
-    LoginDialog dialog(this, loggedOffAccounts);
-    dialog.setStatusMessage(statusMessage);
-    if (dialog.exec())
-        processLogin(dialog);
+    doOpenLoginDialog(new LoginDialog(statusMessage, this, loggedOffAccounts));
 }
 
 void MainWindow::showLoginWindow(const QString& statusMessage,
-                                 AccountSettings& reloginAccount)
+                                 const QString& userId)
 {
-    LoginDialog dialog { this, reloginAccount };
-
-    dialog.setStatusMessage(statusMessage);
-    if (dialog.exec())
-        processLogin(dialog);
-    else
-    {
-        reloginAccount.clearAccessToken();
-        QFile(accessTokenFileName(reloginAccount)).remove();
+    auto* reloginAccount = new AccountSettings(userId);
+    auto* dialog = new LoginDialog(statusMessage, this, *reloginAccount);
+    reloginAccount->setParent(dialog); // => Delete with the dialog box
+    doOpenLoginDialog(dialog);
+    connect(dialog, &QDialog::rejected, this, [reloginAccount] {
+        reloginAccount->clearAccessToken();
+        QFile(accessTokenFileName(*reloginAccount)).remove();
         // XXX: Maybe even remove the account altogether as below?
-//        
QMatrixClient::SettingsGroup("Accounts").remove(reloginAccount.userId());
-    }
+               // 
QMatrixClient::SettingsGroup("Accounts").remove(reloginAccount->userId());
+    });
 }
 
-void MainWindow::processLogin(LoginDialog& dialog)
+void MainWindow::doOpenLoginDialog(LoginDialog* dialog)
 {
-    auto connection = dialog.releaseConnection();
-    AccountSettings account(connection->userId());
-    account.setKeepLoggedIn(dialog.keepLoggedIn());
-    account.clearAccessToken(); // Drop the legacy - just in case
-    account.setHomeserver(connection->homeserver());
-    account.setDeviceId(connection->deviceId());
-    account.setDeviceName(dialog.deviceName());
-    if (dialog.keepLoggedIn())
-    {
-        if (!saveAccessToken(account, connection->accessToken()))
-            qWarning() << "Couldn't save access token";
-    } else
-        logoutOnExit.push_back(connection);
-    account.sync();
+    dialog->setAttribute(Qt::WA_DeleteOnClose);
+    dialog->open();
+    connect(dialog, &QDialog::accepted, this, [this, dialog] {
+        auto connection = dialog->releaseConnection();
+        AccountSettings account(connection->userId());
+        account.setKeepLoggedIn(dialog->keepLoggedIn());
+        account.clearAccessToken(); // Drop the legacy - just in case
+        account.setHomeserver(connection->homeserver());
+        account.setDeviceId(connection->deviceId());
+        account.setDeviceName(dialog->deviceName());
+        if (dialog->keepLoggedIn()) {
+            if (!saveAccessToken(account, connection->accessToken()))
+                qWarning() << "Couldn't save access token";
+        } else
+            logoutOnExit.push_back(connection);
+        account.sync();
 
-    showFirstSyncIndicator();
+        showFirstSyncIndicator();
 
-    auto deviceName = dialog.deviceName();
-    const auto it = std::find_if(connections.cbegin(), connections.cend(),
-        [connection] (Connection* c) {
-            return c->userId() == connection->userId();
-        });
+        auto deviceName = dialog->deviceName();
+        if (isInConnections(connection->userId())) {
+            if (QMessageBox::warning(
+                    this, tr("Logging in into a logged in account"),
+                    tr("You're trying to log in into an account that's "
+                       "already logged in. Do you want to continue?"),
+                    QMessageBox::Yes, QMessageBox::No)
+                != QMessageBox::Yes)
+                return;
 
-    if (it != connections.cend())
-    {
-        int ret = QMessageBox::warning(this,
-            tr("Logging in into a logged in account"),
-            tr("You're trying to log in into an account that's "
-               "already logged in. Do you want to continue?"),
-            QMessageBox::Yes, QMessageBox::No);
-
-        if (ret == QMessageBox::Yes)
             deviceName += "-" + connection->deviceId();
-        else
-            return;
-    }
-    addConnection(connection, deviceName);
+        }
+        addConnection(connection, deviceName);
+    });
 }
 
 void MainWindow::showAboutWindow()
@@ -998,12 +989,11 @@
 void MainWindow::loginError(Connection* c, const QString& message)
 {
     Q_ASSERT_X(c, __FUNCTION__, "Login error on a null connection");
-    AccountSettings as { c->userId() };
     c->stopSync();
     // Security over convenience: before allowing back in, remove
     // the connection from the UI
     emit c->loggedOut(); // Short circuit login error to logged-out event
-    showLoginWindow(message, as);
+    showLoginWindow(message, c->userId());
 }
 
 void MainWindow::logout(Connection* c)
@@ -1228,8 +1218,11 @@
     QStringList list;
     if (type & Room)
     {
-        for (auto* room: connection->roomMap())
-            list << room->canonicalAlias();
+        for (auto* room : connection->allRooms()) {
+            list << room->id();
+            if (!room->canonicalAlias().isEmpty())
+                list << room->canonicalAlias();
+        }
     }
     if (type & User)
     {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Quaternion-0.0.9.4/client/mainwindow.h 
new/Quaternion-0.0.9.4d/client/mainwindow.h
--- old/Quaternion-0.0.9.4/client/mainwindow.h  2019-04-29 11:59:48.000000000 
+0200
+++ new/Quaternion-0.0.9.4d/client/mainwindow.h 2020-03-31 08:00:03.000000000 
+0200
@@ -66,6 +66,7 @@
 
         void addConnection(Connection* c, const QString& deviceName);
         void dropConnection(Connection* c);
+        bool isInConnections(const QString& userId);
 
         ChatRoomWidget* getChatRoomWidget() const;
 
@@ -90,7 +91,7 @@
 
         void showLoginWindow(const QString& statusMessage = {});
         void showLoginWindow(const QString& statusMessage,
-            QMatrixClient::AccountSettings& reloginAccount);
+                             const QString& userId);
         void showAboutWindow();
         void logout(Connection* c);
 
@@ -132,7 +133,7 @@
         void showFirstSyncIndicator();
         void loadSettings();
         void saveSettings() const;
-        void processLogin(LoginDialog& dialog);
+        void doOpenLoginDialog(LoginDialog* dialog);
         QByteArray loadAccessToken(const QMatrixClient::AccountSettings& 
account);
         QByteArray loadAccessTokenFromFile(const 
QMatrixClient::AccountSettings& account);
         QByteArray loadAccessTokenFromKeyChain(const 
QMatrixClient::AccountSettings &account);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Quaternion-0.0.9.4/client/models/roomlistmodel.cpp 
new/Quaternion-0.0.9.4d/client/models/roomlistmodel.cpp
--- old/Quaternion-0.0.9.4/client/models/roomlistmodel.cpp      2019-04-29 
11:59:48.000000000 +0200
+++ new/Quaternion-0.0.9.4d/client/models/roomlistmodel.cpp     2020-03-31 
08:00:03.000000000 +0200
@@ -54,7 +54,7 @@
              this, &RoomListModel::addRoom);
     m_roomOrder->connectSignals(connection);
 
-    for (auto* r: connection->roomMap())
+    for (auto* r: connection->allRooms())
         addRoom(r);
 }
 
@@ -70,7 +70,7 @@
         return;
     }
 
-    for (auto* r: connection->roomMap())
+    for (auto* r: connection->allRooms())
         deleteRoom(r);
     m_connections.erase(connIt);
     connection->disconnect(this);
@@ -292,7 +292,7 @@
     for (const auto& c: m_connections)
     {
         m_roomOrder->connectSignals(c);
-        for (auto* r: c->roomMap())
+        for (auto* r: c->allRooms())
         {
             addRoomToGroups(r);
             m_roomOrder->connectSignals(r);
@@ -330,7 +330,7 @@
 {
     int result = 0;
     for (const auto& c: m_connections)
-        result += c->roomMap().size();
+        result += c->allRooms().size();
     return result;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Quaternion-0.0.9.4/linux/com.github.quaternion.appdata.xml 
new/Quaternion-0.0.9.4d/linux/com.github.quaternion.appdata.xml
--- old/Quaternion-0.0.9.4/linux/com.github.quaternion.appdata.xml      
2019-04-29 11:59:48.000000000 +0200
+++ new/Quaternion-0.0.9.4d/linux/com.github.quaternion.appdata.xml     
2020-03-31 08:00:03.000000000 +0200
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <component type="desktop-application">
-  <id>com.github.quaternion</id>
+  <id>com.github.quaternion.desktop</id>
   <metadata_license>CC-BY-4.0</metadata_license>
   <project_license>GPL-3.0+</project_license>
   <name>Quaternion</name>
@@ -23,7 +23,7 @@
 
   <screenshots>
     <screenshot type="default">
-           <image type="source" width="1438" 
height="890">https://raw.githubusercontent.com/QMatrixClient/Quaternion/master/quaternion.png</image>
+        
<image>https://raw.githubusercontent.com/QMatrixClient/Quaternion/master/quaternion.png</image>
     </screenshot>
   </screenshots>
 
@@ -37,7 +37,6 @@
   
   <releases>
     <release version="0.0.9.4" date="2019-04-29" />
-    <release version="0.0.9.4-beta1" date="2019-03-03" type="development" />
     <release version="0.0.9.3" date="2018-10-21" />
     <release version="0.0.9.2" date="2018-06-17" />
     <release version="0.0.9.1" date="2018-05-07" />
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Quaternion-0.0.9.4/linux/com.github.quaternion.desktop 
new/Quaternion-0.0.9.4d/linux/com.github.quaternion.desktop
--- old/Quaternion-0.0.9.4/linux/com.github.quaternion.desktop  1970-01-01 
01:00:00.000000000 +0100
+++ new/Quaternion-0.0.9.4d/linux/com.github.quaternion.desktop 2020-03-31 
08:00:03.000000000 +0200
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Name=Quaternion
+GenericName=Matrix Client
+Comment=IM client for the Matrix protocol
+Comment[de]=IM Client für das Matrix Protokoll
+Exec=quaternion
+Terminal=false
+Icon=quaternion
+Type=Application
+Categories=Network;InstantMessaging;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Quaternion-0.0.9.4/linux/quaternion.desktop 
new/Quaternion-0.0.9.4d/linux/quaternion.desktop
--- old/Quaternion-0.0.9.4/linux/quaternion.desktop     2019-04-29 
11:59:48.000000000 +0200
+++ new/Quaternion-0.0.9.4d/linux/quaternion.desktop    1970-01-01 
01:00:00.000000000 +0100
@@ -1,10 +0,0 @@
-[Desktop Entry]
-Name=Quaternion
-GenericName=Matrix Client
-Comment=IM client for the Matrix protocol
-Comment[de]=IM Client für das Matrix Protokoll
-Exec=quaternion
-Terminal=false
-Icon=quaternion
-Type=Application
-Categories=Network;InstantMessaging;


Reply via email to