Skip to content
Snippets Groups Projects
main.qml 3.24 KiB
Newer Older
  • Learn to ignore specific revisions
  • akiraohgaki's avatar
    akiraohgaki committed
    import QtQuick 2.0
    
    akiraohgaki's avatar
    akiraohgaki committed
    import QtQuick.Window 2.0
    
    akiraohgaki's avatar
    akiraohgaki committed
    import QtQuick.Dialogs 1.1
    
    akiraohgaki's avatar
    akiraohgaki committed
    
    
    akiraohgaki's avatar
    akiraohgaki committed
    Window {
    
    akiraohgaki's avatar
    akiraohgaki committed
        id: root
        title: Qt.application.name
    
        width: 400
        height: 200
        minimumWidth: 400
        minimumHeight: 200
        maximumWidth: 800
        maximumHeight: 400
    
    akiraohgaki's avatar
    akiraohgaki committed
    
    
    akiraohgaki's avatar
    akiraohgaki committed
        MessageDialog {
            id: confirmDialog
            title: root.title
    
    akiraohgaki's avatar
    akiraohgaki committed
            icon: StandardIcon.Question
    
    akiraohgaki's avatar
    akiraohgaki committed
            text: ''
    
    akiraohgaki's avatar
    akiraohgaki committed
            informativeText: ''
    
    akiraohgaki's avatar
    akiraohgaki committed
            detailedText: ''
    
    akiraohgaki's avatar
    akiraohgaki committed
            standardButtons: StandardButton.Ok | StandardButton.Cancel
            onAccepted: xdgUrlHandler.process()
            onRejected: Qt.quit()
        }
    
        MessageDialog {
            id: infoDialog
            title: root.title
    
    akiraohgaki's avatar
    akiraohgaki committed
            icon: StandardIcon.Information
    
    akiraohgaki's avatar
    akiraohgaki committed
            text: ''
    
    akiraohgaki's avatar
    akiraohgaki committed
            informativeText: ''
    
    akiraohgaki's avatar
    akiraohgaki committed
            detailedText: ''
    
            standardButtons: StandardButton.Ok
    
    akiraohgaki's avatar
    akiraohgaki committed
            onAccepted: Qt.quit()
        }
    
        MessageDialog {
            id: errorDialog
            title: root.title
    
    akiraohgaki's avatar
    akiraohgaki committed
            icon: StandardIcon.Warning
    
    akiraohgaki's avatar
    akiraohgaki committed
            text: ''
    
    akiraohgaki's avatar
    akiraohgaki committed
            informativeText: ''
    
    akiraohgaki's avatar
    akiraohgaki committed
            detailedText: ''
    
            standardButtons: StandardButton.Ok
    
    akiraohgaki's avatar
    akiraohgaki committed
            onAccepted: Qt.quit()
    
    akiraohgaki's avatar
    akiraohgaki committed
        }
    
    
    akiraohgaki's avatar
    akiraohgaki committed
        MessageDialog {
            id: progressDialog
            title: root.title
            contentItem: Rectangle {
                implicitWidth: 400
                implicitHeight: 200
            }
        }
    
    
    akiraohgaki's avatar
    akiraohgaki committed
        Component.onCompleted: {
    
    akiraohgaki's avatar
    akiraohgaki committed
            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();
            });
    
    akiraohgaki's avatar
    akiraohgaki committed
    
    
    akiraohgaki's avatar
    akiraohgaki committed
            xdgUrlHandler.finished.connect(function(result) {
    
                progressDialog.close();
    
    akiraohgaki's avatar
    akiraohgaki committed
                result = JSON.parse(result);
    
                infoDialog.text = primaryMessages[result.status];
                infoDialog.informativeText = metadata.filename;
                infoDialog.detailedText = result.message;
                infoDialog.open();
            });
    
    akiraohgaki's avatar
    akiraohgaki committed
    
    
            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();
    
    akiraohgaki's avatar
    akiraohgaki committed
            });
    
    
            xdgUrlHandler.downloadProgress.connect(function(received, total) {
                console.log([received, total]);
            });
    
    
    akiraohgaki's avatar
    akiraohgaki committed
            if (xdgUrlHandler.isValid()) {
    
    akiraohgaki's avatar
    akiraohgaki committed
                confirmDialog.text = 'Do you want to ' + metadata.command + '?';
                confirmDialog.informativeText = metadata.filename;
                confirmDialog.detailedText = 'URL: ' + metadata.url + '\n\n'
                        + 'File: ' + metadata.filename + '\n\n'
    
    akiraohgaki's avatar
    akiraohgaki committed
                        + 'Type: ' + metadata.type;
    
    akiraohgaki's avatar
    akiraohgaki committed
                confirmDialog.open();
            }
            else {
    
    akiraohgaki's avatar
    akiraohgaki committed
                errorDialog.text = 'Validation error';
                errorDialog.detailedText = 'Invalid XDG-URL ' + xdgUrlHandler.getXdgUrl();
    
    akiraohgaki's avatar
    akiraohgaki committed
                errorDialog.open();
            }
        }
    
    akiraohgaki's avatar
    akiraohgaki committed
    }