Skip to content
Snippets Groups Projects
VPNState.qml 7 KiB
Newer Older
  • Learn to ignore specific revisions
  • Kali Kaneko's avatar
    Kali Kaneko committed
    import QtQuick 2.0
    import QtQuick.Controls 2.12
    
    import "../themes/themes.js" as Theme
    
    StateGroup {
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        property var initializing: "initializing"
        property var off: "off"
        property var on: "on"
        property var starting: "starting"
        property var stopping: "stopping"
        property var failed: "failed"
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    
    
        property bool startingUI: false
    
        state: ctx ? ctx.status : off
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    
        states: [
            State {
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                name: initializing
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            },
            State {
    
                when: ctx != undefined && ctx.status == "off" && startingUI == true
    
                PropertyChanges {
                    target: connectionState
                    text: qsTr("Connecting")
                }
                PropertyChanges {
                    target: statusBoxBackground
                    border.color: Theme.accentConnecting
                }
                PropertyChanges {
                    target: connectionImage
    
                    source: "../resources/ravens.gif"
    
                    anchors.horizontalCenter: parent.horizontalCenter
                }
                PropertyChanges {
                    target: toggleVPN
                    enabled: false
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                    // XXX this is a fake cancel, won't do anything at this point. We need
                    // to queue this action for when the openvpn process becomes available.
                    text: ("Cancel")
    
                }
                PropertyChanges {
                    target: systray
                    tooltip: toHuman("connecting")
                    icon.source: icons["wait"]
                }
                PropertyChanges {
                    target: systray.statusItem
                    text: toHuman("connecting")
                }
            },
            State {
                name: "off"
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                PropertyChanges {
                    target: connectionState
    
                    text: qsTr("Unsecured\nConnection")
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                }
                PropertyChanges {
                    target: statusBoxBackground
                    border.color: Theme.accentOff
                }
                PropertyChanges {
                    target: connectionImage
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                    source: "../resources/icon-noshield.svg"
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                }
                PropertyChanges {
                    target: toggleVPN
    
                    enabled: true
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                    text: qsTr("Turn on")
                }
                PropertyChanges {
                    target: systray
                    icon.source: icons["off"]
                }
                PropertyChanges {
                    target: systray.statusItem
                    text: toHuman("off")
                }
                StateChangeScript {
    
                    script: {
                        console.debug("status off")
                    }
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                }
            },
            State {
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                name: on
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                PropertyChanges {
                    target: connectionState
    
                    text: qsTr("Secured\nConnection")
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                }
                PropertyChanges {
                    target: statusBoxBackground
                    border.color: Theme.accentOn
                }
                PropertyChanges {
                    target: connectionImage
                    source: "../resources/riseup-icon.svg"
                }
                PropertyChanges {
                    target: toggleVPN
    
                    enabled: true
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                    text: qsTr("Turn off")
                }
                PropertyChanges {
                    target: systray
                    tooltip: toHuman("on")
                    icon.source: icons["on"]
                }
                PropertyChanges {
                    target: systray.statusItem
                    text: toHuman("on")
                }
                StateChangeScript {
    
                    script: {
                        vpn.startingUI = false
                    }
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                }
            },
            State {
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                name: starting
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                PropertyChanges {
                    target: connectionState
                    text: qsTr("Connecting")
                }
                PropertyChanges {
                    target: statusBoxBackground
                    border.color: Theme.accentConnecting
                }
                PropertyChanges {
                    target: connectionImage
    
                    source: "../resources/ravens.gif"
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                    anchors.horizontalCenter: parent.horizontalCenter
                }
                PropertyChanges {
                    target: toggleVPN
    
                    enabled: true
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                    text: qsTr("Cancel")
                }
                PropertyChanges {
                    target: systray
                    tooltip: toHuman("connecting")
                    icon.source: icons["wait"]
                }
                PropertyChanges {
                    target: systray.statusItem
                    text: toHuman("connecting")
                }
                StateChangeScript {
    
                    script: {
                        vpn.startingUI = false
                    }
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                }
            },
            State {
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                name: stopping
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                /*
                this transition is bad. let's just remove the status
                switch...
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                PropertyChanges {
                    target: connectionState
                    text: "Switching\nOff"
                }
                PropertyChanges {
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                    target: connectionImage
    
                    source: "../resources/ravens.svg"
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                    anchors.horizontalCenter: parent.horizontalCenter
                }
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                */
                PropertyChanges {
                    target: statusBoxBackground
                    border.color: Theme.accentConnecting
                }
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                PropertyChanges {
                    target: systray
                    tooltip: toHuman("stopping")
                    icon.source: icons["wait"]
                }
                PropertyChanges {
                    target: systray.statusItem
                    text: toHuman("stopping")
                }
            },
            State {
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                name: failed
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            }
        ]
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        transitions: [
            Transition {
                to: on
                ColorAnimation {
                    target: statusBoxBackground
                    duration: 500
                }
            },
            Transition {
                to: off
                ColorAnimation {
                    target: statusBoxBackground
                    duration: 500
                }
            },
            Transition {
                to: starting
                ColorAnimation {
                    target: statusBoxBackground
                    duration: 500
                }
            },
            Transition {
                to: stopping
                ColorAnimation {
                    target: statusBoxBackground
                    duration: 500
                }
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            }
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        ]
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        function toHuman(st) {
            switch (st) {
            case "off":
                //: %1 -> application name
                return ctx ? qsTr("%1 off").arg(ctx.appName) : qsTr("off")
            case "on":
                //: %1 -> application name
                return qsTr("%1 on").arg(ctx.appName)
            case "connecting":
                //: %1 -> application name
                return qsTr("Connecting to %1").arg(ctx.appName)
            case "stopping":
                //: %1 -> application name
                return qsTr("Stopping %1").arg(ctx.appName)
            case "failed":
                //: %1 -> application name
                return qsTr("%1 blocking internet").arg(
                            ctx.appName) // TODO failed is not handled yet
            }
        }
    }