pantalaimon-ut/qml/SettingsPage.qml
2021-09-08 06:45:30 -07:00

252 lines
6.8 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
property int loglevel_idx
property var loglevels: [
i18n.tr("warning"),
i18n.tr("info"),
i18n.tr("debug"),
i18n.tr("error")
]
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();
}
}
}
}
Column {
id: defaultlogLevel
anchors.top: serviceState.bottom
width: parent.width
leftPadding: units.gu(2)
topPadding: units.gu(2)
OptionSelector {
id: loglevel
text: i18n.tr("LogLevel")
width: parent.width - units.gu(4)
model: loglevels
containerHeight: itemHeight * 6
onDelegateClicked: {
loglevel_idx = index;
saveConfig();
if (is_running) {
py.call('service.stop', [], function(result) {});
py.call('service.start', [], function(result) {});
get_status();
}
}
}
Label {
text: " "
height: units.gu(2)
}
ListItems.Divider {
height: units.gu(.5)
}
}
ListView {
id: listView
width: parent.width
height: parent.height - bottomEdgeHint.height
anchors.top: defaultlogLevel.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: item.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) {
console.log('DEBUG: ' + JSON.stringify(result));
var defaults = result[0];
loglevel.selectedIndex = defaults.loglevel_idx;
loglevel_idx = defaults.loglevel_idx;
var data = result[1];
for (var i=0; i<data.length; i++) {
listModel.append(data[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));
}
var defaults = {
'loglevel': loglevels[loglevel_idx]
}
py.call("config.save", [JSON.stringify(defaults), 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()
}
}
}