harbour-nextcloudnotes/qml/harbour-nextcloudnotes.qml

136 lines
4.5 KiB
QML
Raw Normal View History

2018-10-16 18:50:58 +03:00
import QtQuick 2.0
import Sailfish.Silica 1.0
import Nemo.Configuration 1.0
import harbour.nextcloudnotes.notesmodel 1.0
import harbour.nextcloudnotes.sslconfiguration 1.0
2018-10-16 18:50:58 +03:00
import "pages"
import "components"
2018-10-16 18:50:58 +03:00
ApplicationWindow
{
id: appWindow
2018-12-07 02:30:18 +03:00
ConfigurationValue {
id: accounts
key: appSettings.path + "/accountIDs"
defaultValue: [ ]
}
2018-12-27 22:38:14 +03:00
ConfigurationGroup {
id: account
path: "/apps/harbour-nextcloudnotes/accounts/" + appSettings.currentAccount
2018-12-27 22:38:14 +03:00
property string name: value("name", "", String)
property url server: value("server", "", String)
property string version: value("version", "v0.2", String)
property string username: value("username", "", String)
property string password: account.value("password", "", String)
property bool unsecureConnection: account.value("unsecureConnection", false, Boolean)
property bool unencryptedConnection: account.value("unencryptedConnection", false, Boolean)
property date update: value("update", "", Date)
onValuesChanged: console.log("A property of the current account has changed")
onNameChanged: console.log("Account: " + name)
2018-12-27 22:38:14 +03:00
}
2018-10-16 18:50:58 +03:00
ConfigurationGroup {
id: appSettings
path: "/apps/harbour-nextcloudnotes/settings"
property string currentAccount: value("currentAccount", "", String)
property var accountIDs: value("accountIDs", [ ], Array)
property int autoSyncInterval: value("autoSyncInterval", 0, Number)
property int previewLineCount: value("previewLineCount", 4, Number)
2018-12-27 22:38:14 +03:00
property bool favoritesOnTop: value("favoritesOnTop", true, Boolean)
2019-01-26 20:09:28 +03:00
property string sortBy: value("sortBy", "date", String)
2018-12-27 22:38:14 +03:00
property bool showSeparator: value("showSeparator", false, Boolean)
property bool useMonoFont: value("useMonoFont", false, Boolean)
property bool useCapitalX: value("useCapitalX", false, Boolean)
onCurrentAccountChanged: {
account.path = "/apps/harbour-nextcloudnotes/accounts/" + currentAccount
noteListModel.clear()
api.getNotesFromApi()
}
2018-12-07 02:30:18 +03:00
function addAccount() {
var uuid = uuidv4()
var tmpIDs = accounts.value
tmpIDs.push(uuid)
accounts.value = tmpIDs
accounts.sync()
return uuid
}
function removeAccount(uuid) {
autoSyncTimer.stop()
var tmpAccouunt = currentAccount
currentAccount = uuid
api.clear()
currentAccount = tmpAccouunt
var newIds = [ ]
accountIDs.forEach(function(currentValue) {
if (currentValue !== uuid) {
newIds.push(currentValue)
}
})
accounts.value = newIds
for (var i = accountIDs.length-1; i >= 0; i--) {
2018-12-07 02:30:18 +03:00
if (accountIDs[i] !== uuid) {
api.uuid = accountIDs[i]
break
}
}
if (autoSyncInterval > 0 && appWindow.visible) {
autoSyncTimer.start()
}
2018-12-07 02:30:18 +03:00
}
function uuidv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
}
SslConfiguration {
id: ssl
2018-12-27 22:38:14 +03:00
checkCert: !account.unsecureConnection
}
2018-12-07 02:30:18 +03:00
Timer {
id: autoSyncTimer
interval: appSettings.autoSyncInterval * 1000
repeat: true
running: interval > 0 && appWindow.visible
triggeredOnStart: true
onTriggered: {
if (!api.busy) {
api.getNotesFromApi()
2018-12-07 02:30:18 +03:00
}
else {
triggeredOnStart = false
restart()
triggeredOnStart = true
}
}
onIntervalChanged: {
if (interval > 0) {
console.log("Auto-Sync every " + interval / 1000 + " seconds")
}
}
2018-12-07 02:30:18 +03:00
}
NotesApi {
id: api
onResponseChanged: noteListModel.applyJSON(response)
2018-12-07 02:30:18 +03:00
}
NotesModel {
2019-01-26 20:09:28 +03:00
id: noteListModel
sortBy: appSettings.sortBy
2019-01-26 20:09:28 +03:00
favoritesOnTop: appSettings.favoritesOnTop
}
2019-01-26 20:09:28 +03:00
2018-10-21 02:44:23 +03:00
initialPage: Component { NotesPage { } }
2018-10-16 18:50:58 +03:00
cover: Qt.resolvedUrl("cover/CoverPage.qml")
allowedOrientations: defaultAllowedOrientations
}