48de066938
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.
246 lines
6.5 KiB
QML
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()
|
|
}
|
|
}
|
|
}
|