| 
									
										
										
										
											2019-11-17 19:24:47 +01:00
										 |  |  | // 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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-15 11:46:01 -08:00
										 |  |  | TemplatePage { | 
					
						
							| 
									
										
										
										
											2019-11-17 19:24:47 +01:00
										 |  |  | 	title: qsTr("Export Divelog information") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-06 22:38:07 +01:00
										 |  |  | 	property int selectedExport: ExportType.EX_DIVES_XML | 
					
						
							| 
									
										
										
										
											2019-11-17 19:24:47 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-19 12:29:32 +01:00
										 |  |  | 	FileDialog { | 
					
						
							|  |  |  | 		id: saveAsDialog | 
					
						
							|  |  |  | 		folder: shortcuts.documents | 
					
						
							|  |  |  | 		selectFolder: true | 
					
						
							|  |  |  | 		onAccepted: { | 
					
						
							|  |  |  | 			manager.exportToFile(selectedExport, fileUrls, anonymize.checked) | 
					
						
							| 
									
										
										
										
											2019-12-04 21:19:17 +01:00
										 |  |  | 			pageStack.pop() | 
					
						
							| 
									
										
										
										
											2019-11-19 12:29:32 +01:00
										 |  |  | 			close() | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		onRejected: { | 
					
						
							| 
									
										
										
										
											2019-12-04 21:19:17 +01:00
										 |  |  | 			pageStack.pop() | 
					
						
							| 
									
										
										
										
											2019-11-19 12:29:32 +01:00
										 |  |  | 			close() | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-15 11:46:01 -08:00
										 |  |  | 	GridLayout { | 
					
						
							| 
									
										
										
										
											2019-11-19 17:52:20 +01:00
										 |  |  | 		id: uploadDialog | 
					
						
							| 
									
										
										
										
											2020-02-15 11:46:01 -08:00
										 |  |  | 		visible: false | 
					
						
							|  |  |  | 		anchors { | 
					
						
							|  |  |  | 			top: parent.top | 
					
						
							|  |  |  | 			left: parent.left | 
					
						
							|  |  |  | 			right: parent.right | 
					
						
							|  |  |  | 			margins: Kirigami.Units.gridUnit / 2 | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		rowSpacing: Kirigami.Units.smallSpacing * 2 | 
					
						
							|  |  |  | 		columnSpacing: Kirigami.Units.smallSpacing | 
					
						
							|  |  |  | 		columns: 3 | 
					
						
							|  |  |  | 		TemplateLabel { | 
					
						
							|  |  |  | 			text: qsTr("Export credentials") | 
					
						
							|  |  |  | 			Layout.columnSpan: 3 | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		TemplateLabel { | 
					
						
							|  |  |  | 			id: textUserID | 
					
						
							|  |  |  | 			text: qsTr("User ID") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		TemplateTextField { | 
					
						
							|  |  |  | 			id: fieldUserID | 
					
						
							|  |  |  | 			Layout.columnSpan: 2 | 
					
						
							|  |  |  | 			Layout.fillWidth: true | 
					
						
							|  |  |  | 			inputMethodHints: Qt.ImhNoAutoUppercase | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		TemplateLabel { | 
					
						
							|  |  |  | 			id: textPassword | 
					
						
							|  |  |  | 			text: qsTr("Password:") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		TemplateTextField { | 
					
						
							|  |  |  | 			id: fieldPassword | 
					
						
							|  |  |  | 			Layout.columnSpan: 2 | 
					
						
							|  |  |  | 			Layout.fillWidth: true | 
					
						
							|  |  |  | 			inputMethodHints: Qt.ImhSensitiveData | | 
					
						
							|  |  |  | 					  Qt.ImhHiddenText | | 
					
						
							|  |  |  | 					  Qt.ImhNoAutoUppercase | 
					
						
							|  |  |  | 			echoMode: TextInput.PasswordEchoOnEdit | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		TemplateCheckBox { | 
					
						
							|  |  |  | 			id: fieldPrivate | 
					
						
							|  |  |  | 			visible: selectedExport === ExportType.EX_DIVESHARE | 
					
						
							|  |  |  | 			Layout.fillWidth: true | 
					
						
							|  |  |  | 			text: qsTr("Private") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		ProgressBar { | 
					
						
							|  |  |  | 			id: progress | 
					
						
							|  |  |  | 			value: 0.0 | 
					
						
							|  |  |  | 			Layout.columnSpan: 2 | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		TemplateLabel { | 
					
						
							|  |  |  | 			id: statusText | 
					
						
							|  |  |  | 			Layout.fillWidth: true | 
					
						
							|  |  |  | 			Layout.columnSpan: 3 | 
					
						
							|  |  |  | 			wrapMode: Text.Wrap | 
					
						
							| 
									
										
										
										
											2019-11-19 17:52:20 +01:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-15 11:46:01 -08:00
										 |  |  | 		TemplateButton { | 
					
						
							|  |  |  | 			text: qsTr("Export") | 
					
						
							|  |  |  | 			onClicked: { | 
					
						
							|  |  |  | 				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) | 
					
						
							| 
									
										
										
										
											2019-12-08 15:35:03 +01:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2019-11-29 19:27:30 +01:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2019-11-19 17:52:20 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2020-02-15 11:46:01 -08:00
										 |  |  | 		TemplateButton { | 
					
						
							|  |  |  | 			text: qsTr("Cancel") | 
					
						
							|  |  |  | 			onClicked: { | 
					
						
							|  |  |  | 				pageStack.pop() | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2019-11-19 17:52:20 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2019-12-08 10:41:00 +01:00
										 |  |  | 		Connections { | 
					
						
							|  |  |  | 			target: manager | 
					
						
							| 
									
										
										
										
											2024-05-28 14:20:55 +12:00
										 |  |  | 			function onUploadFinish(success, text) { | 
					
						
							| 
									
										
										
										
											2019-12-11 17:27:41 +01:00
										 |  |  | 				if (success) { | 
					
						
							|  |  |  | 					pageStack.pop() | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2019-12-08 10:41:00 +01:00
										 |  |  | 				statusText.text = text | 
					
						
							|  |  |  | 				progress.value = 0 | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2024-05-28 14:20:55 +12:00
										 |  |  | 			function onUploadProgress(percentage) { | 
					
						
							| 
									
										
										
										
											2019-12-08 10:41:00 +01:00
										 |  |  | 				progress.value = percentage | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2019-11-19 17:52:20 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-15 11:45:19 -08:00
										 |  |  | 	// 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
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-17 19:24:47 +01:00
										 |  |  | 	ColumnLayout { | 
					
						
							| 
									
										
										
										
											2020-02-15 11:46:01 -08:00
										 |  |  | 		id: exportSelection | 
					
						
							|  |  |  | 		visible: true | 
					
						
							| 
									
										
										
										
											2019-11-17 19:24:47 +01:00
										 |  |  | 		width: parent.width | 
					
						
							| 
									
										
										
										
											2020-02-15 11:46:01 -08:00
										 |  |  | 		spacing: 3 | 
					
						
							|  |  |  | 		Layout.margins: Kirigami.Units.gridUnit / 2 | 
					
						
							| 
									
										
										
										
											2019-11-17 19:24:47 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-17 13:47:41 -08:00
										 |  |  | 		TemplateRadioButton { | 
					
						
							| 
									
										
										
										
											2019-11-17 19:24:47 +01:00
										 |  |  | 			text: qsTr("Export Subsurface XML") | 
					
						
							|  |  |  | 			checked: true | 
					
						
							|  |  |  | 			onClicked: { | 
					
						
							|  |  |  | 				selectedExport = ExportType.EX_DIVES_XML | 
					
						
							|  |  |  | 				explain.text = qsTr("Subsurface native XML format.") | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2020-02-17 13:47:41 -08:00
										 |  |  | 		TemplateRadioButton { | 
					
						
							| 
									
										
										
										
											2019-11-17 19:24:47 +01:00
										 |  |  | 			text: qsTr("Export Subsurface dive sites XML") | 
					
						
							|  |  |  | 			onClicked: { | 
					
						
							|  |  |  | 				selectedExport = ExportType.EX_DIVE_SITES_XML | 
					
						
							|  |  |  | 				explain.text = qsTr("Subsurface dive sites native XML format.") | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2020-02-17 13:47:41 -08:00
										 |  |  | 		TemplateRadioButton { | 
					
						
							| 
									
										
										
										
											2019-11-17 19:24:47 +01:00
										 |  |  | 			text: qsTr("Upload divelogs.de") | 
					
						
							|  |  |  | 			onClicked: { | 
					
						
							|  |  |  | 				selectedExport = ExportType.EX_DIVELOGS_DE | 
					
						
							|  |  |  | 				explain.text = qsTr("Send the dive data to divelogs.de website.") | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2020-02-17 13:47:41 -08:00
										 |  |  | 		TemplateRadioButton { | 
					
						
							| 
									
										
										
										
											2019-11-17 19:24:47 +01:00
										 |  |  | 			text: qsTr("Upload DiveShare") | 
					
						
							|  |  |  | 			onClicked: { | 
					
						
							|  |  |  | 				selectedExport = ExportType.EX_DIVESHARE | 
					
						
							|  |  |  | 				explain.text = qsTr("Send the dive data to dive-share.appspot.com website.") | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2020-02-15 11:46:01 -08:00
										 |  |  | 		Rectangle { | 
					
						
							|  |  |  | 			width: 1 | 
					
						
							|  |  |  | 			height: Kirigami.Units.gridUnit | 
					
						
							|  |  |  | 			color: "transparent" | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		TemplateLabel { | 
					
						
							| 
									
										
										
										
											2019-11-17 19:24:47 +01:00
										 |  |  | 			id: explain | 
					
						
							|  |  |  | 			Layout.fillWidth: true | 
					
						
							|  |  |  | 			wrapMode: Text.Wrap | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2020-02-15 11:46:01 -08:00
										 |  |  | 		Rectangle { | 
					
						
							|  |  |  | 			width: 1 | 
					
						
							|  |  |  | 			height: Kirigami.Units.gridUnit | 
					
						
							|  |  |  | 			color: "transparent" | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		TemplateCheckBox { | 
					
						
							| 
									
										
										
										
											2019-11-17 19:24:47 +01:00
										 |  |  | 			id: anonymize | 
					
						
							|  |  |  | 			Layout.fillWidth: true | 
					
						
							|  |  |  | 			text: qsTr("Anonymize") | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2019-02-11 17:09:51 +01:00
										 |  |  | 		TemplateButton { | 
					
						
							| 
									
										
										
										
											2019-11-17 19:24:47 +01:00
										 |  |  | 			text: qsTr("Next") | 
					
						
							|  |  |  | 			onClicked: { | 
					
						
							| 
									
										
										
										
											2019-11-29 19:27:30 +01:00
										 |  |  | 				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 | 
					
						
							| 
									
										
										
										
											2019-12-12 13:09:07 +01:00
										 |  |  | 					statusText.text = "" | 
					
						
							| 
									
										
										
										
											2020-02-15 11:46:01 -08:00
										 |  |  | 					exportSelection.visible = false | 
					
						
							|  |  |  | 					uploadDialog.visible = true | 
					
						
							| 
									
										
										
										
											2019-11-29 19:27:30 +01:00
										 |  |  | 				} else if (selectedExport === ExportType.EX_DIVESHARE) { | 
					
						
							| 
									
										
										
										
											2019-12-08 15:35:03 +01:00
										 |  |  | 					textUserID.visible = true | 
					
						
							|  |  |  | 					fieldUserID.visible = true | 
					
						
							|  |  |  | 					fieldUserID.text = PrefCloudStorage.diveshare_uid | 
					
						
							|  |  |  | 					fieldPrivate.visible = true | 
					
						
							|  |  |  | 					fieldPrivate.checked = PrefCloudStorage.diveshare_private | 
					
						
							| 
									
										
										
										
											2020-02-15 11:46:01 -08:00
										 |  |  | 					exportSelection.visible = false | 
					
						
							| 
									
										
										
										
											2019-12-08 15:35:03 +01:00
										 |  |  | 					textPassword.visible = false | 
					
						
							| 
									
										
										
										
											2020-02-15 11:46:01 -08:00
										 |  |  | 					uploadDialog.visible = true | 
					
						
							| 
									
										
										
										
											2022-08-30 11:54:25 -07:00
										 |  |  | 				} else if (Qt.platform.os !== "android" && Qt.platform.os !== "ios") { | 
					
						
							| 
									
										
										
										
											2019-11-19 12:29:32 +01:00
										 |  |  | 					saveAsDialog.open() | 
					
						
							| 
									
										
										
										
											2022-08-30 11:54:25 -07:00
										 |  |  | 				} else { | 
					
						
							|  |  |  | 					manager.appendTextToLog("Send export of type " + selectedExport + " via email.") | 
					
						
							|  |  |  | 					manager.shareViaEmail(selectedExport, anonymize.checked) | 
					
						
							|  |  |  | 					pageStack.pop() | 
					
						
							| 
									
										
										
										
											2019-11-19 12:29:32 +01:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2019-11-17 19:24:47 +01:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |