summaryrefslogtreecommitdiff
path: root/src/leap/gui/firstrun/last.py
blob: 6a01ba34cc1a2b4208cf4dd789cb05f06fb88a61 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
"""
Last Page, used in First Run Wizard
"""
import logging

from PyQt4 import QtGui

from leap.util.coroutines import coroutine
from leap.gui.constants import APP_LOGO, APP_WATERMARK

logger = logging.getLogger(__name__)


class LastPage(QtGui.QWizardPage):
    def __init__(self, parent=None):
        super(LastPage, self).__init__(parent)

        self.setTitle(self.tr(
            "Connecting to Encrypted Internet Proxy service..."))

        self.setPixmap(
            QtGui.QWizard.WatermarkPixmap,
            QtGui.QPixmap(APP_WATERMARK))

        self.setPixmap(
            QtGui.QWizard.LogoPixmap,
            QtGui.QPixmap(APP_LOGO))

        self.label = QtGui.QLabel()
        self.label.setWordWrap(True)

        self.wizard_done = False

        # XXX REFACTOR to a Validating Page...
        self.status_line_1 = QtGui.QLabel()
        self.status_line_2 = QtGui.QLabel()
        self.status_line_3 = QtGui.QLabel()
        self.status_line_4 = QtGui.QLabel()
        self.status_line_5 = QtGui.QLabel()

        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.label)

        # make loop
        layout.addWidget(self.status_line_1)
        layout.addWidget(self.status_line_2)
        layout.addWidget(self.status_line_3)
        layout.addWidget(self.status_line_4)
        layout.addWidget(self.status_line_5)

        self.setLayout(layout)

    def isComplete(self):
        return self.wizard_done

    def set_status_line(self, line, status):
        statusline = getattr(self, 'status_line_%s' % line)
        if statusline:
            statusline.setText(status)

    def set_finished_status(self):
        self.setTitle(self.tr('You are now using an encrypted connection!'))
        finishText = self.wizard().buttonText(
            QtGui.QWizard.FinishButton)
        finishText = finishText.replace('&', '')
        self.label.setText(self.tr(
            "Click '<i>%s</i>' to end the wizard and "
            "save your settings." % finishText))
        self.wizard_done = True
        self.completeChanged.emit()

    @coroutine
    def eip_status_handler(self):
        # XXX this can be changed to use
        # signals. See progress.py
        logger.debug('logging status in last page')
        self.validation_done = False
        status_count = 1
        try:
            while True:
                status = (yield)
                status_count += 1
                # XXX add to line...
                logger.debug('status --> %s', status)
                self.set_status_line(status_count, status)
                if status == "connected":
                    self.set_finished_status()
                    self.completeChanged.emit()
                    break
                self.completeChanged.emit()
        except GeneratorExit:
            pass
        except StopIteration:
            pass

    def initializePage(self):
        super(LastPage, self).initializePage()
        wizard = self.wizard()
        wizard.button(QtGui.QWizard.FinishButton).setDisabled(True)

        handler = self.eip_status_handler()

        # get statuses done in prev page
        for st in wizard.openvpn_status:
            self.send_status(handler.send, st)

        # bind signal for events yet to come
        eip_statuschange_signal = wizard.eip_statuschange_signal
        if eip_statuschange_signal:
            eip_statuschange_signal.connect(
                lambda status: self.send_status(
                    handler.send, status))
        self.completeChanged.emit()

    def send_status(self, cb, status):
        try:
            cb(status)
        except StopIteration:
            pass