pantalaimon-ut/qml/SettingsPage.qml
Morgan McMillian 48de066938 fix loglevel setting on save
selectedIndex doesn't actually change until after onDelegateClicked
completes, which results in the previous value being saved rather
than the desired one. This correctly handles the change in setting.
2020-09-07 20:50:41 -07:00

246 lines
6.5 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();
}
}
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()
}
}
}