Skip to content
Snippets Groups Projects
main.qml 4.72 KiB
Newer Older
akiraohgaki's avatar
akiraohgaki committed
// Still support Qt 5.2, so doesn't use QtQuick.Dialogs 1.2
import QtQuick 2.0
akiraohgaki's avatar
akiraohgaki committed
import QtQuick.Window 2.0
akiraohgaki's avatar
akiraohgaki committed
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
Window {
akiraohgaki's avatar
akiraohgaki committed
    id: app
akiraohgaki's avatar
akiraohgaki committed

    title: configHandler.getAppConfigApplication().name
    width: 400
    height: 200
    minimumWidth: 400
    minimumHeight: 200
    maximumWidth: 800
    maximumHeight: 400
akiraohgaki's avatar
akiraohgaki committed
    visible: true
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
        //icon: StandardIcon.Question
        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
        //icon: StandardIcon.Information
        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
        //icon: StandardIcon.Warning
        rejectButton.text: qsTr("Close")
        rejectButton.onClicked: {
            close();
            Qt.quit();
        }
akiraohgaki's avatar
akiraohgaki committed
    }

    Ui.Dialog {
        id: progressDialog
akiraohgaki's avatar
akiraohgaki committed
        //icon: StandardIcon.NoIcon
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: 8
            ProgressBar {
                id: progressBar
                minimumValue: 0
                maximumValue: 1
                value: 0
                Layout.fillWidth: true
            }
            Label {
                id: progressText
                text: ""
                anchors.right: parent.right
            }
        }
        rejectButton.text: qsTr("Cancel")
        rejectButton.onClicked: {
            close();
            Qt.quit();
        }
akiraohgaki's avatar
akiraohgaki committed
    }

    Component.onCompleted: {
        app.init();
    }
akiraohgaki's avatar
akiraohgaki committed
}