Qml App add option to control DHT behaviour

As bitDHT is very noisy and keeps the radio always on on mobile thus
having huge impact on the battery life, DHT is now turned on only when
the App is interacting with the user byt default, on the option tab it
is possible to change this behaviour to set it always off, always on or
active depending on user interaction.
To handle settings AppSettings singleton has been added and a button on
the sidebar to edit configurations too
This commit is contained in:
Gioacchino Mazzurco 2018-02-01 14:31:07 +01:00
parent 9a9fcca1a9
commit 1c698bff83
6 changed files with 152 additions and 1 deletions

View File

@ -0,0 +1,27 @@
/*
* RetroShare Android QML App
* Copyright (C) 2018 Gioacchino Mazzurco <gio@eigenlab.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
pragma Singleton
import Qt.labs.settings 1.0
Settings
{
property string dhtMode: "Interactive"
}

View File

@ -0,0 +1,53 @@
/*
* RetroShare Android QML App
* Copyright (C) 2018 Gioacchino Mazzurco <gio@eigenlab.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import QtQuick 2.7
import QtQuick.Controls 2.0
import "." //Needed for AppSettings singleton
Item
{
Column
{
spacing: 5
padding: 10
Row
{
spacing: 10
Label
{
text: "DHT mode:"
anchors.verticalCenter: parent.verticalCenter
}
ComboBox
{
model: ["On", "Off", "Interactive"]
Component.onCompleted: currentIndex = find(AppSettings.dhtMode)
onActivated:
{
AppSettings.dhtMode = displayText
focus = false
}
}
}
}
}

View File

@ -214,6 +214,10 @@ Drawer
platformGW.shareUrl(nodeUrl);
})
},
"Options": function()
{
stackView.push("qrc:/Options.qml")
},
"Terminate Core": function()
{
rsApi.request("/control/shutdown");
@ -245,12 +249,17 @@ Drawer
icon: "/icons/share.svg"
}
ListElement
{
title: "Options"
showOnOsAndroid: false
icon: "/icons/options.svg"
}
ListElement
{
title: "Terminate Core"
showOnOsAndroid: false
icon: "/icons/exit.svg"
}
}
ScrollIndicator.vertical: ScrollIndicator { }

View File

@ -627,4 +627,63 @@ ApplicationWindow
}
}
property var netStatus: ({})
function refreshNetStatus(optCallback)
{
console.log("refreshNetStatus(optCallback)", optCallback)
rsApi.request("/peers/get_network_options", "", function(par)
{
var json = JSON.parse(par.response)
console.log("got", par.response)
mainWindow.netStatus = json.data
if(typeof(optCallback) === "function") optCallback();
})
}
function updateDhtMode(stopping)
{
console.log("updateDhtMode(stopping)", stopping)
switch(AppSettings.dhtMode)
{
case "On": mainWindow.netStatus.discovery_mode = 0; break;
case "Off": mainWindow.netStatus.discovery_mode = 1; break;
case "Interactive": mainWindow.netStatus.discovery_mode = stopping ? 1:0; break
}
console.log("updateDhtMode(stopping)", stopping, netStatus.discovery_mode)
rsApi.request("/peers/set_network_options", JSON.stringify(netStatus))
}
Component.onDestruction: if(coreReady) updateDhtMode(true)
Connections
{
target: AppSettings
onDhtModeChanged:
{
Qt.application.state
console.log("onDhtModeChanged", AppSettings.dhtMode)
if(coreReady) updateDhtMode(false)
}
}
Connections
{
target: stackView
onStateChanged: if(coreReady) refreshNetStatus(function() {updateDhtMode(false)})
}
Connections
{
target: Qt.application
onStateChanged:
{
console.log("Qt.application.state changed to", Qt.ApplicationSuspended)
if(coreReady && (Qt.application.state === Qt.ApplicationSuspended))
updateDhtMode(true)
}
}
}

View File

@ -744,5 +744,7 @@
<file>icons/faces/male64/mouth9.png</file>
<file>components/Faces.qml</file>
<file>fonts/OpenSansEmoji.ttf</file>
<file>Options.qml</file>
<file>AppSettings.qml</file>
</qresource>
</RCC>

View File

@ -3,4 +3,5 @@ singleton ClipboardWrapper 1.0 ClipboardWrapper.qml
singleton ChatCache ChatCache.qml
singleton StyleChat styles/ChatStyle.qml
singleton StyleSideBar styles/SideBarStyle.qml
singleton AppSettings 1.0 AppSettings.qml