Skip to content
Snippets Groups Projects
main.qml 5.71 KiB
Newer Older
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
akiraohgaki's avatar
akiraohgaki committed
    minimumWidth: width
    maximumWidth: width
akiraohgaki's avatar
akiraohgaki committed
    height: 200
akiraohgaki's avatar
akiraohgaki committed
    minimumHeight: height
    maximumHeight: height
akiraohgaki's avatar
akiraohgaki committed

akiraohgaki's avatar
akiraohgaki committed
    function init() {
akiraohgaki's avatar
akiraohgaki committed
        var metadata = ocsUrlHandler.metadata();
        var primaryMessages = {
            "success_download": qsTr("Download successful"),
            "success_install": qsTr("Installation successful"),
akiraohgaki's avatar
akiraohgaki committed
            "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() {
akiraohgaki's avatar
akiraohgaki committed
            confirmDialog.close();
            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;
akiraohgaki's avatar
akiraohgaki committed
            progressDialog.detailedContentLoader.item.progressBar = bytesReceived / bytesTotal;
            progressDialog.detailedContentLoader.item.progressText
akiraohgaki's avatar
akiraohgaki committed
                    = 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

akiraohgaki's avatar
akiraohgaki committed
    function fixWindowSize(dialog) {
        if (dialog.visible) {
            app.height = dialog.implicitHeight + (dialog.anchors.margins * 2);
akiraohgaki's avatar
akiraohgaki committed
            app.minimumHeight = app.height;
            app.maximumHeight = app.height;
akiraohgaki's avatar
akiraohgaki committed
        }
    }

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
        actionButton.text: qsTr("Details")
        actionButton.onClicked: toggleDetails()
akiraohgaki's avatar
akiraohgaki committed
        acceptButton.text: qsTr("OK")
akiraohgaki's avatar
akiraohgaki committed
        acceptButton.onClicked: ocsUrlHandler.process()
akiraohgaki's avatar
akiraohgaki committed
        rejectButton.text: qsTr("Cancel")
akiraohgaki's avatar
akiraohgaki committed
        rejectButton.onClicked: Qt.quit()
        onVisibleChanged: app.fixWindowSize(confirmDialog)
        onImplicitHeightChanged: app.fixWindowSize(confirmDialog)
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
        actionButton.text: qsTr("Details")
        actionButton.onClicked: toggleDetails()
akiraohgaki's avatar
akiraohgaki committed
        acceptButton.text: qsTr("Open")
        acceptButton.onClicked: {
            ocsUrlHandler.openDestination();
            Qt.quit();
        }
        rejectButton.text: qsTr("Close")
akiraohgaki's avatar
akiraohgaki committed
        rejectButton.onClicked: Qt.quit()
        onVisibleChanged: app.fixWindowSize(infoDialog)
        onImplicitHeightChanged: app.fixWindowSize(infoDialog)
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
        actionButton.text: qsTr("Details")
        actionButton.onClicked: toggleDetails()
akiraohgaki's avatar
akiraohgaki committed
        rejectButton.text: qsTr("Close")
akiraohgaki's avatar
akiraohgaki committed
        rejectButton.onClicked: Qt.quit()
        onVisibleChanged: app.fixWindowSize(errorDialog)
        onImplicitHeightChanged: app.fixWindowSize(errorDialog)
akiraohgaki's avatar
akiraohgaki committed
    Component {
        id: progressComponent
        ColumnLayout {
            property alias progressBar: progressBar.value
            property alias progressText: progressText.text
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
            }
        }
akiraohgaki's avatar
akiraohgaki committed
    }

    Ui.Dialog {
        id: progressDialog
        icon: "qrc:/images/icons/emblem-downloads.svg"
        detailsVisible: true
        detailedContentLoader.sourceComponent: progressComponent
        rejectButton.text: qsTr("Cancel")
akiraohgaki's avatar
akiraohgaki committed
        rejectButton.onClicked: Qt.quit()
        onVisibleChanged: app.fixWindowSize(progressDialog)
        onImplicitHeightChanged: app.fixWindowSize(progressDialog)
akiraohgaki's avatar
akiraohgaki committed
    }

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