diff --git a/harbour-nextcloudnotes.desktop b/harbour-nextcloudnotes.desktop
index 17099d7..be19a2e 100644
--- a/harbour-nextcloudnotes.desktop
+++ b/harbour-nextcloudnotes.desktop
@@ -10,4 +10,4 @@ Name=Notes
# Remember to comment out the following line, if you do not want to use
# a different app name in German locale (de).
Name[de]=Notizen
-Name[de_DE]=Notizen
+Name[sv]=Anteckningar
diff --git a/harbour-nextcloudnotes.pro b/harbour-nextcloudnotes.pro
index e66d78a..19193b4 100644
--- a/harbour-nextcloudnotes.pro
+++ b/harbour-nextcloudnotes.pro
@@ -16,11 +16,12 @@ CONFIG += sailfishapp
DEFINES += APP_VERSION=\\\"$$VERSION\\\"
-SOURCES += src/harbour-nextcloudnotes.cpp \
+SOURCES += src/harbour-nextcloudnotes.cpp
DISTFILES += qml/harbour-nextcloudnotes.qml \
qml/cover/CoverPage.qml \
rpm/harbour-nextcloudnotes.changes.run.in \
+ rpm/harbour-nextcloudnotes.changes \
rpm/harbour-nextcloudnotes.spec \
rpm/harbour-nextcloudnotes.yaml \
translations/*.ts \
@@ -33,7 +34,6 @@ DISTFILES += qml/harbour-nextcloudnotes.qml \
qml/pages/AboutPage.qml \
qml/pages/UnencryptedDialog.qml \
qml/pages/NotesApi.qml \
- rpm/harbour-nextcloudnotes.changes \
qml/pages/MITLicense.qml \
qml/pages/GPLLicense.qml
@@ -47,6 +47,7 @@ CONFIG += sailfishapp_i18n
# planning to localize your app, remember to comment out the
# following TRANSLATIONS line. And also do not forget to
# modify the localized app name in the the .desktop file.
-TRANSLATIONS += translations/harbour-nextcloudnotes-de.ts
+TRANSLATIONS += translations/harbour-nextcloudnotes-de.ts \
+ translations/harbour-nextcloudnotes-sv.ts
HEADERS +=
diff --git a/qml/pages/AboutPage.qml b/qml/pages/AboutPage.qml
index cc29a3e..11283d7 100644
--- a/qml/pages/AboutPage.qml
+++ b/qml/pages/AboutPage.qml
@@ -17,6 +17,14 @@ Page {
title: qsTr("About")
}
+ Label {
+ id: debugModeLabel
+ x: Theme.horizontalPageMargin
+ width: parent.width - 2*x
+ visible: debug
+ text: "
" + qsTr("The app is running in DEBUG mode!") + "
"
+ }
+
/*DetailItem {
label: qsTr("Name")
value: Qt.application.name
@@ -29,7 +37,11 @@ Page {
id: nextcloudnotesLabel
x: Theme.horizontalPageMargin
width: parent.width - 2*x
- text: qsTr("This app is released under the MIT license.
The source code is available on GitHub.
")
+ text: "" + qsTr("This app is released under the MIT license.") + "
" +
+ //: Pre-Showdown Github link
+ "" + qsTr("The source code is available on") + " GitHub" +
+ //: Post-Showdown Github link
+ qsTr(".") + "
"
}
Button {
@@ -46,7 +58,11 @@ Page {
id: showdownLabel
x: Theme.horizontalPageMargin
width: parent.width - 2*x
- text: qsTr("This app uses ShowdownJS v1.9 to convert Markdown to HTML.
Showdown 1.x is released under GPL 2.0.
")
+ //: Pre-Showdown Github link
+ text: "" + qsTr("This app uses") + " ShowdownJS v1.9 " +
+ //: Post-Showdown Github link
+ qsTr("to convert Markdown to HTML.") + "
" +
+ " " + qsTr("Showdown 1.x is released under GPL 2.0.") + "
"
}
Button {
diff --git a/qml/pages/LoginDialog.qml b/qml/pages/LoginDialog.qml
index 872ad4b..6d372a1 100644
--- a/qml/pages/LoginDialog.qml
+++ b/qml/pages/LoginDialog.qml
@@ -11,12 +11,14 @@ Dialog {
ConfigurationGroup {
id: account
path: "/apps/harbour-nextcloudnotes/accounts/" + accountId
- Component.onCompleted: {
+ /*Component.onCompleted: {
nameField.text = value("name", "", String)
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)
+ }*/
}
canAccept: (nameField.text.length > 0 && serverField.acceptableInput && usernameField.text.length > 0 && passwordField.text.length > 0)
@@ -26,7 +28,7 @@ Dialog {
account.setValue("username", usernameField.text)
account.setValue("password", passwordField.text)
//account.setValue("unsecureConnection", unsecureConnectionTextSwitch.checked)
- //account.setValue("unencryptedConnection", unencryptedConnectionTextSwitch.checked)
+ account.setValue("allowUnencryptedConnection", unencryptedConnectionTextSwitch.checked)
account.sync()
api.uuid = accountId
}
@@ -69,13 +71,15 @@ Dialog {
TextField {
id: serverField
+ // regExp combined from https://stackoverflow.com/a/3809435 (EDIT: removed ? after https to force SSL) and https://www.regextester.com/22
+ 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)
placeholderText: qsTr("Nextcloud server")
label: placeholderText + " " + qsTr("(starting with \"https://\")")
inputMethodHints: Qt.ImhUrlCharactersOnly
- // regExp from https://stackoverflow.com/a/3809435 (EDIT: removed ? after https to force SSL)
- validator: RegExpValidator { regExp: /https:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/ }
+ validator: RegExpValidator { regExp: unencryptedConnectionTextSwitch.checked ? serverField.unencryptedRegEx : serverField.encryptedRegEx }
errorHighlight: !acceptableInput// && focus === true
EnterKey.enabled: acceptableInput
EnterKey.iconSource: "image://theme/icon-m-enter-next"
@@ -119,28 +123,20 @@ Dialog {
}
/*TextSwitch {
id: unsecureConnectionTextSwitch
- checked: appSettings.unsecureConnection
- automaticCheck: true
text: qsTr("Do not check certificates")
description: qsTr("Enable this option to allow selfsigned certificates")
- onCheckedChanged: {
- if (checked) {
-
- }
- else {
- unencryptedConnection.checked = false
- }
- }
- }
+ }*/
TextSwitch {
id: unencryptedConnectionTextSwitch
- enabled: unsecureConnectionTextSwitch.checked
- checked: appSettings.unencryptedConnection
automaticCheck: false
- text: qsTr("Allow unencrypted connection")
+ text: qsTr("Allow unencrypted connections")
description: qsTr("")
+ checked: account.value("allowUnencryptedConnection", false, Boolean)
onClicked: {
- if (!checked) {
+ if (checked) {
+ checked = false
+ }
+ else {
var dialog = pageStack.push(Qt.resolvedUrl("UnencryptedDialog.qml"))
dialog.accepted.connect(function() {
checked = true
@@ -149,10 +145,8 @@ Dialog {
checked = false
})
}
- else
- checked = false
}
- }*/
+ }
}
}
diff --git a/qml/pages/NotesApi.qml b/qml/pages/NotesApi.qml
index b79f9d8..4b8021f 100644
--- a/qml/pages/NotesApi.qml
+++ b/qml/pages/NotesApi.qml
@@ -21,7 +21,6 @@ Item {
property bool saveFile: false
property bool busy: false
property bool searchActive: false
- property var apiReq: new XMLHttpRequest
property int status: 204
property string statusText: "No Content"
@@ -34,6 +33,7 @@ Item {
}
onUuidChanged: {
+ account.setValue("uuid", uuid)
onUuidChanged: console.log("Account : " + uuid)
account.path = "/apps/harbour-nextcloudnotes/accounts/" + uuid
refreshConfig()
@@ -42,6 +42,13 @@ Item {
appSettings.currentAccount = uuid
//getNotes()
}
+ 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)
+ onUnencryptedConnectionChanged: account.setValue("unencryptedConnection", unencryptedConnection)
Connections {
target: appSettings
@@ -55,9 +62,6 @@ Item {
}
function refreshConfig() {
- if (busy) {
- apiReq.abort()
- }
account.sync()
name = account.value("name", "", String)
server = account.value("server", "", String)
@@ -69,17 +73,7 @@ Item {
unencryptedConnection = account.value("unencryptedConnection", false, Boolean)
}
- /*onUuidChanged: account.setValue("uuid", 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)
- onUnencryptedConnectionChanged: account.setValue("unencryptedConnection", unencryptedConnection)*/
-
function clear() {
- apiReq.abort()
modelData = []
model.clear()
account.clear()
@@ -96,11 +90,13 @@ Item {
}
console.log("Calling " + endpoint)
+ var apiReq = new XMLHttpRequest
apiReq.open(method, endpoint, true)
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.withCredentials = true
apiReq.onreadystatechange = function() {
if (apiReq.readyState === XMLHttpRequest.DONE) {
if (apiReq.status === 200) {
diff --git a/qml/pages/UnencryptedDialog.qml b/qml/pages/UnencryptedDialog.qml
index 66906ac..c5f49f8 100644
--- a/qml/pages/UnencryptedDialog.qml
+++ b/qml/pages/UnencryptedDialog.qml
@@ -4,7 +4,7 @@ import Sailfish.Silica 1.0
Dialog {
id: unencryptedDialog
- canAccept: textSwitch.checked
+ canAccept: understandTextSwitch.checked && ownRiskTextSwitch.checked
SilicaFlickable {
anchors.fill: parent
@@ -22,12 +22,19 @@ Dialog {
width: parent.width - 2*x
wrapMode: Text.Wrap
linkColor: Theme.highlightColor
- text: qsTr("Your username and password will be transferred unencrypted over the network when you enable this option.
Do not accept unless you know exactly what you are doing!
More information...")
+ text: qsTr("" + qsTr("Your username and password will be transferred unencrypted over the network when you enable this option.") + "
" + qsTr("Do not accept unless you know exactly what you are doing!") + "
" + qsTr("More information...") + "")
}
TextSwitch {
- id: textSwitch
+ id: understandTextSwitch
text: qsTr("I do understand")
+ onCheckedChanged: if (!checked) ownRiskTextSwitch.checked = false
+ }
+ TextSwitch {
+ id: ownRiskTextSwitch
+ opacity: understandTextSwitch.checked ? 1.0 : 0.0
+ Behavior on opacity { FadeAnimator {} }
+ text: qsTr("I use this option at my own risk")
}
}
}
diff --git a/rpm/harbour-nextcloudnotes.changes b/rpm/harbour-nextcloudnotes.changes
index 8d5b3a8..919bb50 100644
--- a/rpm/harbour-nextcloudnotes.changes
+++ b/rpm/harbour-nextcloudnotes.changes
@@ -12,6 +12,14 @@
# * date Author's Name version-release
# - Summary of changes
+* Mon Dec 10 2018 Scharel Clemens 0.2-4
+- Added Swedish translation (Thanks to @eson57)
+- Added German translation
+- Allow unencrypted connections
+
+* Sat Dec 08 2018 Scharel Clemens 0.2-3
+- Implemented #27: Allow IPv4 as server address
+
* Thu Dec 06 2018 Scharel Clemens 0.2-2
- Fixed an issue where accounts get deleted when the dialog is aborted
diff --git a/rpm/harbour-nextcloudnotes.spec b/rpm/harbour-nextcloudnotes.spec
index e0f57f2..8c227df 100644
--- a/rpm/harbour-nextcloudnotes.spec
+++ b/rpm/harbour-nextcloudnotes.spec
@@ -14,7 +14,7 @@ Name: harbour-nextcloudnotes
%{?qtc_builddir:%define _builddir %qtc_builddir}
Summary: Nextcloud Notes
Version: 0.2
-Release: 2
+Release: 4
Group: Qt/Qt
License: LICENSE
URL: http://example.org/
diff --git a/rpm/harbour-nextcloudnotes.yaml b/rpm/harbour-nextcloudnotes.yaml
index 5768b28..1d527a3 100644
--- a/rpm/harbour-nextcloudnotes.yaml
+++ b/rpm/harbour-nextcloudnotes.yaml
@@ -1,7 +1,7 @@
Name: harbour-nextcloudnotes
Summary: Nextcloud Notes
Version: 0.2
-Release: 2
+Release: 4
# 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: Qt/Qt
diff --git a/src/harbour-nextcloudnotes.cpp b/src/harbour-nextcloudnotes.cpp
index d08dc1f..8523ab0 100644
--- a/src/harbour-nextcloudnotes.cpp
+++ b/src/harbour-nextcloudnotes.cpp
@@ -15,6 +15,11 @@ int main(int argc, char *argv[])
QQuickView* view = SailfishApp::createView();
view->setSource(SailfishApp::pathTo("qml/harbour-nextcloudnotes.qml"));
+#ifdef QT_DEBUG
+ view->rootContext()->setContextProperty("debug", QVariant(true));
+#else
+ view->rootContext()->setContextProperty("debug", QVariant(false));
+#endif
view->show();
return app->exec();
diff --git a/translations/harbour-nextcloudnotes-de.ts b/translations/harbour-nextcloudnotes-de.ts
index 223d9e8..040f3ff 100644
--- a/translations/harbour-nextcloudnotes-de.ts
+++ b/translations/harbour-nextcloudnotes-de.ts
@@ -1,15 +1,212 @@
-
+
- CoverPage
+ AboutPage
-
- Mein Cover
+
+ Über
+
+
+
+ Die App läuft im DEBUG Modus!
+
+
+
+ Notizen
+
+
+
+ Pre-Showdown Github link
+ Der Quelltext ist auf
+
+
+
+ MIT Lizenz
+
+
+
+ Pre-Showdown Github link
+ Diese App verwendet
+
+
+
+ Post-Showdown Github link
+ um Markton in HTML zu konvertieren.
+
+
+
+ Showdown 1.x wurde unter GPL 2.0 veröffentlicht.
+
+
+
+ GPL 2.0 Lizenz
+
+
+
+ Nextcloud Notizen
+
+
+
+ für Sailfish OS
+
+
+
+ Post-Showdown Github link
+ verfügbar.
+
+
+
+ Diese App wurde unter der MIT Lizenz veröffentlicht.
- FirstPage
+ CoverPage
+
+
+ Notizen
+
+
+
+ EditPage
+
+
+ Zurücksetzen
+
+
+
+ Markdown Syntax
+
+
+
+ Ohne Kategorie
+
+
+
+ Kategorie
+
+
+
+ Geändert
+
+
+
+ GPLLicense
+
+
+ GPL 2.0 Lizenz
+
+
+
+ LoginDialog
+
+
+ Verbinden
+
+
+
+ Speichern
+
+
+
+ Kontoname
+
+
+
+ Nextcloud Server URL
+
+
+
+ (beginnend mit "https://")
+
+
+
+ Benutzername
+
+
+
+ Passwort
+
+
+
+ Sicherheit
+
+
+
+ <strong>ACHTUNG: Dein Password wird unverschlüsselt auf dem Gerät gespeichert!</strong><br>Erwäge ein eigenes App-Passwort zu erstellen! Öffne deine Nextcloud in einem Webbrowser und gehe zu <i>Einstellungen</i> --> <i>Sicherheit</i>.
+
+
+
+ Unverschlüsselte Verbindungen zulassen
+
+
+
+
+
+
+
+ MITLicense
+
+
+ MIT Lizenz
+
+
+
+ NotePage
+
+
+ Löschen
+
+
+
+ Neu laden
+
+
+
+ Aktualisiere...
+
+
+
+ Zuletzt aktualisiert
+
+
+
+ noch nie
+
+
+
+ Bearbeiten
+
+
+
+ Notizen
+
+
+
+ Ohne Kategorie
+
+
+
+ Kategorie
+
+
+
+ Geändert
+
+
+
+ NotesApi
+
+
+ Heute
+
+
+
+ Gestern
+
+
+
+ NotesPage
Einstellungen
@@ -18,32 +215,219 @@
Neue Notiz
+
+
+ Neu laden
+
+
+
+ Aktualisiere...
+
Zuletzt aktualisiert
-
- Nextcloud Notizen
+
+ noch nie
+
+
+
+ Geändert
Löschen
+
+
+ Lösche Notiz
+
+
+
+ Noch kein Konto eingerichtet
+
+
+
+ Öffne die EInstellungen um ein Benutzerkonto hinzuzufügen
+
- Noch keine Notizen
+ Noch keine Notizen
Herunterziehen um eine neue Notiz zu erzeugen
+
+
+ Keine Ergebnisse
+
+
+
+ Versuche eine andere Suche
+
+
+
+ Es ist ein Fehler aufgetreten
+
+
+
+ Passe deine Nextcloud Konten in den Einstellungen an
+
- harbour-nextcloudnotes
+ SettingsPage
-
- noch nie
+
+ Über
+
+
+
+ Einstellungen
+
+
+
+ Benutzerkonten
+
+
+
+ Noch kein Nextcloud Konto eingerichtet
+
+
+
+ Unbenanntes Konto
+
+
+
+ unbekannt
+
+
+
+ Bearbeiten
+
+
+
+ Löschen
+
+
+
+ Lösche Konto
+
+
+
+ Konto hinzufügen
+
+
+
+ Synchronisierung
+
+
+
+ Auto-Sync
+
+
+
+ Notizen regelmäßig abrufen
+
+
+
+ Deaktiviert
+
+
+
+ alle
+
+
+
+ Minuten
+
+
+
+ Sekunden
+
+
+
+ Aussehen
+
+
+
+ Zuletzt bearbeitet
+
+
+
+ Kategorie
+
+
+
+ Alphabetisch nach Titel
+
+
+
+ Notizen sortieren nach
+
+
+
+ Dies beeinflusst auch die Gruppierung
+
+
+
+ Trennlinie einblenden
+
+
+
+ Eine Trennlinie zwischen den Notizen anzeigen
+
+
+
+ Zeilen
+
+
+
+ Anzahl der Zeiten in der Vorschau
+
+
+
+ Bearbeitung
+
+
+
+ Nichtproportionale Schrift
+
+
+
+ Nichtproportionale Schrift beim Bearbeiten benutzen
+
+
+
+ Großes "X" in Kontrollkästchen
+
+
+
+ Kann für die Interoperabilität mit anderen Apps (z.B. Joplin) nützlich sein
+
+
+
+ UnencryptedDialog
+
+
+ Dein Benutzername und Passwort werden unverschlüsselt über das Netz übertragen wenn diese Option ausgewählt wurde.
+
+
+
+ Fahre nicht fort, wenn du nicht genau weißt was du tust!
+
+
+
+ Mehr Informationen...
+
+
+
+ Ich habe verstanden
+
+
+
+ Ich benutze diese Option auf eigene Gefahr
diff --git a/translations/harbour-nextcloudnotes-sv.ts b/translations/harbour-nextcloudnotes-sv.ts
index 5ae3e6a..498c117 100644
--- a/translations/harbour-nextcloudnotes-sv.ts
+++ b/translations/harbour-nextcloudnotes-sv.ts
@@ -19,22 +19,46 @@
Anteckningar
-
-
- <p>Denna app är släppt under MIT-licensen.</p><p>Källkoden finns på <a href="https://github.com/scharel/harbour-nextcloudnotes">GitHub</a>.</p>
-
MIT License
-
-
- <p>Denna app använder <a href="https://github.com/showdownjs/showdown/tree/1.9.0">ShowdownJS v1.9</a> för att konvertera Markdown till HTML.</p><p>Showdown 1.x är släppt under GPL 2.0.</p>
-
GPL 2.0 License
+
+
+ Appen körs i DEBUG-läget!
+
+
+
+ Pre-Showdown Github link
+ Källkoden finns på
+
+
+
+ Pre-Showdown Github link
+ Denna app använder
+
+
+
+ Post-Showdown Github link
+ för att konvertera Markdown till HTML.
+
+
+
+ Showdown 1.x är släppt under GPL 2.0.
+
+
+
+ Post-Showdown Github link
+ .
+
+
+
+ Denna app är släppt under MIT-licensen.
+
CoverPage
@@ -115,6 +139,10 @@
Spara
+
+
+ Tillåt okrypterade anslutningar
+
MITLicense
@@ -386,8 +414,20 @@
Jag förstår
-
- <strong>Ditt användarnamn och lösenord överförs okrypterat över nätverket när du aktiverar det här alternativet.<br>Acceptera inte, såvida du inte vet exakt vad håller på med!</strong ><br><a href="https://github.com/nextcloud/notes/wiki/API-0.2">Mer information...</a>
+
+ Jag använder detta alternativ på egen risk
+
+
+
+ Acceptera inte, såvida du inte vet exakt vad håller på med!
+
+
+
+ Mer information...
+
+
+
+ Ditt användarnamn och lösenord överförs okrypterat över nätverket när du aktiverar det här alternativet.
diff --git a/translations/harbour-nextcloudnotes.ts b/translations/harbour-nextcloudnotes.ts
index 5b113cb..aef2166 100644
--- a/translations/harbour-nextcloudnotes.ts
+++ b/translations/harbour-nextcloudnotes.ts
@@ -4,41 +4,79 @@
AboutPage
+
-
-
-
-
-
+
+
+
-
+
+
+
+
+ Pre-Showdown Github link
+
+
+
+
+
+ Post-Showdown Github link
+
+
+
+
-
+
+
+ Pre-Showdown Github link
+
+
+ Post-Showdown Github link
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
CoverPage
+
@@ -46,22 +84,27 @@
EditPage
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -69,6 +112,7 @@
GPLLicense
+
@@ -76,49 +120,65 @@
LoginDialog
+
-
-
-
-
-
-
-
-
-
+
+
+
-
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
MITLicense
+
@@ -126,53 +186,65 @@
NotePage
-
-
-
-
-
-
-
-
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
NotesApi
+
+
@@ -180,70 +252,87 @@
NotesPage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -251,142 +340,191 @@
SettingsPage
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
+
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
UnencryptedDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+