subsurface/mobile-widgets/qml/Export.qml
Dirk Hohndel 9e36968881 mobile/export: don't allow file based exports on Android
There is no native file dialog, access to the file system is highly restricted
and will be much more so in Android 11. Let's not even start with this.

This should never have been merged as it was.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-02-17 10:50:51 -08:00

215 lines
5.4 KiB
QML

// SPDX-License-Identifier: GPL-2.0
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.12
import QtQuick.Dialogs 1.3
import org.subsurfacedivelog.mobile 1.0
import org.kde.kirigami 2.4 as Kirigami
Kirigami.ScrollablePage {
title: qsTr("Export Divelog information")
property int selectedExport: ExportType.EX_DIVES_XML
FileDialog {
id: saveAsDialog
folder: shortcuts.documents
selectFolder: true
title: radioGroup.current.text
onAccepted: {
manager.exportToFile(selectedExport, fileUrls, anonymize.checked)
pageStack.pop()
close()
}
onRejected: {
pageStack.pop()
close()
}
}
Dialog {
id: uploadDialog
title: radioGroup.current.text
standardButtons: StandardButton.Apply | StandardButton.Cancel
GridLayout {
rowSpacing: Kirigami.Units.smallSpacing * 2
columnSpacing: Kirigami.Units.smallSpacing
columns: 2
Text {
id: textUserID
text: qsTr("User ID")
}
TextField {
id: fieldUserID
Layout.fillWidth: true
inputMethodHints: Qt.ImhNoAutoUppercase
}
Text {
id: textPassword
text: qsTr("Password:")
}
TextField {
id: fieldPassword
Layout.fillWidth: true
inputMethodHints: Qt.ImhSensitiveData |
Qt.ImhHiddenText |
Qt.ImhNoAutoUppercase
echoMode: TextInput.PasswordEchoOnEdit
}
CheckBox {
id: fieldPrivate
Layout.fillWidth: true
text: qsTr("Private")
}
ProgressBar {
id: progress
value: 0.0
}
Text {
id: statusText
Layout.fillWidth: true
Layout.columnSpan: 2
wrapMode: Text.Wrap
}
}
onApply: {
if (selectedExport === ExportType.EX_DIVELOGS_DE) {
if (fieldUserID.text !== PrefCloudStorage.divelogde_user) {
PrefCloudStorage.divelogde_user = fieldUserID.text
}
if (fieldPassword.text !== PrefCloudStorage.divelogde_pass)
PrefCloudStorage.divelogde_pass = fieldPassword.text
manager.exportToWEB(selectedExport, fieldUserID.text, fieldPassword.text, anonymize.checked)
} else {
if (fieldUserID.text !== PrefCloudStorage.diveshare_uid) {
PrefCloudStorage.diveshare_uid = fieldUserID.text
}
PrefCloudStorage.diveshare_private = fieldPrivate.checked
manager.exportToWEB(selectedExport, fieldUserID.text, fieldPassword.text, fieldPrivate.checked)
}
}
onRejected: {
pageStack.pop()
close()
}
Connections {
target: manager
onUploadFinish: {
if (success) {
pageStack.pop()
uploadDialog.close()
}
statusText.text = text
progress.value = 0
}
onUploadProgress: {
progress.value = percentage
}
}
}
// given that there is no native file dialog on Android and that access to
// the file system is increasingly restrictive in future versions, file based
// export really doesn't make sense on Android
ColumnLayout {
width: parent.width
spacing: 1
Layout.margins: 10
ExclusiveGroup { id: radioGroup }
RadioButton {
Layout.fillWidth: true
text: qsTr("Export Subsurface XML")
visible: Qt.platform.os !== "android"
checked: true
exclusiveGroup: radioGroup
onClicked: {
selectedExport = ExportType.EX_DIVES_XML
explain.text = qsTr("Subsurface native XML format.")
}
}
RadioButton {
Layout.fillWidth: true
text: qsTr("Export Subsurface dive sites XML")
visible: Qt.platform.os !== "android"
exclusiveGroup: radioGroup
onClicked: {
selectedExport = ExportType.EX_DIVE_SITES_XML
explain.text = qsTr("Subsurface dive sites native XML format.")
}
}
RadioButton {
Layout.fillWidth: true
text: qsTr("Export UDDF")
visible: Qt.platform.os !== "android"
exclusiveGroup: radioGroup
onClicked: {
selectedExport = ExportType.EX_UDDF
explain.text = qsTr("Generic format that is used for data exchange between a variety of diving related programs.")
}
}
RadioButton {
Layout.fillWidth: true
text: qsTr("Upload divelogs.de")
exclusiveGroup: radioGroup
onClicked: {
selectedExport = ExportType.EX_DIVELOGS_DE
explain.text = qsTr("Send the dive data to divelogs.de website.")
}
}
RadioButton {
Layout.fillWidth: true
text: qsTr("Upload DiveShare")
exclusiveGroup: radioGroup
onClicked: {
selectedExport = ExportType.EX_DIVESHARE
explain.text = qsTr("Send the dive data to dive-share.appspot.com website.")
}
}
Text {
id: explain
Layout.fillWidth: true
wrapMode: Text.Wrap
}
CheckBox {
id: anonymize
Layout.fillWidth: true
text: qsTr("Anonymize")
}
TemplateButton {
text: qsTr("Next")
onClicked: {
if (selectedExport === ExportType.EX_DIVELOGS_DE) {
textUserID.visible = true
fieldUserID.visible = true
fieldUserID.text = PrefCloudStorage.divelogde_user
textPassword.visible = true
fieldPassword.visible = true
fieldPassword.text = PrefCloudStorage.divelogde_pass
anonymize.visible = false
statusText.text = ""
fieldPrivate.visible = false
uploadDialog.open()
} else if (selectedExport === ExportType.EX_DIVESHARE) {
textUserID.visible = true
fieldUserID.visible = true
fieldUserID.text = PrefCloudStorage.diveshare_uid
fieldPrivate.visible = true
fieldPrivate.checked = PrefCloudStorage.diveshare_private
textPassword.visible = false
fieldPassword.visible = false
uploadDialog.open()
} else if (Qt.platform.os !== "android") {
saveAsDialog.open()
}
}
}
}
}