import QtQuick 2.0 import QtQuick.Window 2.0 import QtQuick.Controls 1.1 import QtQuick.Dialogs 1.1 Window { id: root title: Qt.application.name width: 400 height: 200 minimumWidth: 400 minimumHeight: 200 maximumWidth: 800 maximumHeight: 400 MessageDialog { id: confirmDialog title: root.title icon: StandardIcon.Question text: '' informativeText: '' detailedText: '' standardButtons: StandardButton.Ok | StandardButton.Cancel onAccepted: xdgUrlHandler.process() onRejected: Qt.quit() } MessageDialog { id: infoDialog title: root.title icon: StandardIcon.Information text: '' informativeText: '' detailedText: '' standardButtons: StandardButton.Ok onAccepted: Qt.quit() } MessageDialog { id: errorDialog title: root.title icon: StandardIcon.Warning text: '' informativeText: '' detailedText: '' standardButtons: StandardButton.Ok onAccepted: Qt.quit() } MessageDialog { // We maybe use generic Dialog component for // this dialog if we drop Qt 5.2 support id: progressDialog title: root.title contentItem: Item { implicitWidth: 400 implicitHeight: 100 Column { anchors.fill: parent anchors.margins: 12 spacing: 8 Label { id: primaryLabel text: '' font.bold: true } ProgressBar { id: progressBar maximumValue: 1 minimumValue: 0 value: 0 anchors.left: parent.left anchors.right: parent.right } Button { id: cancelButton text: 'Cancel' anchors.right: parent.right onClicked: Qt.quit() } } } property alias primaryLabel: primaryLabel property alias progressBar: progressBar } Component.onCompleted: { var metadata = JSON.parse(xdgUrlHandler.getMetadata()); var primaryMessages = { 'success_download': 'Download successfull', 'success_install': 'Installation successfull', 'error_validation': 'Validation error', 'error_network': 'Network error', 'error_filetype': 'File type error', 'error_save': 'Saving file failed', 'error_install': 'Installation failed' }; xdgUrlHandler.started.connect(function() { progressDialog.open(); }); xdgUrlHandler.finished.connect(function(result) { progressDialog.close(); result = JSON.parse(result); infoDialog.text = primaryMessages[result.status]; infoDialog.informativeText = metadata.filename; infoDialog.detailedText = result.message; infoDialog.open(); }); xdgUrlHandler.error.connect(function(result) { progressDialog.close(); result = JSON.parse(result); errorDialog.text = primaryMessages[result.status]; errorDialog.informativeText = metadata.filename; errorDialog.detailedText = result.message; errorDialog.open(); }); xdgUrlHandler.downloadProgress.connect(function(received, total) { console.log([received, total]); }); if (xdgUrlHandler.isValid()) { confirmDialog.text = 'Do you want to ' + metadata.command + '?'; confirmDialog.informativeText = metadata.filename; confirmDialog.detailedText = 'URL: ' + metadata.url + '\n\n' + 'File: ' + metadata.filename + '\n\n' + 'Type: ' + metadata.type; confirmDialog.open(); } else { errorDialog.text = 'Validation error'; errorDialog.detailedText = 'Invalid XDG-URL ' + xdgUrlHandler.getXdgUrl(); errorDialog.open(); } } function convertByteToHumanReadable(bytes) { bytes = parseFloat(bytes); var kb = 1024; var mb = 1024 * kb; var gb = 1024 * mb; var tb = 1024 * gb; var pb = 1024 * tb; var eb = 1024 * pb; var zb = 1024 * eb; var yb = 1024 * zb; var text = ''; if (bytes < kb) { text = bytes.toFixed(0) + ' B'; } else if (bytes < mb) { text = (bytes / kb).toFixed(2) + ' KB'; } else if (bytes < gb) { text = (bytes / mb).toFixed(2) + ' MB'; } else if (bytes < tb) { text = (bytes / gb).toFixed(2) + ' GB'; } else if (bytes < pb) { text = (bytes / tb).toFixed(2) + ' TB'; } else if (bytes < eb) { text = (bytes / pb).toFixed(2) + ' PB'; } else if (bytes < zb) { text = (bytes / eb).toFixed(2) + ' EB'; } else if (bytes < yb) { text = (bytes / zb).toFixed(2) + ' ZB'; } else if (bytes >= yb) { text = (bytes / yb).toFixed(2) + ' YB'; } return text; } }