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;
if (connection != nullptr) {
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) {
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."));
@@ -357,11 +343,6 @@ void Controller::saveWindowGeometry()
WindowController::instance().saveGeometry();
}
bool Controller::isOnline() const
{
return m_isOnline;
}
// TODO: Remove in favor of RoomManager::joinRoom
void Controller::joinRoom(const QString &alias)
{

View File

@@ -51,11 +51,6 @@ class Controller : public QObject
*/
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.
*
@@ -108,8 +103,6 @@ public:
[[nodiscard]] bool supportSystemTray() const;
bool isOnline() const;
/**
* @brief Sets the QNetworkProxy for the application.
*
@@ -138,7 +131,6 @@ private:
void loadSettings();
void saveSettings() const;
bool m_isOnline = true;
QMap<Quotient::Room *, int> m_notificationCounts;
Quotient::AccountRegistry m_accountRegistry;
@@ -164,7 +156,6 @@ Q_SIGNALS:
void activeConnectionChanged();
void passwordStatus(Controller::PasswordStatus status);
void userConsentRequired(QUrl url);
void isOnlineChanged(bool isOnline);
void accountsLoadingChanged();
public Q_SLOTS:

View File

@@ -31,6 +31,12 @@ NeoChatConnection::NeoChatConnection(QObject *parent)
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)
@@ -252,4 +258,18 @@ QString NeoChatConnection::encryptionKey() const
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"

View File

@@ -26,6 +26,11 @@ class NeoChatConnection : public Quotient::Connection
Q_PROPERTY(QString deviceKey READ deviceKey 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:
NeoChatConnection(QObject *parent = nullptr);
NeoChatConnection(const QUrl &server, QObject *parent = nullptr);
@@ -73,6 +78,13 @@ public:
QString deviceKey() const;
QString encryptionKey() const;
bool isOnline() const;
Q_SIGNALS:
void labelChanged();
void isOnlineChanged();
private:
bool m_isOnline = true;
void setIsOnline(bool isOnline);
};

View File

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