Skip to content
Snippets Groups Projects
main.qml 5.71 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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 = {
    
    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() {
    
    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
    }