Skip to content

Commit

Permalink
#12 adds auto logout time as a setting
Browse files Browse the repository at this point in the history
#42 Save the last opened database
  • Loading branch information
dannygb committed Aug 26, 2019
1 parent a85ffeb commit b0c60b4
Show file tree
Hide file tree
Showing 7 changed files with 284 additions and 33 deletions.
3 changes: 3 additions & 0 deletions KeePit/KeePit.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,7 @@
<qresource prefix="/">
<file>qml/Settings.qml</file>
</qresource>
<qresource prefix="/">
<file>qml/SettingsForm.qml</file>
</qresource>
</RCC>
9 changes: 6 additions & 3 deletions KeePit/qml/ListEntryItems.qml
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,14 @@ Page {
saveTheme()
}
},
/*Action {
Action {
text: i18n.tr("Settings")
iconName: "settings"
onTriggered: PopupUtils.open(settingsDisabledComponent)
},*/
onTriggered: {
pageStack.push(settingsForm)
settingsForm.loadSettings()
}
},
Action {
iconName: "home"
text: i18n.tr("Home")
Expand Down
96 changes: 76 additions & 20 deletions KeePit/qml/Main.qml
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,12 @@ MainView {
property string keyFileName
property date currentDate: new Date()
property var locale: Qt.locale()
property var selectedDatabaseToDelete: ({});
property var pageTitleStack: [];
property var selectedDatabaseToDelete: ({})
property var pageTitleStack: []
property var timeoutSettings: {
"enabled": false,
"interval": 0
}

function goHome() {
database.loadHome()
Expand All @@ -63,29 +67,38 @@ MainView {
pageStack.push(listEntryItems)
}

Component.onCompleted: {
readTheme()
openDatabase.actTheme.iconName = getTheme()
listEntryItems.actTheme.iconName = getTheme()
}
Component.onCompleted: {
setTheme()
}

Database {
id: database
property var selectedEntry
onError: {
PopupUtils.open(dialog, '', {text: i18n.tr(msg)});
PopupUtils.open(dialog, '', {text: i18n.tr(msg)})
}
onSuccess: {
pageStack.clear();
pageStack.push(listEntryItems);
//resetTimer.start()
pageStack.clear()
pageStack.push(listEntryItems)
setTimer()
}
}

PageStack {
id: pageStack
Component.onCompleted: {
push(databaseListView)
Component.onCompleted: {
var lastOpenDb = {
name: settings.getSetting("lastOpenDbName"),
path: settings.getSetting("lastOpenDbPath")
}

if(lastOpenDb.name === "" || lastOpenDb.path === "" ) {
push(databaseListView)
} else {
databaseFileName = lastOpenDb.name
databaseFilePath = lastOpenDb.path
push(openDatabase)
}
}
onCurrentPageChanged: {
if(currentPage != null) {
Expand Down Expand Up @@ -141,6 +154,10 @@ MainView {
Selector {
id: databaseListView
visible: false
onDatabaseSelected: {
settings.saveSetting("lastOpenDbName", dbName)
settings.saveSetting("lastOpenDbPath", dbPath)
}
}

Importer {
Expand All @@ -153,8 +170,17 @@ MainView {

Settings {
id: settings
onSettingsChanged: {
setTimer()
setTheme()
}
}
}

SettingsForm {
id: settingsForm
visible: false
}
}

Component {
id: dialog
Expand Down Expand Up @@ -224,7 +250,6 @@ MainView {

Timer {
id: resetTimer
interval: 60000
running: false
repeat: false
onTriggered: reset()
Expand All @@ -245,20 +270,46 @@ MainView {
//Clipboard.clear() // Consistently crashes the app on phone (not desktop though) see bug: https://bugs.launchpad.net/ubuntu/+source/ubuntu-ui-toolkit/+bug/1457361
}

function setTimer() {
getTimeout()
startTimer()
}

function startTimer() {
console.debug("startTimer: " + timeoutSettings.enabled + "("+timeoutSettings.interval+")")
if(timeoutSettings.enabled) {
resetTimer.interval = timeoutSettings.interval
resetTimer.stop()
resetTimer.start()
} else {
resetTimer.stop()
}
}

function resetLogoutTimer() {
//resetTimer.restart();
if(timeoutSettings.enabled) {
resetTimer.restart()
} else {
resetTimer.stop()
}
}

function setTheme() {
readTheme()
openDatabase.actTheme.iconName = getTheme()
listEntryItems.actTheme.iconName = getTheme()
}

function getTheme() {
return (theme.name == "Ubuntu.Components.Themes.SuruDark")
return (theme.name == settings.dark)
? "torch-off"
: "torch-on"
}

function switchTheme() {
theme.name = (theme.name == "Ubuntu.Components.Themes.SuruDark")
? "Ubuntu.Components.Themes.Ambiance"
: "Ubuntu.Components.Themes.SuruDark"
theme.name = (theme.name == settings.dark)
? settings.light
: settings.dark
}

function saveTheme() {
Expand All @@ -268,4 +319,9 @@ MainView {
function readTheme() {
theme.name = settings.getSetting("theme")
}

function getTimeout() {
timeoutSettings.enabled = settings.getSetting("timeoutEnabled") != "0"
timeoutSettings.interval = settings.getSetting("timeout")
}
}
9 changes: 9 additions & 0 deletions KeePit/qml/OpenDatabase.qml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,15 @@ Page {
saveTheme()
}
},

Action {
text: i18n.tr("Settings")
iconName: "settings"
onTriggered: {
pageStack.push(settingsForm)
settingsForm.loadSettings()
}
},
Action {
iconName: "import"
text: i18n.tr("Import key")
Expand Down
2 changes: 2 additions & 0 deletions KeePit/qml/Selector.qml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ Page {

property string pageTitle : appTitle + " - " + i18n.tr("Databases")
property bool keyMode: false
signal databaseSelected(string dbName, string dbPath)

function setKeyMode() {
keyMode = true
Expand All @@ -58,6 +59,7 @@ Page {
databaseFileName = model.fileName
keyFilePath = ''
keyFileName = ''
databaseSelected(databaseFileName, databaseFilePath)
}

pageStack.clear()
Expand Down
79 changes: 69 additions & 10 deletions KeePit/qml/Settings.qml
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,26 @@ import QtQuick 2.4
import QtQuick.LocalStorage 2.0

Item {
signal settingsChanged()
property var db: null
property bool settingsLoaded: false
property var values: {
"theme": "Ubuntu.Components.Themes.Ambiance",
"timeout": "60000",
"timeoutEnabled": "1",
"lastOpenDbName": "",
"lastOpenDbFilePath": ""
}
property var dark: "Ubuntu.Components.Themes.SuruDark"
property var light: "Ubuntu.Components.Themes.Ambiance"

function openDB() {
if(db !== null) return;

db = LocalStorage.openDatabaseSync(appTitle, "0.1", "KeepIt Password Safe", 100000);

try {
db.transaction(function(tx){
db.transaction(function(tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS settings(key TEXT UNIQUE, value TEXT)');
var table = tx.executeSql("SELECT * FROM settings");
// Seed the table with default values
Expand All @@ -44,19 +55,67 @@ Item {
}

function saveSetting(key, value) {
openDB();
db.transaction( function(tx){
tx.executeSql('INSERT OR REPLACE INTO settings VALUES(?, ?)', [key, value]);
});
values[key] = value
saveSettings(values)
}

function getSetting(key) {
console.debug("getSetting:" + key)
if (settingsLoaded) {
console.debug(values[key])
return values[key]
}

getSettings()

console.debug(values[key])

return values[key]
}

function getSettings() {

if (settingsLoaded) {
console.debug("getSettings (cached): " + JSON.stringify(values))
return values
}

openDB();
var res = "";
db.transaction(function(tx) {
var rs = tx.executeSql('SELECT value FROM settings WHERE key=?;', [key]);
res = rs.rows.item(0).value;
});
return res;
var rs = tx.executeSql('SELECT key, value FROM settings;');

for (var i=0, len=rs.rows.length; i<len; i++) {
if(rs.rows.item(i).key !== null) {
values[rs.rows.item(i).key] = rs.rows.item(i).value
}
}

settingsLoaded = true
});

console.debug("getSettings: " + JSON.stringify(values))

return values;
}

function saveSettings(updatedValues) {
console.debug("saveSettings: " + JSON.stringify(updatedValues))

try {
openDB();
db.transaction( function(tx){
for (var prop in updatedValues) {
if(prop != null && updatedValues[prop] != null) {
console.debug("saveSettings: " + prop + " " + updatedValues[prop])
tx.executeSql('INSERT OR REPLACE INTO settings VALUES(?, ?)', [prop, updatedValues[prop]]);
}
}
});
settingsLoaded = false
settingsChanged()
}
catch (e) {
console.error("Error: " + JSON.stringify(e))
}
}
}
Loading

0 comments on commit b0c60b4

Please sign in to comment.