harbour-nextcloudnotes/qml/harbour-nextcloudnotes.qml

209 lines
7 KiB
QML
Raw Normal View History

import QtQuick 2.2
2018-10-16 18:50:58 +03:00
import Sailfish.Silica 1.0
import Nemo.Configuration 1.0
import Nemo.Notifications 1.0
2018-10-16 18:50:58 +03:00
import "pages"
ApplicationWindow
{
id: appWindow
2020-03-29 19:03:05 +03:00
// All configured accounts
2018-12-07 02:30:18 +03:00
ConfigurationValue {
id: accounts
key: appSettings.path + "/accountIDs"
defaultValue: [ ]
}
2020-03-29 19:03:05 +03:00
// Current account in use
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 doNotVerifySsl: account.value("doNotVerifySsl", false, Boolean)
property bool allowUnecrypted: account.value("allowUnecrypted", false, Boolean)
2018-12-27 22:38:14 +03:00
property date update: value("update", "", Date)
2020-03-29 19:03:05 +03:00
onServerChanged: notesApi.server = server
onUsernameChanged: {
console.log("Username: " + username)
notesApi.username = username
}
2020-03-29 19:03:05 +03:00
onPasswordChanged: notesApi.password = password
onDoNotVerifySslChanged: notesApi.verifySsl = !doNotVerifySsl
onNameChanged: console.log("Using account: " + name)
2018-12-27 22:38:14 +03:00
}
2020-03-29 19:03:05 +03:00
// General settings of the app
2018-10-16 18:50:58 +03:00
ConfigurationGroup {
id: appSettings
path: "/apps/harbour-nextcloudnotes/settings"
property bool initialized: false
property string currentAccount: value("currentAccount", "", String)
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)
2020-03-29 19:03:05 +03:00
property string sortBy: value("sortBy", "modifiedString", 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)
2018-12-07 02:30:18 +03:00
onCurrentAccountChanged: {
notesModel.sourceModel.clear()
account.path = "/apps/harbour-nextcloudnotes/accounts/" + currentAccount
notesStore.account = currentAccount
notesStore.getAllNotes()
notesApi.account = currentAccount
notesApi.getAllNotes()
}
onSortByChanged: {
if (sortBy == "none")
notesModel.invalidate()
else
notesModel.sortRole = notesModel.roleFromName(sortBy)
}
onFavoritesOnTopChanged: {
notesModel.favoritesOnTop = favoritesOnTop
}
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
}
2020-03-29 19:03:05 +03:00
ConfigurationGroup {
id: removeHelperConfGroup
}
2018-12-07 02:30:18 +03:00
function removeAccount(uuid) {
autoSyncTimer.stop()
2020-03-29 19:03:05 +03:00
var tmpIDs = accounts.value
removeHelperConfGroup.path = "/apps/harbour-nextcloudnotes/accounts/" + uuid
for (var i = tmpIDs.length-1; i >= 0; i--) {
console.log(tmpIDs)
console.log("Checking:" + tmpIDs[i])
if (tmpIDs[i] === uuid) {
console.log("Found! Removing ...")
tmpIDs.splice(i, 1)
2019-12-18 22:21:47 +03:00
}
2020-03-29 19:03:05 +03:00
console.log(tmpIDs)
2019-12-18 22:21:47 +03:00
}
if (appSettings.currentAccount === uuid) {
appSettings.currentAccount = ""
2020-03-29 19:03:05 +03:00
for (var i = tmpIDs.length-1; i >= 0 && appSettings.currentAccount === ""; i--) {
if (tmpIDs[i] !== uuid) {
appSettings.currentAccount = tmpIDs[i]
}
}
2018-12-07 02:30:18 +03:00
}
2020-03-29 19:03:05 +03:00
removeHelperConfGroup.clear()
if (autoSyncInterval > 0 && appWindow.visible) {
autoSyncTimer.start()
}
2020-03-29 19:03:05 +03:00
accounts.value = tmpIDs
accounts.sync()
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);
});
}
}
Notification {
id: offlineNotification
expireTimeout: 0
appName: "Nextcloud " + qsTr("Notes")
summary: qsTr("Offline")
2020-01-05 15:25:13 +03:00
body: qsTr("Synced") + ": " + new Date(account.update).toLocaleString(Qt.locale())
2020-03-29 19:03:05 +03:00
Component.onDestruction: close()
2020-01-05 15:25:13 +03:00
}
Notification {
id: storeErrorNotification
2020-01-05 15:25:13 +03:00
appName: offlineNotification.appName
summary: qsTr("File error")
Component.onDestruction: close()
}
Notification {
id: apiErrorNotification
appName: offlineNotification.appName
summary: qsTr("API error")
2020-03-29 19:03:05 +03:00
Component.onDestruction: close()
}
2018-12-07 02:30:18 +03:00
Timer {
id: autoSyncTimer
interval: appSettings.autoSyncInterval * 1000
repeat: true
2019-12-07 15:42:37 +03:00
running: interval > 0 && notesApi.networkAccessible && appWindow.visible
2020-03-29 19:03:05 +03:00
triggeredOnStart: true
2018-12-07 02:30:18 +03:00
onTriggered: {
notesStore.getAllNotes()
if (!notesApi.busy) {
notesApi.getAllNotes();
2018-12-07 02:30:18 +03:00
}
else {
restart()
}
}
onIntervalChanged: {
if (interval > 0) {
console.log("Auto-Sync every " + interval / 1000 + " seconds")
}
}
2018-12-07 02:30:18 +03:00
}
Connections {
target: notesStore
onNoteError: {
storeErrorNotification.close()
if (error) {
console.log("Notes Store error (" + error + "): " + notesStore.errorMessage(error))
storeErrorNotification.body = notesStore.errorMessage(error)
storeErrorNotification.publish()
}
}
}
Connections {
target: notesApi
onNetworkAccessibleChanged: {
console.log("Device is " + (accessible ? "online" : "offline"))
accessible ? offlineNotification.close(Notification.Closed) : offlineNotification.publish()
}
onNoteError: {
apiErrorNotification.close()
if (error)
console.log("Notes API error (" + error + "): " + notesApi.errorMessage(error))
if (error && notesApi.networkAccessible) {
apiErrorNotification.body = notesApi.errorMessage(error)
apiErrorNotification.publish()
2020-01-05 15:25:13 +03:00
}
}
onLastSyncChanged: account.update = lastSync
}
Component.onDestruction: {
offlineNotification.close()
storeErrorNotification.close()
apiErrorNotification.close()
}
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
}