Skip to content
Snippets Groups Projects
main.qml 4.74 KiB
Newer Older
  • Learn to ignore specific revisions
  • akiraohgaki's avatar
    akiraohgaki committed
    // Still support Qt 5.2
    
    akiraohgaki's avatar
    akiraohgaki committed
    import QtQuick 2.0
    import QtQuick.Layouts 1.0
    import QtQuick.Controls 1.0
    
    import "ui" as Ui
    
    akiraohgaki's avatar
    akiraohgaki committed
    
    
    akiraohgaki's avatar
    akiraohgaki committed
    import "scripts/Utility.js" as Utility
    
    akiraohgaki's avatar
    akiraohgaki committed
    
    
    akiraohgaki's avatar
    akiraohgaki committed
    ApplicationWindow {
    
    akiraohgaki's avatar
    akiraohgaki committed
        id: app
    
    akiraohgaki's avatar
    akiraohgaki committed
    
        title: configHandler.getAppConfigApplication().name
    
    akiraohgaki's avatar
    akiraohgaki committed
    
        visible: true
    
    akiraohgaki's avatar
    akiraohgaki committed
        width: 400
        minimumWidth: 400
        maximumWidth: 400
    
    akiraohgaki's avatar
    akiraohgaki committed
        height: 200
        minimumHeight: 200
    
    akiraohgaki's avatar
    akiraohgaki committed
        maximumHeight: 400
    
    akiraohgaki's avatar
    akiraohgaki committed
    
    
    akiraohgaki's avatar
    akiraohgaki committed
        function init() {
    
    akiraohgaki's avatar
    akiraohgaki committed
            var metadata = ocsUrlHandler.metadata();
    
            var primaryMessages = {
    
    akiraohgaki's avatar
    akiraohgaki committed
                "success_download": qsTr("Download successfull"),
                "success_install": qsTr("Installation successfull"),
                "error_validation": qsTr("Validation error"),
                "error_network": qsTr("Network error"),
                "error_save": qsTr("Saving file failed"),
                "error_install": qsTr("Installation failed")
    
    akiraohgaki's avatar
    akiraohgaki committed
            ocsUrlHandler.started.connect(function() {
    
                progressDialog.open();
            });
    
    akiraohgaki's avatar
    akiraohgaki committed
    
    
    akiraohgaki's avatar
    akiraohgaki committed
            ocsUrlHandler.finishedWithSuccess.connect(function(result) {
    
                progressDialog.close();
    
    akiraohgaki's avatar
    akiraohgaki committed
                infoDialog.primaryText = primaryMessages[result.status];
    
                infoDialog.informativeText = metadata.filename;
    
    akiraohgaki's avatar
    akiraohgaki committed
                infoDialog.detailedText = result.message;
    
                infoDialog.open();
            });
    
    akiraohgaki's avatar
    akiraohgaki committed
    
    
    akiraohgaki's avatar
    akiraohgaki committed
            ocsUrlHandler.finishedWithError.connect(function(result) {
    
                progressDialog.close();
    
    akiraohgaki's avatar
    akiraohgaki committed
                errorDialog.primaryText = primaryMessages[result.status];
    
                errorDialog.informativeText = metadata.filename;
    
    akiraohgaki's avatar
    akiraohgaki committed
                errorDialog.detailedText = result.message;
    
                errorDialog.open();
    
    akiraohgaki's avatar
    akiraohgaki committed
            });
    
    
    akiraohgaki's avatar
    akiraohgaki committed
            ocsUrlHandler.downloadProgress.connect(function(id, bytesReceived, bytesTotal) {
    
    akiraohgaki's avatar
    akiraohgaki committed
                progressDialog.primaryText = qsTr("Downloading");
                progressDialog.informativeText = metadata.filename;
                progressDialog.progress = bytesReceived / bytesTotal;
                progressDialog.progressText
                        = Utility.convertByteToHumanReadable(bytesReceived)
                        + " / " + Utility.convertByteToHumanReadable(bytesTotal);
    
    akiraohgaki's avatar
    akiraohgaki committed
            if (ocsUrlHandler.isValid()) {
    
    akiraohgaki's avatar
    akiraohgaki committed
                if (metadata.command === "download") {
    
    akiraohgaki's avatar
    akiraohgaki committed
                    confirmDialog.primaryText = qsTr("Do you want to download?");
    
    akiraohgaki's avatar
    akiraohgaki committed
                }
                else if (metadata.command === "install") {
    
    akiraohgaki's avatar
    akiraohgaki committed
                    confirmDialog.primaryText = qsTr("Do you want to install?");
    
    akiraohgaki's avatar
    akiraohgaki committed
                confirmDialog.informativeText = metadata.filename;
    
    akiraohgaki's avatar
    akiraohgaki committed
                confirmDialog.detailedText
    
    akiraohgaki's avatar
    akiraohgaki committed
                        = qsTr("URL") + ": " + metadata.url + "\n"
                        + qsTr("File") + ": " + metadata.filename + "\n"
    
    akiraohgaki's avatar
    akiraohgaki committed
                        + qsTr("Type") + ": " + configHandler.getAppConfigInstallTypes()[metadata.type].name;
    
    akiraohgaki's avatar
    akiraohgaki committed
                confirmDialog.open();
            }
            else {
    
    akiraohgaki's avatar
    akiraohgaki committed
                errorDialog.primaryText = primaryMessages["error_validation"];
    
    akiraohgaki's avatar
    akiraohgaki committed
                errorDialog.detailedText = qsTr("Invalid OCS-URL");
    
    akiraohgaki's avatar
    akiraohgaki committed
                errorDialog.open();
            }
        }
    
    akiraohgaki's avatar
    akiraohgaki committed
    
        Ui.Dialog {
            id: confirmDialog
    
    akiraohgaki's avatar
    akiraohgaki committed
            icon: "qrc:/images/icons/dialog-information.svg"
    
    akiraohgaki's avatar
    akiraohgaki committed
            acceptButton.text: qsTr("OK")
    
            acceptButton.onClicked: {
                close();
                ocsUrlHandler.process();
            }
    
    akiraohgaki's avatar
    akiraohgaki committed
            rejectButton.text: qsTr("Cancel")
    
            rejectButton.onClicked: {
                close();
                Qt.quit();
            }
    
    akiraohgaki's avatar
    akiraohgaki committed
        }
    
        Ui.Dialog {
            id: infoDialog
    
    akiraohgaki's avatar
    akiraohgaki committed
            icon: "qrc:/images/icons/emblem-default.svg"
    
    akiraohgaki's avatar
    akiraohgaki committed
            acceptButton.text: qsTr("Open")
            acceptButton.onClicked: {
    
                close();
    
    akiraohgaki's avatar
    akiraohgaki committed
                ocsUrlHandler.openDestination();
                Qt.quit();
            }
            rejectButton.text: qsTr("Close")
    
            rejectButton.onClicked: {
                close();
                Qt.quit();
            }
    
    akiraohgaki's avatar
    akiraohgaki committed
        }
    
        Ui.Dialog {
            id: errorDialog
    
    akiraohgaki's avatar
    akiraohgaki committed
            icon: "qrc:/images/icons/dialog-warning.svg"
    
    akiraohgaki's avatar
    akiraohgaki committed
            rejectButton.text: qsTr("Close")
    
            rejectButton.onClicked: {
                close();
                Qt.quit();
            }
    
    akiraohgaki's avatar
    akiraohgaki committed
        }
    
        Ui.Dialog {
            id: progressDialog
    
    akiraohgaki's avatar
    akiraohgaki committed
            icon: "qrc:/images/icons/emblem-downloads.svg"
    
    akiraohgaki's avatar
    akiraohgaki committed
            property alias progress: progressBar.value
            property alias progressText: progressText.text
            content: ColumnLayout {
    
    akiraohgaki's avatar
    akiraohgaki committed
                anchors.fill: parent
    
    akiraohgaki's avatar
    akiraohgaki committed
                spacing: 4
    
    akiraohgaki's avatar
    akiraohgaki committed
                ProgressBar {
                    id: progressBar
                    minimumValue: 0
                    maximumValue: 1
                    value: 0
                    Layout.fillWidth: true
                }
                Label {
                    id: progressText
                    text: ""
    
    akiraohgaki's avatar
    akiraohgaki committed
                    Layout.alignment: Qt.AlignRight
    
    akiraohgaki's avatar
    akiraohgaki committed
                }
            }
    
            rejectButton.text: qsTr("Cancel")
            rejectButton.onClicked: {
                close();
                Qt.quit();
            }
    
    akiraohgaki's avatar
    akiraohgaki committed
        }
    
        Component.onCompleted: {
            app.init();
        }
    
    akiraohgaki's avatar
    akiraohgaki committed
    }