Implemented #24 and #32 (not tested)

This commit is contained in:
scharel 2018-12-27 20:38:14 +01:00
parent 3cd7be99cd
commit 03098b7354
13 changed files with 211 additions and 150 deletions

View file

@ -1,11 +1,14 @@
import QtQuick 2.0
import QtQuick 2.5
import Sailfish.Silica 1.0
import QtQml.Models 2.2
DelegateModel {
id: noteListModel
property string searchText: ""
property bool favoritesOnTop
property string sortBy
property bool showSeparator
property int previewLineCount
onSearchTextChanged: reload()
onSortByChanged: reload()
@ -16,13 +19,13 @@ DelegateModel {
reload()
}
onNoteCreated: {
console.log("New note created:" + id)
console.log("New note created: " + id)
}
onNoteRemoved: {
console.log("Note removed:" + id)
console.log("Note removed: " + id)
}
onNoteChanged: {
console.log("Note changed:" + id)
console.log("Note changed: " + id)
}
}
@ -44,15 +47,42 @@ DelegateModel {
name: "unsorted"
includeByDefault: true
onChanged: {
switch(appSettings.sortBy) {
switch(sortBy) {
case "date":
noteListModel.sort(function(left, right) { return left.modified > right.modified })
noteListModel.sort(function(left, right) {
if (favoritesOnTop) {
if (left.favorite === right.favorite)
return left.modified > right.modified
else
return left.favorite
}
else
return left.modified > right.modified
})
break
case "category":
noteListModel.sort(function(left, right) { return left.category < right.category })
noteListModel.sort(function(left, right) {
if (favoritesOnTop) {
if (left.favorite === right.favorite)
return left.category < right.category
else
return left.favorite
}
else
return left.category < right.category
})
break
case "title":
noteListModel.sort(function(left, right) { return left.title < right.title })
noteListModel.sort(function(left, right) {
if (favoritesOnTop) {
if (left.favorite === right.favorite)
return left.title < right.title
else
return left.favorite
}
else
return left.title < right.title
})
break
default:
setGroups(0, unsortedItems.count, "items")
@ -93,7 +123,7 @@ DelegateModel {
item.groups = "items"
items.move(item.itemsIndex, index)
}
else {
else if (searchText !== "") {
item.groups = "search"
}
}
@ -124,7 +154,7 @@ DelegateModel {
width: parent.width
color: Theme.primaryColor
anchors.top: titleLabel.top
visible: appSettings.showSeparator && index !== 0
visible: showSeparator && index !== 0
}
IconButton {
@ -160,7 +190,7 @@ DelegateModel {
color: "transparent"
border.color: Theme.highlightColor
radius: height / 4
visible: appSettings.sortBy !== "category" && categoryLabel.text.length > 0
visible: sortBy !== "category" && categoryLabel.text.length > 0
Label {
id: categoryLabel
anchors.centerIn: parent
@ -182,8 +212,8 @@ DelegateModel {
textFormat: Text.PlainText
wrapMode: Text.Wrap
elide: Text.ElideRight
maximumLineCount: appSettings.previewLineCount > 0 ? appSettings.previewLineCount : 1
visible: appSettings.previewLineCount > 0
maximumLineCount: previewLineCount > 0 ? previewLineCount : 1
visible: previewLineCount > 0
color: note.highlighted ? Theme.secondaryHighlightColor : Theme.secondaryColor
function parseText (preText) {
var lines = preText.split('\n')

View file

@ -4,15 +4,6 @@ import Nemo.Configuration 1.0
Item {
property string uuid
property string name
property url server
property url url
property string version: "v0.2"
property string username
property string password
property date update
property bool unsecureConnection
property bool unencryptedConnection
property var model: ListModel { }
property var categories: [ ]
@ -27,50 +18,15 @@ Item {
signal noteRemoved(int id)
signal noteChanged(int id)
Component.onCompleted: {
refreshConfig()
}
onStatusChanged: {
console.log("Network status: " + statusText + " (" + status + ")")
}
onUuidChanged: {
account.setValue("uuid", uuid)
onUuidChanged: console.log("Account : " + uuid)
account.path = "/apps/harbour-nextcloudnotes/accounts/" + uuid
refreshConfig()
model.clear()
appSettings.currentAccount = uuid
}
onNameChanged: account.setValue("name", name)
onServerChanged: account.setValue("server", server)
onUsernameChanged: account.setValue("username", username)
onPasswordChanged: account.setValue("password", password)
onUpdateChanged: account.setValue("update", update)
onUnsecureConnectionChanged: {
account.setValue("unsecureConnection", unsecureConnection)
ssl.checkCert = !unsecureConnection
}
onUnencryptedConnectionChanged: account.setValue("unencryptedConnection", unencryptedConnection)
ConfigurationGroup {
id: account
path: "/apps/harbour-nextcloudnotes/accounts/" + uuid
onValuesChanged: refreshConfig()
}
function refreshConfig() {
account.sync()
name = account.value("name", "", String)
server = account.value("server", "", String)
url = server + "/index.php/apps/notes/api/" + version + "/notes"
username = account.value("username", "", String)
password = account.value("password", "", String)
update = account.value("update", "", Date)
unsecureConnection = account.value("unsecureConnection", false, Boolean)
unencryptedConnection = account.value("unencryptedConnection", false, Boolean)
}
function clear() {
model.clear()
account.clear()
@ -79,7 +35,7 @@ Item {
function apiCall(method, data) {
jobsRunning++
var endpoint = url
var endpoint = account.server + "/index.php/apps/notes/api/" + account.version + "/notes"
if (data) {
if (method === "POST" || method === "PUT") {
addToModel(data)
@ -100,7 +56,7 @@ Item {
apiReq.setRequestHeader('User-Agent', 'SailfishOS/harbour-nextcloudnotes')
apiReq.setRequestHeader('OCS-APIRequest', 'true')
apiReq.setRequestHeader("Content-Type", "application/json")
apiReq.setRequestHeader("Authorization", "Basic " + Qt.btoa(username + ":" + password))
apiReq.setRequestHeader("Authorization", "Basic " + Qt.btoa(account.username + ":" + account.password))
apiReq.withCredentials = true
apiReq.timeout = 5000
apiReq.onreadystatechange = function() {
@ -108,6 +64,7 @@ Item {
statusText = apiReq.statusText
status = apiReq.status
if (apiReq.status === 200) {
//console.log(apiReq.responseText)
var json = JSON.parse(apiReq.responseText)
switch(method) {
case "GET":
@ -117,7 +74,7 @@ Item {
for (var element in json) {
addToModel(json[element])
}
update = new Date()
account.update = new Date()
}
else {
console.log("Received a single note via API: " + endpoint)
@ -128,8 +85,8 @@ Item {
console.log("Created a note via API: " + endpoint)
addToModel(json)
pageStack.push(Qt.resolvedUrl("../pages/NotePage.qml"), { note: json } )
pageStack.completeAnimation()
pageStack.navigateForward()
//pageStack.completeAnimation()
//pageStack.navigateForward()
break
case "PUT":
console.log("Updated a note via API: " + endpoint)
@ -226,7 +183,9 @@ Item {
dict.category !== data.category ||
dict.content !== data.content ||
dict.favorite !== data.favorite) {
if (data.modified)
model.remove(i)
model.insert(i, data)
/*if (data.modified)
model.setProperty(i, "modified", data.modified)
if (data.title)
model.setProperty(i, "title", data.title)
@ -238,7 +197,7 @@ Item {
model.setProperty(i, "favorite", data.favorite)
if (data.date)
model.setProperty(i, "date", data.date)
*/
noteChanged(data.id)
}
dataAdded = true

View file

@ -15,6 +15,21 @@ ApplicationWindow
defaultValue: [ ]
}
ConfigurationGroup {
id: account
//path: "/apps/harbour-nextcloudnotes/accounts/" + appSettings.currentAccount
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")
//onUnsecureConnectionChanged: ssl.checkCert = !unsecureConnection
}
ConfigurationGroup {
id: appSettings
path: "/apps/harbour-nextcloudnotes/settings"
@ -23,10 +38,11 @@ ApplicationWindow
property var accountIDs: value("accountIDs", [ ])
property int autoSyncInterval: value("autoSyncInterval", 0)
property int previewLineCount: value("previewLineCount", 4)
property string sortBy: value("sortBy", "date")
property bool showSeparator: value("showSeparator", false)
property bool useMonoFont: value("useMonoFont", false)
property bool useCapitalX: value("useCapitalX", false)
property bool favoritesOnTop: value("favoritesOnTop", true, Boolean)
property string sortBy: value("sortBy", "date", Date)
property bool showSeparator: value("showSeparator", false, Boolean)
property bool useMonoFont: value("useMonoFont", false, Boolean)
property bool useCapitalX: value("useCapitalX", false, Boolean)
onCurrentAccountChanged: api.uuid = currentAccount
@ -69,7 +85,7 @@ ApplicationWindow
SslConfiguration {
id: ssl
checkCert: true
checkCert: !account.unsecureConnection
}
Timer {
@ -96,6 +112,15 @@ ApplicationWindow
uuid: appSettings.currentAccount
}
NoteDelegateModel {
id: noteListModel
model: api.model
favoritesOnTop: appSettings.favoritesOnTop
sortBy: appSettings.sortBy
showSeparator: appSettings.showSeparator
previewLineCount: appSettings.previewLineCount
}
initialPage: Component { NotesPage { } }
cover: Qt.resolvedUrl("cover/CoverPage.qml")
allowedOrientations: defaultAllowedOrientations

View file

@ -16,8 +16,9 @@ Dialog {
serverField.text = value("server", "https://", String)
usernameField.text = value("username", "", String)
passwordField.text = value("password", "", String)
unsecureConnectionTextSwitch.checked = value("unencryptedConnection", false, Boolean)
unencryptedConnectionTextSwitch.checked = value("allowUnencryptedConnection", false, Boolean)
unsecureConnectionTextSwitch.checked = value("unsecureConnection", false, Boolean)
unencryptedConnectionTextSwitch.checked = value("unencryptedConnection", false, Boolean)
nameField.text === "" ? nameField.focus = true : (serverField.text === "https://" ? serverField.focus = true : (usernameField.text === "" ? usernameField.focus = true : (passwordField.text === "" ? passwordField.focus = true : passwordField.focus = false)))
}
}
@ -28,7 +29,7 @@ Dialog {
account.setValue("username", usernameField.text)
account.setValue("password", passwordField.text)
account.setValue("unsecureConnection", unsecureConnectionTextSwitch.checked)
account.setValue("allowUnencryptedConnection", unencryptedConnectionTextSwitch.checked)
account.setValue("unencryptedConnection", unencryptedConnectionTextSwitch.checked)
account.sync()
api.uuid = accountId
}
@ -58,9 +59,8 @@ Dialog {
TextField {
id: nameField
focus: true
width: parent.width
text: account.value("name", "", String)
//text: account.value("name", "", String)
placeholderText: qsTr("Account name")
label: placeholderText
errorHighlight: text.length === 0// && focus === true
@ -75,7 +75,7 @@ Dialog {
property var encryptedRegEx: /^https:\/\/(((www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b|((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))))([-a-zA-Z0-9@:%_\+.~#?&//=]*)$/
property var unencryptedRegEx : /^https?:\/\/(((www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b|((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))))([-a-zA-Z0-9@:%_\+.~#?&//=]*)$/
width: parent.width
text: account.value("server", "https://", String)
//text: account.value("server", "https://", String)
placeholderText: qsTr("Nextcloud server")
label: placeholderText + " " + qsTr("(starting with \"https://\")")
inputMethodHints: Qt.ImhUrlCharactersOnly
@ -89,7 +89,7 @@ Dialog {
TextField {
id: usernameField
width: parent.width
text: account.value("name", "", String)
//text: account.value("name", "", String)
placeholderText: qsTr("Username")
label: placeholderText
inputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhNoAutoUppercase
@ -102,7 +102,7 @@ Dialog {
PasswordField {
id: passwordField
width: parent.width
text: account.value("password", "", String)
//text: account.value("password", "", String)
placeholderText: qsTr("Password")
label: placeholderText
errorHighlight: text.length === 0// && focus === true
@ -125,14 +125,14 @@ Dialog {
id: unsecureConnectionTextSwitch
text: qsTr("Do not check certificates")
description: qsTr("Enable this option to allow selfsigned certificates")
checked: account.value("allowUnencryptedConnection", false, Boolean)
//checked: account.value("allowUnencryptedConnection", false, Boolean)
}
TextSwitch {
id: unencryptedConnectionTextSwitch
automaticCheck: false
text: qsTr("Allow unencrypted connections")
description: qsTr("")
checked: account.value("allowUnencryptedConnection", false, Boolean)
//checked: account.value("unencryptedConnection", false, Boolean)
onClicked: {
if (checked) {
checked = false

View file

@ -1,6 +1,6 @@
import "../js/showdown-1.9.0/dist/showdown.js" as ShowDown
import QtQuick 2.4
import QtQuick 2.5
import Sailfish.Silica 1.0
import "../js/showdown-1.9.0/dist/showdown.js" as ShowDown
Dialog {
id: noteDialog
@ -76,13 +76,13 @@ Dialog {
convertedText = convertedText.replace(/<del>(.*)<\/del>/gmi, function(match, p1) { return "<s>" + p1 + "</s>" })
convertedText = convertedText.replace(/<hr \/>/gmi, "<p><img width=\"" + contentLabel.width + "\" height=\"1\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAPSURBVHjaYvr//z9AgAEABgYDACuJdK0AAAAASUVORK5CYII=\" /></p>")
contentLabel.text = "<style>\n" +
"ul,ol,table,img { margin: " + Theme.paddingLarge + "px 0px; }\n" +
"p,ul,ol,table,img { margin: " + Theme.paddingLarge + "px 0px; }\n" +
"a:link { color: " + Theme.primaryColor + "; }\n" +
"a.checkbox { text-decoration: none; padding: " + Theme.paddingSmall + "px; display: inline-block; }\n" +
"li.tasklist { font-size:large; margin: " + Theme.paddingMedium + "px 0px; }\n" +
"table { border-color: " + Theme.secondaryColor + "; }\n" +
"</style>\n" + convertedText
if (debug) console.log(contentLabel.text)
//if (debug) console.log(contentLabel.text)
}
SilicaFlickable {

View file

@ -43,8 +43,8 @@ Page {
MenuLabel {
visible: appSettings.currentAccount.length > 0
text: qsTr("Last update") + ": " + (
new Date(api.update).valueOf() !== 0 ?
new Date(api.update).toLocaleString(Qt.locale(), Locale.ShortFormat) :
new Date(account.update).valueOf() !== 0 ?
new Date(account.update).toLocaleString(Qt.locale(), Locale.ShortFormat) :
qsTr("never"))
}
}
@ -54,8 +54,8 @@ Page {
SearchField {
id: searchField
width: parent.width
enabled: appSettings.accountIDs.count > 0
placeholderText: api.name.length > 0 ? api.name : qsTr("Nextcloud Notes")
enabled: appSettings.accountIDs.length > 0
placeholderText: account.name.length > 0 ? account.name : qsTr("Nextcloud Notes")
EnterKey.iconSource: "image://theme/icon-m-enter-close"
EnterKey.onClicked: focus = false
onTextChanged: noteListModel.searchText = text
@ -64,12 +64,12 @@ Page {
id: description
x: Theme.horizontalPageMargin
width: parent.width - 2*x
visible: appSettings.accountIDs.count > 0
visible: text.length > 1
anchors.bottom: parent.bottom
anchors.bottomMargin: Theme.paddingMedium
color: Theme.secondaryHighlightColor
font.pixelSize: Theme.fontSizeSmall
text: api.username + "@" + api.server
text: account.username + "@" + account.server
}
BusyIndicator {
anchors.verticalCenter: searchField.verticalCenter
@ -82,11 +82,7 @@ Page {
currentIndex: -1
model: NoteDelegateModel {
id: noteListModel
model: api.model
sortBy: appSettings.sortBy
}
model: noteListModel
section.property: appSettings.sortBy
section.criteria: appSettings.sortBy === "title" ? ViewSection.FirstCharacter : ViewSection.FullString

View file

@ -166,6 +166,12 @@ Page {
appSettings.sortBy = sortByRepeater.model[currentIndex]
}
}
TextSwitch {
text: qsTr("Favorites on top")
description: qsTr("Show notes marked as favorite above the others")
checked: appSettings.favoritesOnTop
onCheckedChanged: appSettings.favoritesOnTop = checked
}
TextSwitch {
text: qsTr("Show separator")
description: qsTr("Show a separator line between the notes")

View file

@ -12,6 +12,10 @@
# * date Author's Name <author's email> version-release
# - Summary of changes
* Thu Dec 27 2018 Scharel Clemens <harbour-nextcloudnotes@scharel.name> 0.2-10
- Implemented #24: "Option to show favorite notes on the top of the list"
- Implemented #32: "Allow selfsigned SSL certificates" (not tested!)
* Wed Dec 26 2018 Scharel Clemens <harbour-nextcloudnotes@scharel.name> 0.2-9
- Improved workaround for #40

View file

@ -14,7 +14,7 @@ Name: harbour-nextcloudnotes
%{?qtc_builddir:%define _builddir %qtc_builddir}
Summary: Nextcloud Notes
Version: 0.2
Release: 8
Release: 10
Group: Applications/Editors
License: MIT
URL: https://github.com/scharel/harbour-nextcloudnotes

View file

@ -1,7 +1,7 @@
Name: harbour-nextcloudnotes
Summary: Nextcloud Notes
Version: 0.2
Release: 8
Release: 10
# The contents of the Group field should be one of the groups listed here:
# https://github.com/mer-tools/spectacle/blob/master/data/GROUPS
Group: Applications/Editors

View file

@ -437,6 +437,14 @@
<source>Congratulation you found the Answer to the Ultimate Question of Life, The Universe, and Everything!</source>
<translation>Glückwunsch, du hast die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest gefunden!</translation>
</message>
<message>
<source>Favorites on top</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show notes marked as favorite above the others</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SyntaxPage</name>

View file

@ -89,6 +89,10 @@
<source>Modified</source>
<translation>Ändrad</translation>
</message>
<message>
<source>No content</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>GPLLicense</name>
@ -143,6 +147,14 @@
<source>Allow unencrypted connections</source>
<translation>Tillåt okrypterade anslutningar</translation>
</message>
<message>
<source>Do not check certificates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this option to allow selfsigned certificates</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MITLicense</name>
@ -151,6 +163,21 @@
<translation>MIT License</translation>
</message>
</context>
<context>
<name>NoteDelegateModel</name>
<message>
<source>Modified</source>
<translation type="unfinished">Ändrad</translation>
</message>
<message>
<source>Delete</source>
<translation type="unfinished">Ta bort</translation>
</message>
<message>
<source>Deleting note</source>
<translation type="unfinished">Tar bort anteckning</translation>
</message>
</context>
<context>
<name>NotePage</name>
<message>
@ -204,6 +231,10 @@
<source>Yesterday</source>
<translation>I går</translation>
</message>
<message>
<source>Unable to connect</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NotesPage</name>
@ -231,18 +262,6 @@
<source>never</source>
<translation>aldrig</translation>
</message>
<message>
<source>Modified</source>
<translation>Ändrad</translation>
</message>
<message>
<source>Delete</source>
<translation>Ta bort</translation>
</message>
<message>
<source>Deleting note</source>
<translation>Tar bort anteckning</translation>
</message>
<message>
<source>No account yet</source>
<translation>Inget konto ännu</translation>
@ -275,6 +294,10 @@
<source>Open the settings to configure your Nextcloud accounts</source>
<translation>Öppna inställningarna för att konfigurera dina Nextcloud-konton</translation>
</message>
<message>
<source>Nextcloud Notes</source>
<translation type="unfinished">Nextcloud Notes</translation>
</message>
</context>
<context>
<name>SettingsPage</name>
@ -414,6 +437,14 @@
<source>Congratulation you found the Answer to the Ultimate Question of Life, The Universe, and Everything!</source>
<translation>Grattulerar! Du har funnit svaret den ultimata frågan om livet, universum och allt!</translation>
</message>
<message>
<source>Favorites on top</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show notes marked as favorite above the others</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SyntaxPage</name>
@ -546,24 +577,16 @@
<translation>I de flesta fall, lämnas HTML-taggar orörda i utdatadokumentet.</translation>
</message>
<message>
<source>Tables aren&apos;t part of the core Markdown spec, but they are part of GFM and Showdown supports them by turning on the option tables.
Colons can be used to align columns.
In the new version, the outer pipes (|) are optional, matching GFM spec.
You also don&apos;t need to make the raw Markdown line up prettily.
<source>Tables aren&apos;t part of the core Markdown spec, but they are part of GFM and Showdown supports them by turning on the option tables.
Colons can be used to align columns.
In the new version, the outer pipes (|) are optional, matching GFM spec.
You also don&apos;t need to make the raw Markdown line up prettily.
You can also use other markdown syntax inside them.</source>
<translation>Tabeller är inte en del av kärnan i Markdown, men de är en del av GFM, och Showdown stödjer dem genom att aktivera alternativet tabeller.
Kolon kan användas för att justera kolumner.
I den nya versionen är de yttre vertikalstrecken (|) valfria, matchande GFM spec.
Du behöver inte heller göra RAW markdown-linjen vackert.
Du kan också använda andra markdown-syntax inuti dem.</translation>
<translation type="unfinished"></translation>
</message>
</context>
<context>

View file

@ -125,12 +125,12 @@
<context>
<name>LoginDialog</name>
<message>
<location filename="../qml/pages/LoginDialog.qml" line="49"/>
<location filename="../qml/pages/LoginDialog.qml" line="50"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/LoginDialog.qml" line="49"/>
<location filename="../qml/pages/LoginDialog.qml" line="50"/>
<source>Save</source>
<translation type="unfinished"></translation>
</message>
@ -201,17 +201,17 @@
<context>
<name>NoteDelegateModel</name>
<message>
<location filename="../qml/components/NoteDelegateModel.qml" line="201"/>
<location filename="../qml/components/NoteDelegateModel.qml" line="231"/>
<source>Modified</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/components/NoteDelegateModel.qml" line="204"/>
<location filename="../qml/components/NoteDelegateModel.qml" line="234"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/components/NoteDelegateModel.qml" line="206"/>
<location filename="../qml/components/NoteDelegateModel.qml" line="236"/>
<source>Deleting note</source>
<translation type="unfinished"></translation>
</message>
@ -272,17 +272,17 @@
<context>
<name>NotesApi</name>
<message>
<location filename="../qml/components/NotesApi.qml" line="148"/>
<location filename="../qml/components/NotesApi.qml" line="118"/>
<source>Unable to connect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/components/NotesApi.qml" line="284"/>
<location filename="../qml/components/NotesApi.qml" line="256"/>
<source>Today</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/components/NotesApi.qml" line="286"/>
<location filename="../qml/components/NotesApi.qml" line="258"/>
<source>Yesterday</source>
<translation type="unfinished"></translation>
</message>
@ -325,42 +325,42 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="108"/>
<location filename="../qml/pages/NotesPage.qml" line="104"/>
<source>No account yet</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="109"/>
<location filename="../qml/pages/NotesPage.qml" line="105"/>
<source>Got to the settings to add an account</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="115"/>
<location filename="../qml/pages/NotesPage.qml" line="111"/>
<source>No notes yet</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="116"/>
<location filename="../qml/pages/NotesPage.qml" line="112"/>
<source>Pull down to add a note</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="122"/>
<location filename="../qml/pages/NotesPage.qml" line="118"/>
<source>No result</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="123"/>
<location filename="../qml/pages/NotesPage.qml" line="119"/>
<source>Try another query</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="129"/>
<location filename="../qml/pages/NotesPage.qml" line="125"/>
<source>An error occurred</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/NotesPage.qml" line="140"/>
<location filename="../qml/pages/NotesPage.qml" line="136"/>
<source>Open the settings to configure your Nextcloud accounts</source>
<translation type="unfinished"></translation>
</message>
@ -467,6 +467,16 @@
<source>Appearance</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="170"/>
<source>Favorites on top</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="171"/>
<source>Show notes marked as favorite above the others</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="147"/>
<source>Last edited</source>
@ -493,47 +503,47 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="170"/>
<location filename="../qml/pages/SettingsPage.qml" line="176"/>
<source>Show separator</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="171"/>
<location filename="../qml/pages/SettingsPage.qml" line="177"/>
<source>Show a separator line between the notes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="181"/>
<location filename="../qml/pages/SettingsPage.qml" line="187"/>
<source>lines</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="182"/>
<location filename="../qml/pages/SettingsPage.qml" line="188"/>
<source>Number of lines in the preview</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="187"/>
<location filename="../qml/pages/SettingsPage.qml" line="193"/>
<source>Editing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="190"/>
<location filename="../qml/pages/SettingsPage.qml" line="196"/>
<source>Monospaced font</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="191"/>
<location filename="../qml/pages/SettingsPage.qml" line="197"/>
<source>Use a monospeced font to edit a note</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="196"/>
<location filename="../qml/pages/SettingsPage.qml" line="202"/>
<source>Capital &apos;X&apos; in checkboxes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="197"/>
<location filename="../qml/pages/SettingsPage.qml" line="203"/>
<source>For interoperability with other apps such as Joplin</source>
<translation type="unfinished"></translation>
</message>