From 757cc99ff08aeec2f35519897bc71f184582881e Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Fri, 7 May 2021 03:36:40 +0200 Subject: [PATCH] Add indicator for lack of internet connectivity Fix #315 --- imports/NeoChat/Component/ChatBox/ChatBox.qml | 26 +++++++++++++++++++ src/controller.cpp | 10 +++++++ src/controller.h | 7 +++++ 3 files changed, 43 insertions(+) diff --git a/imports/NeoChat/Component/ChatBox/ChatBox.qml b/imports/NeoChat/Component/ChatBox/ChatBox.qml index aa39fd1eb..b39a92a51 100644 --- a/imports/NeoChat/Component/ChatBox/ChatBox.qml +++ b/imports/NeoChat/Component/ChatBox/ChatBox.qml @@ -3,6 +3,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later import QtQuick 2.15 +import QtQuick.Controls 2.15 as QQC2 import Qt.labs.platform 1.1 as Platform import org.kde.kirigami 2.15 as Kirigami @@ -48,6 +49,31 @@ Item { } } + Kirigami.Separator { + id: connectionPaneSeparator + visible: connectionPane.visible + width: parent.width + height: visible ? implicitHeight : 0 + anchors.bottom: connectionPane.top + z: 1 + } + + QQC2.Pane { + id: connectionPane + padding: fontMetrics.lineSpacing * 0.25 + spacing: 0 + Kirigami.Theme.colorSet: Kirigami.Theme.View + background: Rectangle { + color: Kirigami.Theme.backgroundColor + } + visible: !Controller.isOnline + width: parent.width + QQC2.Label { + text: i18n("NeoChat is online. Please check your network connection.") + } + anchors.bottom: emojiPickerLoaderSeparator.top + } + Kirigami.Separator { id: emojiPickerLoaderSeparator visible: emojiPickerLoader.visible diff --git a/src/controller.cpp b/src/controller.cpp index 454ba3da7..ec464983f 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include @@ -56,6 +57,7 @@ using namespace Quotient; Controller::Controller(QObject *parent) : QObject(parent) + , m_mgr(new QNetworkConfigurationManager(this)) { Connection::setRoomType(); Connection::setUserType(); @@ -110,6 +112,9 @@ Controller::Controller(QObject *parent) sigaction(sig, &sa, nullptr); } #endif + + connect(m_mgr, &QNetworkConfigurationManager::onlineStateChanged, + this, &Controller::isOnlineChanged); } Controller::~Controller() @@ -575,6 +580,11 @@ void Controller::createRoom(const QString &name, const QString &topic) }); } +bool Controller::isOnline() const +{ + return m_mgr->isOnline(); +} + void Controller::joinRoom(const QString &alias) { if (!alias.contains(":")) { diff --git a/src/controller.h b/src/controller.h index b285bf402..9cb4234a9 100644 --- a/src/controller.h +++ b/src/controller.h @@ -10,6 +10,7 @@ #include class QKeySequences; +class QNetworkConfigurationManager; #include "connection.h" #include "csapi/list_public_rooms.h" @@ -31,6 +32,7 @@ class Controller : public QObject Q_PROPERTY(bool busy READ busy WRITE setBusy NOTIFY busyChanged) Q_PROPERTY(KAboutData aboutData READ aboutData WRITE setAboutData NOTIFY aboutDataChanged) Q_PROPERTY(bool supportSystemTray READ supportSystemTray CONSTANT) + Q_PROPERTY(bool isOnline READ isOnline NOTIFY isOnlineChanged) public: static Controller &instance(); @@ -78,6 +80,7 @@ public: /// \brief Join a room. Q_INVOKABLE void joinRoom(const QString &alias); + bool isOnline() const; private: explicit Controller(QObject *parent = nullptr); ~Controller() override; @@ -126,6 +129,7 @@ Q_SIGNALS: void openRoom(NeoChatRoom *room); void userConsentRequired(QUrl url); void testConnectionResult(const QString &connection, bool usable); + void isOnlineChanged(bool isOnline); public Q_SLOTS: void logout(Quotient::Connection *conn, bool serverSideLogout); @@ -133,6 +137,9 @@ public Q_SLOTS: void changeAvatar(Quotient::Connection *conn, const QUrl &localFile); static void markAllMessagesAsRead(Quotient::Connection *conn); void saveWindowGeometry(QQuickWindow *); + +private: + QNetworkConfigurationManager *m_mgr; }; // TODO libQuotient 0.7: Drop