Track online status per connection

This commit is contained in:
Tobias Fella
2023-11-05 22:49:36 +01:00
parent 59153be006
commit 4ef44b8e93
5 changed files with 34 additions and 30 deletions

View File

@@ -326,20 +326,6 @@ void Controller::setActiveConnection(NeoChatConnection *connection)
m_connection = connection; m_connection = connection;
if (connection != nullptr) { if (connection != nullptr) {
NeoChatConfig::self()->setActiveConnection(connection->userId()); NeoChatConfig::self()->setActiveConnection(connection->userId());
connect(connection, &NeoChatConnection::networkError, this, [this]() {
if (!m_isOnline) {
return;
}
m_isOnline = false;
Q_EMIT isOnlineChanged(false);
});
connect(connection, &NeoChatConnection::syncDone, this, [this] {
if (m_isOnline) {
return;
}
m_isOnline = true;
Q_EMIT isOnlineChanged(true);
});
connect(connection, &NeoChatConnection::requestFailed, this, [](BaseJob *job) { connect(connection, &NeoChatConnection::requestFailed, this, [](BaseJob *job) {
if (dynamic_cast<DownloadFileJob *>(job) && job->jsonData()["errcode"_ls].toString() == "M_TOO_LARGE"_ls) { if (dynamic_cast<DownloadFileJob *>(job) && job->jsonData()["errcode"_ls].toString() == "M_TOO_LARGE"_ls) {
RoomManager::instance().warning(i18n("File too large to download."), i18n("Contact your matrix server administrator for support.")); RoomManager::instance().warning(i18n("File too large to download."), i18n("Contact your matrix server administrator for support."));
@@ -357,11 +343,6 @@ void Controller::saveWindowGeometry()
WindowController::instance().saveGeometry(); WindowController::instance().saveGeometry();
} }
bool Controller::isOnline() const
{
return m_isOnline;
}
// TODO: Remove in favor of RoomManager::joinRoom // TODO: Remove in favor of RoomManager::joinRoom
void Controller::joinRoom(const QString &alias) void Controller::joinRoom(const QString &alias)
{ {

View File

@@ -51,11 +51,6 @@ class Controller : public QObject
*/ */
Q_PROPERTY(bool supportSystemTray READ supportSystemTray CONSTANT) Q_PROPERTY(bool supportSystemTray READ supportSystemTray CONSTANT)
/**
* @brief Whether NeoChat is currently able to connect to the server.
*/
Q_PROPERTY(bool isOnline READ isOnline NOTIFY isOnlineChanged)
/** /**
* @brief Whether NeoChat is running as a flatpak. * @brief Whether NeoChat is running as a flatpak.
* *
@@ -108,8 +103,6 @@ public:
[[nodiscard]] bool supportSystemTray() const; [[nodiscard]] bool supportSystemTray() const;
bool isOnline() const;
/** /**
* @brief Sets the QNetworkProxy for the application. * @brief Sets the QNetworkProxy for the application.
* *
@@ -138,7 +131,6 @@ private:
void loadSettings(); void loadSettings();
void saveSettings() const; void saveSettings() const;
bool m_isOnline = true;
QMap<Quotient::Room *, int> m_notificationCounts; QMap<Quotient::Room *, int> m_notificationCounts;
Quotient::AccountRegistry m_accountRegistry; Quotient::AccountRegistry m_accountRegistry;
@@ -164,7 +156,6 @@ Q_SIGNALS:
void activeConnectionChanged(); void activeConnectionChanged();
void passwordStatus(Controller::PasswordStatus status); void passwordStatus(Controller::PasswordStatus status);
void userConsentRequired(QUrl url); void userConsentRequired(QUrl url);
void isOnlineChanged(bool isOnline);
void accountsLoadingChanged(); void accountsLoadingChanged();
public Q_SLOTS: public Q_SLOTS:

View File

@@ -31,6 +31,12 @@ NeoChatConnection::NeoChatConnection(QObject *parent)
Q_EMIT labelChanged(); Q_EMIT labelChanged();
} }
}); });
connect(this, &NeoChatConnection::syncDone, this, [this] {
setIsOnline(true);
});
connect(this, &NeoChatConnection::networkError, this, [this]() {
setIsOnline(false);
});
} }
NeoChatConnection::NeoChatConnection(const QUrl &server, QObject *parent) NeoChatConnection::NeoChatConnection(const QUrl &server, QObject *parent)
@@ -252,4 +258,18 @@ QString NeoChatConnection::encryptionKey() const
return query.value(0).toString(); return query.value(0).toString();
} }
bool NeoChatConnection::isOnline() const
{
return m_isOnline;
}
void NeoChatConnection::setIsOnline(bool isOnline)
{
if (isOnline == m_isOnline) {
return;
}
m_isOnline = isOnline;
Q_EMIT isOnlineChanged();
}
#include "moc_neochatconnection.cpp" #include "moc_neochatconnection.cpp"

View File

@@ -26,6 +26,11 @@ class NeoChatConnection : public Quotient::Connection
Q_PROPERTY(QString deviceKey READ deviceKey CONSTANT) Q_PROPERTY(QString deviceKey READ deviceKey CONSTANT)
Q_PROPERTY(QString encryptionKey READ encryptionKey CONSTANT) Q_PROPERTY(QString encryptionKey READ encryptionKey CONSTANT)
/**
* @brief Whether NeoChat is currently able to connect to the server.
*/
Q_PROPERTY(bool isOnline READ isOnline WRITE setIsOnline NOTIFY isOnlineChanged)
public: public:
NeoChatConnection(QObject *parent = nullptr); NeoChatConnection(QObject *parent = nullptr);
NeoChatConnection(const QUrl &server, QObject *parent = nullptr); NeoChatConnection(const QUrl &server, QObject *parent = nullptr);
@@ -73,6 +78,13 @@ public:
QString deviceKey() const; QString deviceKey() const;
QString encryptionKey() const; QString encryptionKey() const;
bool isOnline() const;
Q_SIGNALS: Q_SIGNALS:
void labelChanged(); void labelChanged();
void isOnlineChanged();
private:
bool m_isOnline = true;
void setIsOnline(bool isOnline);
}; };

View File

@@ -94,9 +94,9 @@ Kirigami.Page {
} }
Connections { Connections {
target: Controller target: root.connection
function onIsOnlineChanged() { function onIsOnlineChanged() {
if (!Controller.isOnline) { if (!root.connection.isOnline) {
banner.text = i18n("NeoChat is offline. Please check your network connection."); banner.text = i18n("NeoChat is offline. Please check your network connection.");
banner.visible = true; banner.visible = true;
banner.type = Kirigami.MessageType.Error; banner.type = Kirigami.MessageType.Error;