Track online status per connection
This commit is contained in:
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user