Add option to enable or disable an account

parent 35f24280
......@@ -28,8 +28,13 @@
* along with Kaidan. If not, see <http://www.gnu.org/licenses/>.
*/
import QtQuick 2.7
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.3 as Controls
import org.kde.kirigami 2.8 as Kirigami
import im.kaidan.kaidan 1.0
import "settings"
Kirigami.GlobalDrawer {
......@@ -42,6 +47,40 @@ Kirigami.GlobalDrawer {
id: settingsSheet
}
topContent: [
// This item is used to disable an account temporarily.
RowLayout {
spacing: -4
property bool disconnected: kaidan.connectionState === Enums.StateDisconnected
property bool connected: kaidan.connectionState === Enums.StateConnected
Controls.Switch {
checked: !parent.disconnected
onClicked: parent.disconnected ? kaidan.mainConnect() : kaidan.mainDisconnect()
}
Text {
text: {
var jidAndStatus = kaidan.jid + " ("
if (parent.disconnected)
jidAndStatus += qsTr("Offline");
else if (parent.connected)
jidAndStatus += qsTr("Online");
else
jidAndStatus += qsTr("Connecting...");
jidAndStatus += ")"
return jidAndStatus
}
color: parent.connected ? Utils.presenceTypeToColor(Enums.PresOnline) : Utils.presenceTypeToColor(Enums.PresUnavailable)
}
}
]
actions: [
Kirigami.Action {
text: qsTr("Invite friends")
......@@ -55,7 +94,7 @@ Kirigami.GlobalDrawer {
text: qsTr("Log out")
icon.name: "system-shutdown"
onTriggered: {
closeAdditionalLayers()
popLayersAboveLowest()
// disconnect (open log in page)
kaidan.mainDisconnect(true)
}
......@@ -67,9 +106,9 @@ Kirigami.GlobalDrawer {
// open settings page
if (Kirigami.Settings.isMobile) {
if (pageStack.layers.depth < 2)
pageStack.layers.push(settingsPage)
pageStack.layers.push(settingsPage)
} else {
settingsSheet.open()
settingsSheet.open()
}
}
},
......@@ -77,15 +116,10 @@ Kirigami.GlobalDrawer {
text: qsTr("About")
icon.name: "help-about"
onTriggered: {
closeAdditionalLayers()
popLayersAboveLowest()
// open about sheet
aboutDialog.open()
}
}
]
function closeAdditionalLayers() {
while (pageStack.layers.depth > 1)
pageStack.layers.pop()
}
}
......@@ -32,7 +32,9 @@ import QtQuick 2.7
import QtQuick.Controls.Material 2.3
import org.kde.kirigami 2.8 as Kirigami
import StatusBar 0.1
import im.kaidan.kaidan 1.0
import "elements"
import "settings"
......@@ -92,29 +94,43 @@ Kirigami.ApplicationWindow {
passiveNotification(Utils.connectionErrorMessage(kaidan.connectionError))
}
function openLogInPage() {
// close all pages (we don't know on which page we're on,
// thus we don't use replace)
while (pageStack.depth > 0)
pageStack.pop()
// toggle global drawer
function openLoginPage() {
globalDrawer.enabled = false
globalDrawer.visible = false
// push new page
popLayersAboveLowest()
popAllPages()
pageStack.push(loginPage)
}
function closeLogInPage() {
// toggle global drawer
/**
* Opens the view with the roster and chat page.
*/
function openChatView() {
globalDrawer.enabled = true
// replace page with roster page
pageStack.replace(rosterPage)
popAllPages()
pageStack.push(rosterPage)
if (!Kirigami.Settings.isMobile)
pageStack.push(emptyChatPage)
}
/**
* Pops all layers except the layer with index 0 from the page stack.
*/
function popLayersAboveLowest() {
while (pageStack.layers.depth > 1)
pageStack.layers.pop()
}
/**
* Pops all pages from the page stack.
*/
function popAllPages() {
while (pageStack.depth > 0)
pageStack.pop()
}
function handleSubRequest(from, message) {
kaidan.vCardRequested(from)
......@@ -126,22 +142,20 @@ Kirigami.ApplicationWindow {
Component.onCompleted: {
kaidan.passiveNotificationRequested.connect(passiveNotification)
kaidan.newCredentialsNeeded.connect(openLogInPage)
kaidan.logInWorked.connect(closeLogInPage)
kaidan.newCredentialsNeeded.connect(openLoginPage)
kaidan.logInWorked.connect(openChatView)
kaidan.subscriptionRequestReceived.connect(handleSubRequest)
// push roster page (trying normal start up)
pageStack.push(rosterPage)
if (!Kirigami.Settings.isMobile)
pageStack.push(emptyChatPage)
// Annouce that we're ready and the back-end can start with connecting
openChatView()
// Announce that the user interface is ready and the application can start connecting.
kaidan.start()
}
Component.onDestruction: {
kaidan.passiveNotificationRequested.disconnect(passiveNotification)
kaidan.newCredentialsNeeded.disconnect(openLogInPage)
kaidan.logInWorked.disconnect(closeLogInPage)
kaidan.newCredentialsNeeded.disconnect(openLoginPage)
kaidan.logInWorked.disconnect(openChatView)
kaidan.subscriptionRequestReceived.disconnect(handleSubRequest)
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment