diff options
| author | Tomas Touceda <chiiph@leap.se> | 2013-04-09 10:27:42 -0300 | 
|---|---|---|
| committer | kali <kali@leap.se> | 2013-04-10 22:05:07 +0900 | 
| commit | e1d8032f4a0c4e8e8d46c017af3ffb91ea98946c (patch) | |
| tree | f3737b900b77f041038ee5e4dcd84d00d6b02511 /src | |
| parent | 3dc9110df56c2919acacb0622915823bfde51d5f (diff) | |
Display a simple message when updates are available
Diffstat (limited to 'src')
| -rw-r--r-- | src/leap/gui/mainwindow.py | 65 | ||||
| -rw-r--r-- | src/leap/gui/ui/mainwindow.ui | 119 | 
2 files changed, 159 insertions, 25 deletions
| diff --git a/src/leap/gui/mainwindow.py b/src/leap/gui/mainwindow.py index 6a73fb76..71dff1c5 100644 --- a/src/leap/gui/mainwindow.py +++ b/src/leap/gui/mainwindow.py @@ -42,6 +42,11 @@ from leap.services.eip.vpnlaunchers import (VPNLauncherException,                                              EIPNoPolkitAuthAgentAvailable)  from leap.util import __version__ as VERSION  from leap.util.checkerthread import CheckerThread +from leap.common.events import server +from leap.common.events import ( +    register, +    events_pb2 as proto, +)  from ui_mainwindow import Ui_MainWindow @@ -61,6 +66,8 @@ class MainWindow(QtGui.QMainWindow):      # Keyring      KEYRING_KEY = "leap_client" +    new_updates = QtCore.Signal(object) +      def __init__(self, standalone=False):          """          Constructor for the client main window @@ -71,6 +78,12 @@ class MainWindow(QtGui.QMainWindow):          """          QtGui.QMainWindow.__init__(self) +        server.ensure_server(port=8090) + +        register(signal=proto.UPDATER_NEW_UPDATES, +                 callback=self._new_updates_available) +        self._updates_content = "" +          self.CONNECTING_ICON = QtGui.QPixmap(":/images/conn_connecting.png")          self.CONNECTED_ICON = QtGui.QPixmap(":/images/conn_connected.png")          self.ERROR_ICON = QtGui.QPixmap(":/images/conn_error.png") @@ -196,6 +209,11 @@ class MainWindow(QtGui.QMainWindow):          self._center_window() +        self.ui.lblNewUpdates.setVisible(False) +        self.ui.btnMore.setVisible(False) +        self.ui.btnMore.clicked.connect(self._updates_details) +        self.new_updates.connect(self._react_to_new_updates) +          init_platform()          self._wizard = None @@ -228,6 +246,53 @@ class MainWindow(QtGui.QMainWindow):          self.ui.chkAutoLogin.setEnabled(enable)          self._settings.set_remember(enable) +    def _new_updates_available(self, req): +        """ +        Callback for the new updates event + +        @param req: Request type +        @type req: leap.common.events.events_pb2.SignalRequest +        """ +        self.new_updates.emit(req) + +    def _react_to_new_updates(self, req): +        """ +        SLOT +        TRIGGER: self._new_updates_available + +        Displays the new updates label and sets the updates_content +        """ +        self.moveToThread(QtCore.QCoreApplication.instance().thread()) +        self.ui.lblNewUpdates.setVisible(True) +        self.ui.btnMore.setVisible(True) +        self._updates_content = req.content + +    def _updates_details(self): +        """ +        Parses and displays the updates details +        """ +        msg = "" +        if len(self._updates_content) == 0: +            # We assume that if there is nothing in the contents, then +            # the LEAPClient bundle is what needs updating. +            msg = self.tr("The LEAPClient app is ready to update, please" +                          " restart the application.") +        else: +            files = self._updates_content.split(", ") +            files_str = "" +            for f in files: +                final_name = f.replace("/data/", "") +                final_name = final_name.replace(".thp", "") +                files_str += final_name +                files_str += "\n" +            msg = self.tr("The LEAPClient app is ready to update, please" +                          " restart the application so the following " +                          "components get updated:\n%s") % (files_str,) + +        QtGui.QMessageBox.information(self, +                                      self.tr("Updates available"), +                                      msg) +      def _finish_init(self):          self.ui.cmbProviders.addItems(self._configured_providers())          self._show_systray() diff --git a/src/leap/gui/ui/mainwindow.ui b/src/leap/gui/ui/mainwindow.ui index ca3db95c..b42ff180 100644 --- a/src/leap/gui/ui/mainwindow.ui +++ b/src/leap/gui/ui/mainwindow.ui @@ -6,7 +6,7 @@     <rect>      <x>0</x>      <y>0</y> -    <width>405</width> +    <width>415</width>      <height>579</height>     </rect>    </property> @@ -28,7 +28,20 @@    </property>    <widget class="QWidget" name="centralwidget">     <layout class="QGridLayout" name="gridLayout"> -    <item row="0" column="2"> +    <item row="15" column="2"> +     <spacer name="verticalSpacer_2"> +      <property name="orientation"> +       <enum>Qt::Vertical</enum> +      </property> +      <property name="sizeHint" stdset="0"> +       <size> +        <width>20</width> +        <height>40</height> +       </size> +      </property> +     </spacer> +    </item> +    <item row="6" column="2">       <spacer name="verticalSpacer">        <property name="orientation">         <enum>Qt::Vertical</enum> @@ -41,8 +54,8 @@        </property>       </spacer>      </item> -    <item row="1" column="0" colspan="2"> -     <spacer name="horizontalSpacer"> +    <item row="7" column="3" colspan="2"> +     <spacer name="horizontalSpacer_2">        <property name="orientation">         <enum>Qt::Horizontal</enum>        </property> @@ -54,20 +67,20 @@        </property>       </spacer>      </item> -    <item row="9" column="2"> -     <spacer name="verticalSpacer_2"> +    <item row="7" column="0" colspan="2"> +     <spacer name="horizontalSpacer">        <property name="orientation"> -       <enum>Qt::Vertical</enum> +       <enum>Qt::Horizontal</enum>        </property>        <property name="sizeHint" stdset="0">         <size> -        <width>20</width> -        <height>40</height> +        <width>40</width> +        <height>20</height>         </size>        </property>       </spacer>      </item> -    <item row="2" column="0" colspan="5"> +    <item row="8" column="0" colspan="5">       <widget class="QStackedWidget" name="stackedWidget">        <property name="currentIndex">         <number>1</number> @@ -290,20 +303,7 @@        </widget>       </widget>      </item> -    <item row="1" column="3" colspan="2"> -     <spacer name="horizontalSpacer_2"> -      <property name="orientation"> -       <enum>Qt::Horizontal</enum> -      </property> -      <property name="sizeHint" stdset="0"> -       <size> -        <width>40</width> -        <height>20</height> -       </size> -      </property> -     </spacer> -    </item> -    <item row="1" column="2"> +    <item row="7" column="2">       <widget class="QLabel" name="label">        <property name="autoFillBackground">         <bool>false</bool> @@ -319,6 +319,75 @@        </property>       </widget>      </item> +    <item row="0" column="0" colspan="5"> +     <layout class="QGridLayout" name="gridLayout_4"> +      <item row="2" column="0"> +       <spacer name="horizontalSpacer_8"> +        <property name="orientation"> +         <enum>Qt::Horizontal</enum> +        </property> +        <property name="sizeHint" stdset="0"> +         <size> +          <width>40</width> +          <height>20</height> +         </size> +        </property> +       </spacer> +      </item> +      <item row="1" column="1"> +       <spacer name="horizontalSpacer_7"> +        <property name="orientation"> +         <enum>Qt::Horizontal</enum> +        </property> +        <property name="sizeHint" stdset="0"> +         <size> +          <width>40</width> +          <height>0</height> +         </size> +        </property> +       </spacer> +      </item> +      <item row="2" column="1"> +       <widget class="QLabel" name="lblNewUpdates"> +        <property name="text"> +         <string>There are new updates available, please restart.</string> +        </property> +        <property name="alignment"> +         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +        </property> +       </widget> +      </item> +      <item row="2" column="2"> +       <widget class="QPushButton" name="btnMore"> +        <property name="sizePolicy"> +         <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> +          <horstretch>0</horstretch> +          <verstretch>0</verstretch> +         </sizepolicy> +        </property> +        <property name="text"> +         <string>More...</string> +        </property> +        <property name="flat"> +         <bool>true</bool> +        </property> +       </widget> +      </item> +      <item row="2" column="3"> +       <spacer name="horizontalSpacer_9"> +        <property name="orientation"> +         <enum>Qt::Horizontal</enum> +        </property> +        <property name="sizeHint" stdset="0"> +         <size> +          <width>40</width> +          <height>20</height> +         </size> +        </property> +       </spacer> +      </item> +     </layout> +    </item>     </layout>    </widget>    <widget class="QMenuBar" name="menubar"> @@ -326,7 +395,7 @@      <rect>       <x>0</x>       <y>0</y> -     <width>405</width> +     <width>415</width>       <height>25</height>      </rect>     </property> | 
