import QtQuick 2.2 import Sailfish.Silica 1.0 import "../components" Page { id: page property var dav property string notePath property string noteName property string initialContent: "" property bool skipLoad: false property bool loaded: false property bool dirty: false property string coverText: noteName onStatusChanged: { if (status === PageStatus.Active) { if (!loaded) { if (skipLoad) { // New note: content is already known, no GET needed. loaded = true editor.text = initialContent dirty = false } else { loadNote() } } } else if (status === PageStatus.Inactive) { // Auto-save on exit (Obsidian-like: nothing is ever lost). if (loaded && dirty && !dav.busy) saveNow(false) } } function loadNote() { loaded = false dav.readFile(notePath) } function saveNow(notify) { if (!loaded) return if (dav.busy) { banner.show(qsTr("Save in progress..."), false) return } dav.writeFile(notePath, editor.text) if (notify) banner.show(qsTr("Saving..."), false) } Connections { target: dav onFileReady: { loaded = true initialContent = content editor.text = content dirty = false } onWriteDone: { initialContent = editor.text dirty = false banner.show(qsTr("Saved"), false) } onFailed: { if (loaded) { banner.show(message, true) } else { loaded = true banner.show(qsTr("Cannot open: %1").arg(message), true) } } } SilicaFlickable { anchors.fill: parent contentHeight: column.height Column { id: column width: parent.width PageHeader { title: noteName } TextArea { id: editor width: parent.width focus: true label: "Markdown" onTextChanged: { dirty = editor.text !== initialContent } } } PullDownMenu { MenuItem { text: qsTr("Save") enabled: page.dirty && page.loaded onClicked: page.saveNow(true) } MenuItem { text: qsTr("Preview") onClicked: pageStack.push(Qt.resolvedUrl("PreviewPage.qml"), { dav: page.dav, noteName: page.noteName, notePath: page.notePath, markdown: editor.text }) } MenuItem { text: qsTr("Delete note") onClicked: { var remorse = remorseComponent.createObject(page) remorse.execute(qsTr("Delete the note?"), function () { dav.deleteFile(notePath) pageStack.pop() }) } } } Component { id: remorseComponent RemorsePopup { } } BusyIndicator { anchors.centerIn: parent running: !page.loaded } } Banner { id: banner } }