pantalaimon-ut/qml/SettingsPage.qml
2020-09-03 15:04:34 -07:00

201 lines
5.3 KiB
QML

import QtQuick 2.7
import QtQuick.Layouts 1.3
import Ubuntu.Components 1.3
import Ubuntu.Components.ListItems 1.3 as ListItems
import io.thp.pyotherside 1.3
import "Components"
Page {
id: settingsPage
property bool is_running: false
property bool upstart: false
property string status_msg
header: PageHeader {
id: header
title: i18n.tr('Pantalaimon UT')
trailingActionBar.actions: [
Action {
iconName: 'info'
text: i18n.tr('About')
onTriggered: {
pageStack.push(Qt.resolvedUrl("AboutPage.qml"));
}
}
]
}
ListItem {
id: upstartState
anchors.top: header.bottom
width: parent.width
ListItems.Standard {
anchors.fill: parent
text: upstart ? i18n.tr("Service start enabled") : i18n.tr("Service start disabled")
control: Switch {
checked: upstart
onClicked: {
if (checked) {
py.call('service.add', [], function(result) {});
} else {
py.call('service.remove', [], function(result) {});
}
get_status();
}
}
}
}
ListItem {
id: serviceState
anchors.top: upstartState.bottom
width: parent.width
ListItems.Standard {
anchors.fill: parent
text: status_msg
control: Switch {
enabled: upstart
checked: is_running
onClicked: {
if (checked) {
py.call('service.start', [], function(result) {});
} else {
py.call('service.stop', [], function(result) {});
}
get_status();
}
}
}
}
ListView {
id: listView
width: parent.width
height: parent.height - bottomEdgeHint.height
anchors.top: serviceState.bottom
visible: (listView.count !== 0)
model: ListModel {
id: listModel
}
clip: true
delegate: ListItem {
ListItems.Standard {
anchors.fill: parent
text: name
progression: true
onClicked: {
var item = listModel.get(index);
pageStack.push(editConfigPage, {
idx: index,
instance: item.name,
homeserver: item.homeserver,
listenport: item.listenport,
proxy: item.proxy,
ssl: ssl
});
}
}
leadingActions: ListItemActions {
actions: [
Action {
iconName: "delete"
text: i18n.tr("Delete homeserver")
onTriggered: {
console.log("debug: delete " + index);
listModel.remove(index);
saveConfig();
}
}
]
}
}
}
Rectangle {
visible: (listView.count === 0)
// color: "lightgrey"
anchors.fill: parent
Label {
text: i18n.tr("No homeservers")
fontSize: "x-large"
anchors.centerIn: parent
}
}
Python {
id: py
Component.onCompleted: {
addImportPath(Qt.resolvedUrl('../src/'));
importModule('config', function() {
py.call('config.load', [], function(result) {
for (var i=0; i<result.length; i++) {
listModel.append(result[i])
}
});
console.log("debug: python config loaded...");
});
importModule('service', function() {
console.log("debug: python service loaded...");
get_status();
});
}
}
function saveConfig() {
var lmdata = []
for (var i = 0; i < listModel.count; ++i) {
lmdata.push(listModel.get(i));
}
py.call("config.save", [JSON.stringify(lmdata)], function(result) {});
}
function get_status() {
py.call("service.check_upstart", [], function(result) {
upstart = result;
});
py.call("service.status", [], function(result) {
is_running = result[0];
status_msg = result[1];
});
}
BottomEdge {
id: bottomEdge
height: parent.height
hint {
id: bottomEdgeHint
text: i18n.tr("Add Homeserver")
iconName: "add"
status: BottomEdgeHint.Locked
onStatusChanged: if (status === BottomEdgeHint.Inactive) bottomEdge.hint.status = BottomEdgeHint.Locked
}
contentComponent: EditServerPage {
id: bottomEdgeComponent
onSave: saveConfig()
}
}
Component {
id: editConfigPage
EditServerPage {
editmode: true
onSave: saveConfig()
}
}
}