From 0d662c174ff0b8c09213b9ecf8153dd283ccb91a Mon Sep 17 00:00:00 2001 From: Ivan Alejandro Date: Wed, 4 Nov 2015 15:00:11 -0300 Subject: [feat] improve msg and add margin above box - Related: #7552 --- src/leap/bitmask/gui/ui/mail_status.ui | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/ui/mail_status.ui b/src/leap/bitmask/gui/ui/mail_status.ui index 8e8f1848..3f103ef6 100644 --- a/src/leap/bitmask/gui/ui/mail_status.ui +++ b/src/leap/bitmask/gui/ui/mail_status.ui @@ -77,7 +77,8 @@ background-color: #e0efd8; -padding: 10px; +padding: 10px; +margin-top:5px; QFrame::NoFrame @@ -89,7 +90,7 @@ padding: 10px; 0 - Congratulations! You are ready to use Bitmask to encrypt your email. Go to <a href="https://bitmask.net/en/help/email">https://bitmask.net/en/help/email</a> for instructions on how to set up your mail client. + Bitmask is ready to encrypt your email. Go to <a href="https://bitmask.net/en/help/email">https://bitmask.net/en/help/email</a> for email application setup instructions. Qt::AutoText -- cgit v1.2.3 From e086f958dcaf417816025af6f61e6283a3bf7ebf Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Thu, 5 Nov 2015 16:50:12 -0400 Subject: [bug] fix set_soledad_invalid_auth_token event cb signature --- src/leap/bitmask/gui/mail_status.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/mail_status.py b/src/leap/bitmask/gui/mail_status.py index 8b4329d7..f7957c95 100644 --- a/src/leap/bitmask/gui/mail_status.py +++ b/src/leap/bitmask/gui/mail_status.py @@ -186,7 +186,7 @@ class MailStatusWidget(QtGui.QWidget): msg = self.tr("There was an unexpected problem with Soledad.") self._set_mail_status(msg, ready=-1) - def set_soledad_invalid_auth_token(self, event, content): + def set_soledad_invalid_auth_token(self, event, content=None): """ This method is called when the auth token is invalid -- cgit v1.2.3 From 077a36d20f697865cb334dd809ad9bd201adcb10 Mon Sep 17 00:00:00 2001 From: kwadronaut Date: Sat, 7 Nov 2015 17:47:27 +0100 Subject: solved transifex issues, language https://www.transifex.com/otf/bitmask/translate/#ar/$/31977726 https://www.transifex.com/otf/bitmask/translate/#nl/$/32117870 https://www.transifex.com/otf/bitmask/translate/#ar/$/22113277 https://www.transifex.com/otf/bitmask/translate/#nl/$/22113279 --- src/leap/bitmask/gui/eip_status.py | 2 +- src/leap/bitmask/gui/logwindow.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/eip_status.py b/src/leap/bitmask/gui/eip_status.py index 64a408c4..470ef88a 100644 --- a/src/leap/bitmask/gui/eip_status.py +++ b/src/leap/bitmask/gui/eip_status.py @@ -733,7 +733,7 @@ class EIPStatusWidget(QtGui.QWidget): self.set_eip_status( # XXX this should change to polkit-kde where # applicable. - self.tr("We could not find any authentication agent in your " + self.tr("We could not find any authentication agent on your " "system.
Make sure you have " "polkit-gnome-authentication-agent-1 running and " "try again."), diff --git a/src/leap/bitmask/gui/logwindow.py b/src/leap/bitmask/gui/logwindow.py index 718269c9..5d8c99fc 100644 --- a/src/leap/bitmask/gui/logwindow.py +++ b/src/leap/bitmask/gui/logwindow.py @@ -173,7 +173,7 @@ class LoggerWindow(QtGui.QDialog): :type sending: bool """ if sending: - self.ui.btnPastebin.setText(self.tr("Sending to pastebin...")) + self.ui.btnPastebin.setText(self.tr("Sending to Pastebin.com…")) self.ui.btnPastebin.setEnabled(False) else: self.ui.btnPastebin.setText(self.tr("Send to Pastebin.com")) @@ -193,7 +193,7 @@ class LoggerWindow(QtGui.QDialog): # We save the dialog in an instance member to avoid dialog being # deleted right after we exit this method self._msgBox = msgBox = QtGui.QMessageBox( - QtGui.QMessageBox.Information, self.tr("Pastebin OK"), msg) + QtGui.QMessageBox.Information, self.tr("Pastebin is OK"), msg) msgBox.setWindowModality(QtCore.Qt.NonModal) msgBox.show() -- cgit v1.2.3 From fca2246011b8c2402977fde93291d46a9a3438fb Mon Sep 17 00:00:00 2001 From: Ivan Alejandro Date: Mon, 9 Nov 2015 13:02:45 -0300 Subject: [bug] open email help link on browser - Resolves: #7585 --- src/leap/bitmask/gui/ui/mail_status.ui | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/ui/mail_status.ui b/src/leap/bitmask/gui/ui/mail_status.ui index 3f103ef6..89e1843f 100644 --- a/src/leap/bitmask/gui/ui/mail_status.ui +++ b/src/leap/bitmask/gui/ui/mail_status.ui @@ -110,6 +110,9 @@ margin-top:5px; -1 + + true + -- cgit v1.2.3 From b6db2310f7595bdd6b93a2cab5680abbe5ce6599 Mon Sep 17 00:00:00 2001 From: Ivan Alejandro Date: Tue, 10 Nov 2015 14:18:49 -0300 Subject: [i18n] do not translate https label text --- src/leap/bitmask/gui/ui/wizard.ui | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/ui/wizard.ui b/src/leap/bitmask/gui/ui/wizard.ui index b125577e..37226d13 100644 --- a/src/leap/bitmask/gui/ui/wizard.ui +++ b/src/leap/bitmask/gui/ui/wizard.ui @@ -316,7 +316,7 @@ - https:// + https:// Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -339,7 +339,7 @@ - https:// + https:// Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- cgit v1.2.3 From 8d3309701af51df3046aa0df10545dfa35a64ef7 Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Mon, 30 Nov 2015 12:15:09 -0400 Subject: [feat] multi-user events. Adapt to users emitting the userid/uuid too. - Resolves: #7656 - Releases: 0.10.0 --- src/leap/bitmask/gui/mail_status.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/mail_status.py b/src/leap/bitmask/gui/mail_status.py index f7957c95..419a85c0 100644 --- a/src/leap/bitmask/gui/mail_status.py +++ b/src/leap/bitmask/gui/mail_status.py @@ -233,12 +233,15 @@ class MailStatusWidget(QtGui.QWidget): self._action_mail_status.setText(tray_status) self._update_systray_tooltip() - def _mail_handle_soledad_events(self, event, content): + def _mail_handle_soledad_events(self, event, user_data, content=""): """ Callback for handling events that are emitted from Soledad :param event: The event that triggered the callback. :type event: str + :param user_id: The user_data of the soledad user. Ignored right now, + since we're only contemplating single-user in soledad. + :type user_id: dict :param content: The content of the event. :type content: dict """ @@ -346,7 +349,7 @@ class MailStatusWidget(QtGui.QWidget): logger.warning("don't know to to handle %s" % (event,)) self._set_mail_status(ext_status, ready=1) - def _mail_handle_smtp_events(self, event): + def _mail_handle_smtp_events(self, event, content=""): """ Callback for the SMTP events @@ -380,12 +383,14 @@ class MailStatusWidget(QtGui.QWidget): # ----- XXX deprecate (move to mail conductor) - def _mail_handle_imap_events(self, event, content): + def _mail_handle_imap_events(self, event, uuid, content=""): """ Callback for the IMAP events :param event: The event that triggered the callback. :type event: str + :param uuid: The UUID for the user. Ignored right now. + :type uuid: str :param content: The content of the event. :type content: list """ -- cgit v1.2.3 From 98384361a7c49ad4e0ff0127fd923a8b72cc910a Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Tue, 8 Dec 2015 21:04:11 -0400 Subject: [feat] adapt to use cred-based authentication for imap This includes getting the token for the imap authentication, and displaying it on the help window. - Resolves: #4469 - Releases: 0.10.0 --- src/leap/bitmask/gui/mainwindow.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py index a8a4e41d..189a6295 100644 --- a/src/leap/bitmask/gui/mainwindow.py +++ b/src/leap/bitmask/gui/mainwindow.py @@ -407,6 +407,10 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): sig.soledad_invalid_auth_token.connect( self._mail_status.set_soledad_invalid_auth_token) + self._service_tokens = {} + sig.soledad_got_service_token.connect( + self._set_service_tokens) + # TODO: connect this with something # sig.soledad_cancelled_bootstrap.connect() @@ -1033,6 +1037,13 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): msg = msg.format(ver=VERSION, ver_hash=VERSION_HASH[:10], greet=greet) QtGui.QMessageBox.about(self, title, msg) + def _set_service_tokens(self, data): + """ + Set the received service token. + """ + service, token = data + self._service_tokens[service] = token + def _help(self): """ TRIGGERS: @@ -1063,7 +1074,12 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): manual_imap = self.tr("IMAP: localhost, port {0}".format(IMAP_PORT)) manual_smtp = self.tr("SMTP: localhost, port {0}".format(smtp_port)) manual_username = self.tr("Username: your full email address") - manual_password = self.tr("Password: any non-empty text") + + # TODO this should be a widget that allows to be copied to the + # clipboard. + imap_token = (self._service_tokens.get('imap', None) + or "??? (log in to unlock)") + manual_password = self.tr("Password: ") + "%s" % (imap_token, ) msg = help_url + self.tr( "

{0}

" -- cgit v1.2.3 From 7b80dd1fca9828331f3327c418913539a3a303c0 Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Wed, 16 Dec 2015 15:33:25 -0400 Subject: [feat] adapt to use cred-based authentication for smtp --- src/leap/bitmask/gui/mainwindow.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py index 189a6295..759b454f 100644 --- a/src/leap/bitmask/gui/mainwindow.py +++ b/src/leap/bitmask/gui/mainwindow.py @@ -1075,11 +1075,14 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): manual_smtp = self.tr("SMTP: localhost, port {0}".format(smtp_port)) manual_username = self.tr("Username: your full email address") - # TODO this should be a widget that allows to be copied to the - # clipboard. - imap_token = (self._service_tokens.get('imap', None) - or "??? (log in to unlock)") - manual_password = self.tr("Password: ") + "%s" % (imap_token, ) + # FIXME on i3, this doens't allow to mouse-select. + # Switch to a dialog in which we can set the QLabel + imap_token = (self._service_tokens.get('imap', None) or + "??? (log in to unlock)") + smtp_token = (self._service_tokens.get('smtp', None) or + "??? (log in to unlock)") + imap_password = self.tr("IMAP Password:") + " %s" % (imap_token,) + smtp_password = self.tr("SMTP Password:") + " %s" % (smtp_token,) msg = help_url + self.tr( "

{0}

" @@ -1090,9 +1093,10 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): "
  •  {4}
  • " "
  •  {5}
  • " "
  •  {6}
  • " + "
  •  {7}
  • " "

    ").format(email_quick_reference, thunderbird_text, manual_text, manual_imap, manual_smtp, - manual_username, manual_password) + manual_username, imap_password, smtp_password) QtGui.QMessageBox.about(self, self.tr("Bitmask Help"), msg) def _needs_update(self): -- cgit v1.2.3 From 8e17fb43b4cbda9ee7b386d084e01fc99345f060 Mon Sep 17 00:00:00 2001 From: Ruben Pollan Date: Mon, 21 Dec 2015 15:48:00 +0100 Subject: [feat] use fingerprint instead of key_id to address keys --- src/leap/bitmask/gui/advanced_key_management.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/advanced_key_management.py b/src/leap/bitmask/gui/advanced_key_management.py index 2e315d18..bc496a57 100644 --- a/src/leap/bitmask/gui/advanced_key_management.py +++ b/src/leap/bitmask/gui/advanced_key_management.py @@ -94,6 +94,7 @@ class AdvancedKeyManagement(QtGui.QDialog): """ Set the current user's key details into the gui. """ + # XXX: We should avoid the key-id self.ui.leKeyID.setText(details[0]) self.ui.leFingerprint.setText(details[1]) @@ -246,7 +247,7 @@ class AdvancedKeyManagement(QtGui.QDialog): row = keys_table.rowCount() keys_table.insertRow(row) keys_table.setItem(row, 0, QtGui.QTableWidgetItem(key.address)) - keys_table.setItem(row, 1, QtGui.QTableWidgetItem(key.key_id)) + keys_table.setItem(row, 1, QtGui.QTableWidgetItem(key.fingerprint)) def _backend_connect(self): """ -- cgit v1.2.3 From f9cb960dea642ec2e9cced1ab4712577cc0f3469 Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Wed, 23 Mar 2016 19:30:54 -0400 Subject: [feature] add QtWebView to render pixelated mua --- src/leap/bitmask/gui/mainwindow.py | 8 ++++++++ src/leap/bitmask/gui/qt_browser.py | 13 +++++++++++++ src/leap/bitmask/gui/ui/mainwindow.ui | 6 ++++++ 3 files changed, 27 insertions(+) create mode 100644 src/leap/bitmask/gui/qt_browser.py (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py index 759b454f..1f497d2d 100644 --- a/src/leap/bitmask/gui/mainwindow.py +++ b/src/leap/bitmask/gui/mainwindow.py @@ -60,6 +60,8 @@ from leap.bitmask.util.keyring_helpers import has_keyring from leap.common.events import register from leap.common.events import catalog +from .qt_browser import PixelatedWindow + from leap.mail.imap.service.imap import IMAP_PORT from ui_mainwindow import Ui_MainWindow @@ -218,6 +220,8 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): self._backend_connect() self.ui.action_preferences.triggered.connect(self._show_preferences) + self.ui.action_pixelated_mail.triggered.connect( + self._show_pixelated_browser) self.ui.action_about_leap.triggered.connect(self._about) self.ui.action_quit.triggered.connect(self.quit) self.ui.action_wizard.triggered.connect(self._show_wizard) @@ -568,6 +572,10 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): pref_win = PreferencesWindow(self, account, self.app) pref_win.show() + def _show_pixelated_browser(self): + win = PixelatedWindow(self) + win.show() + def _update_eip_enabled_status(self, account=None, services=None): """ TRIGGER: diff --git a/src/leap/bitmask/gui/qt_browser.py b/src/leap/bitmask/gui/qt_browser.py new file mode 100644 index 00000000..4bd947cb --- /dev/null +++ b/src/leap/bitmask/gui/qt_browser.py @@ -0,0 +1,13 @@ +from PySide import QtCore, QtWebKit, QtGui + +PIXELATED_URI = 'http://localhost:9090' + + +class PixelatedWindow(QtGui.QDialog): + + def __init__(self, parent): + QtGui.QDialog.__init__(self, parent) + self.web = QtWebKit.QWebView(self) + self.web.load(QtCore.QUrl(PIXELATED_URI)) + self.setWindowTitle('Bitmask/Pixelated WebMail') + self.web.show() diff --git a/src/leap/bitmask/gui/ui/mainwindow.ui b/src/leap/bitmask/gui/ui/mainwindow.ui index b1d68c4a..976c0c0a 100644 --- a/src/leap/bitmask/gui/ui/mainwindow.ui +++ b/src/leap/bitmask/gui/ui/mainwindow.ui @@ -315,6 +315,7 @@
    + @@ -370,6 +371,11 @@ Create a new account...
    + + + Bitmask Webmail + + false -- cgit v1.2.3 From 106d202012f8f052a3cabe044d7287d2283655fc Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Thu, 24 Mar 2016 10:04:38 -0400 Subject: [feature] hide browser menu entry if pixelated is disabled --- src/leap/bitmask/gui/mainwindow.py | 4 ++++ src/leap/bitmask/gui/qt_browser.py | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py index 1f497d2d..839aae87 100644 --- a/src/leap/bitmask/gui/mainwindow.py +++ b/src/leap/bitmask/gui/mainwindow.py @@ -222,6 +222,10 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): self.ui.action_preferences.triggered.connect(self._show_preferences) self.ui.action_pixelated_mail.triggered.connect( self._show_pixelated_browser) + + pixelated_enabled = self._settings.get_pixelmail_enabled() + self.ui.action_pixelated_mail.setVisible(pixelated_enabled) + self.ui.action_about_leap.triggered.connect(self._about) self.ui.action_quit.triggered.connect(self.quit) self.ui.action_wizard.triggered.connect(self._show_wizard) diff --git a/src/leap/bitmask/gui/qt_browser.py b/src/leap/bitmask/gui/qt_browser.py index 4bd947cb..e480b363 100644 --- a/src/leap/bitmask/gui/qt_browser.py +++ b/src/leap/bitmask/gui/qt_browser.py @@ -1,3 +1,23 @@ +# -*- coding: utf-8 -*- +# qt_browser.py +# Copyright (C) 2016 LEAP +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +""" +QtWebKit-based browser to display Pixelated User Agent +""" + from PySide import QtCore, QtWebKit, QtGui PIXELATED_URI = 'http://localhost:9090' -- cgit v1.2.3 From 3340e1a898bacdd05fb6e6bf8d37596f7aff81a2 Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Thu, 7 Apr 2016 09:56:36 -0400 Subject: [feat] use same token for imap/smtp authentication This greatly simplifies the handling of the password in the thunderbird extension. - Related: #6041 --- src/leap/bitmask/gui/mainwindow.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py index 839aae87..ace3f863 100644 --- a/src/leap/bitmask/gui/mainwindow.py +++ b/src/leap/bitmask/gui/mainwindow.py @@ -1089,12 +1089,11 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): # FIXME on i3, this doens't allow to mouse-select. # Switch to a dialog in which we can set the QLabel - imap_token = (self._service_tokens.get('imap', None) or - "??? (log in to unlock)") - smtp_token = (self._service_tokens.get('smtp', None) or - "??? (log in to unlock)") - imap_password = self.tr("IMAP Password:") + " %s" % (imap_token,) - smtp_password = self.tr("SMTP Password:") + " %s" % (smtp_token,) + mail_auth_token = ( + self._service_tokens.get('mail_auth', None) or + "??? (log in to unlock)") + mail_password = self.tr("IMAP/SMTP Password:") + " %s" % ( + mail_auth_token,) msg = help_url + self.tr( "

    {0}

    " @@ -1105,10 +1104,9 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): "
  •  {4}
  • " "
  •  {5}
  • " "
  •  {6}
  • " - "
  •  {7}
  • " "

    ").format(email_quick_reference, thunderbird_text, manual_text, manual_imap, manual_smtp, - manual_username, imap_password, smtp_password) + manual_username, mail_password) QtGui.QMessageBox.about(self, self.tr("Bitmask Help"), msg) def _needs_update(self): -- cgit v1.2.3 From 130f1a8753bfe63f5575fc2011a15af9a0752170 Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Thu, 7 Apr 2016 12:18:24 -0400 Subject: [bug] allow resizing browser window --- src/leap/bitmask/gui/mainwindow.py | 1 + src/leap/bitmask/gui/qt_browser.py | 14 ++++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py index ace3f863..168de8ed 100644 --- a/src/leap/bitmask/gui/mainwindow.py +++ b/src/leap/bitmask/gui/mainwindow.py @@ -579,6 +579,7 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): def _show_pixelated_browser(self): win = PixelatedWindow(self) win.show() + win.load_app() def _update_eip_enabled_status(self, account=None, services=None): """ diff --git a/src/leap/bitmask/gui/qt_browser.py b/src/leap/bitmask/gui/qt_browser.py index e480b363..b75bfb64 100644 --- a/src/leap/bitmask/gui/qt_browser.py +++ b/src/leap/bitmask/gui/qt_browser.py @@ -26,8 +26,14 @@ PIXELATED_URI = 'http://localhost:9090' class PixelatedWindow(QtGui.QDialog): def __init__(self, parent): - QtGui.QDialog.__init__(self, parent) - self.web = QtWebKit.QWebView(self) - self.web.load(QtCore.QUrl(PIXELATED_URI)) + super(PixelatedWindow, self).__init__(parent) + self.view = QtWebKit.QWebView(self) + + layout = QtGui.QGridLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.addWidget(self.view) + self.setLayout(layout) self.setWindowTitle('Bitmask/Pixelated WebMail') - self.web.show() + + def load_app(self): + self.view.load(QtCore.QUrl(PIXELATED_URI)) -- cgit v1.2.3 From b91263cba4078a7c4d19de0c31060cb7564ae410 Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Sun, 17 Apr 2016 08:52:26 -0700 Subject: [bug] enable first page in wizard - Resolves: #8041 - Releases: 0.9.2 --- src/leap/bitmask/gui/mainwindow.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py index 168de8ed..20909038 100644 --- a/src/leap/bitmask/gui/mainwindow.py +++ b/src/leap/bitmask/gui/mainwindow.py @@ -448,6 +448,9 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): # Refer to http://www.themacaque.com/?p=1067 for funny details. self._wizard.show() if IS_MAC: + # XXX hack. For some reason, there's a signal that doesn't arrive + # on time, so that the next button is disabled. See #8041 + self._wizard.page(self._wizard.INTRO_PAGE).set_completed() self._wizard.raise_() self._settings.set_skip_first_run(True) -- cgit v1.2.3 From 60aed8f499f6581e6568c6f66090da1aa8ac2fe0 Mon Sep 17 00:00:00 2001 From: Paixu Aabuizia Date: Wed, 3 Feb 2016 21:40:30 +0100 Subject: [bug] vindows initializer does not return state causing the application to always quit - log the init_platform failure to the critical log - return True/False in initializer - remove implementation to install driver and display informative message instead --- src/leap/bitmask/gui/mainwindow.py | 1 + 1 file changed, 1 insertion(+) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py index 20909038..cde44f7b 100644 --- a/src/leap/bitmask/gui/mainwindow.py +++ b/src/leap/bitmask/gui/mainwindow.py @@ -302,6 +302,7 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): self._mail_conductor.connect_mail_signals(self._mail_status) if not init_platform(): + logger.critical('init_platform failed, quitting application.') self.quit() return -- cgit v1.2.3 From 229f803235ae9b9a71313d11071c7a0fbea0a681 Mon Sep 17 00:00:00 2001 From: elijah Date: Mon, 18 Apr 2016 23:44:12 -0700 Subject: [feature] add email panel to preferences --- src/leap/bitmask/gui/account.py | 10 +- src/leap/bitmask/gui/app.py | 34 ++ src/leap/bitmask/gui/mainwindow.py | 32 +- src/leap/bitmask/gui/passwordwindow.py | 2 +- src/leap/bitmask/gui/preferences_account_page.py | 31 +- src/leap/bitmask/gui/preferences_email_page.py | 184 ++++++- src/leap/bitmask/gui/preferences_page.py | 50 ++ src/leap/bitmask/gui/preferences_vpn_page.py | 31 +- src/leap/bitmask/gui/preferenceswindow.py | 131 +++-- src/leap/bitmask/gui/ui/preferences.ui | 22 +- src/leap/bitmask/gui/ui/preferences_email_page.ui | 563 +++++++++++++++++++++- 11 files changed, 997 insertions(+), 93 deletions(-) create mode 100644 src/leap/bitmask/gui/preferences_page.py (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/account.py b/src/leap/bitmask/gui/account.py index 81f96389..5e43c8fe 100644 --- a/src/leap/bitmask/gui/account.py +++ b/src/leap/bitmask/gui/account.py @@ -20,7 +20,7 @@ A frontend GUI object to hold the current username and domain. from leap.bitmask.util import make_address from leap.bitmask.config.leapsettings import LeapSettings from leap.bitmask.services import EIP_SERVICE, MX_SERVICE - +from leap.bitmask._components import HAS_EIP, HAS_MAIL class Account(): @@ -42,8 +42,8 @@ class Account(): """ return self._settings.get_enabled_services(self.domain) - def is_email_enabled(self): - return MX_SERVICE in self.services() + def has_email(self): + return HAS_MAIL and MX_SERVICE in self.services() - def is_eip_enabled(self): - return EIP_SERVICE in self.services() + def has_eip(self): + return HAS_EIP and EIP_SERVICE in self.services() diff --git a/src/leap/bitmask/gui/app.py b/src/leap/bitmask/gui/app.py index 97fd0549..e3a4d7fe 100644 --- a/src/leap/bitmask/gui/app.py +++ b/src/leap/bitmask/gui/app.py @@ -20,6 +20,7 @@ and the signaler get signals from the backend. """ from PySide import QtCore, QtGui +from leap.bitmask.gui.account import Account from leap.bitmask.config.leapsettings import LeapSettings from leap.bitmask.backend.backend_proxy import BackendProxy from leap.bitmask.backend.leapsignaler import LeapSignaler @@ -44,12 +45,37 @@ class App(QtGui.QWidget): self.signaler.start() self.soledad_started = False + self.service_tokens = {} + self.login_state = None + self.providers_widget = None # periodically check if the backend is alive self._backend_checker = QtCore.QTimer(self) self._backend_checker.timeout.connect(self._check_backend_status) self._backend_checker.start(2000) + # store the service tokens for later use, once they are known. + self.signaler.soledad_got_service_token.connect( + self._set_service_tokens) + + def current_account(self): + """ + Alas, the only definitive account information is buried in the memory of + QT widgets. + + :returns: an object representing the current user account. + :rtype: Account + """ + if self.login_state is None or self.providers_widget is None: + return None + + if self.login_state.full_logged_username is not None: + username, domain = self.login_state.full_logged_username.split('@') + return Account(username, domain) + else: + domain = self.providers_widget.get_selected_provider() + return Account(None, domain) + def _check_backend_status(self): """ TRIGGERS: @@ -64,3 +90,11 @@ class App(QtGui.QWidget): self.tr("There is a problem contacting the backend, please " "restart Bitmask.")) self._backend_checker.stop() + + def _set_service_tokens(self, data): + """ + Triggered by signal soledad_got_service_token. + Saves the service tokens. + """ + service, token = data + self.service_tokens[service] = token diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py index cde44f7b..ca14e631 100644 --- a/src/leap/bitmask/gui/mainwindow.py +++ b/src/leap/bitmask/gui/mainwindow.py @@ -46,7 +46,6 @@ from leap.bitmask.gui.signaltracker import SignalTracker from leap.bitmask.gui.systray import SysTray from leap.bitmask.gui.wizard import Wizard from leap.bitmask.gui.providers import Providers -from leap.bitmask.gui.account import Account from leap.bitmask.gui.app import App from leap.bitmask.platform_init import IS_WIN, IS_MAC, IS_LINUX @@ -154,6 +153,14 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): # Provider List self._providers = Providers(self.ui.cmbProviders) + ## + ## tmphack: important state information about the application is stored + ## in widgets. Rather than rewrite the UI, for now we simulate this + ## info being stored in an application object: + ## + self.app.login_state = self._login_widget._state + self.app.providers_widget = self._providers + # Qt Signal Connections ##################################### # TODO separate logic from ui signals. @@ -416,10 +423,6 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): sig.soledad_invalid_auth_token.connect( self._mail_status.set_soledad_invalid_auth_token) - self._service_tokens = {} - sig.soledad_got_service_token.connect( - self._set_service_tokens) - # TODO: connect this with something # sig.soledad_cancelled_bootstrap.connect() @@ -569,15 +572,7 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): Display the preferences window. """ - logged_user = self._login_widget.get_logged_user() - if logged_user is not None: - user, domain = logged_user.split('@') - else: - user = None - domain = self._providers.get_selected_provider() - - account = Account(user, domain) - pref_win = PreferencesWindow(self, account, self.app) + pref_win = PreferencesWindow(self, self.app) pref_win.show() def _show_pixelated_browser(self): @@ -1054,13 +1049,6 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): msg = msg.format(ver=VERSION, ver_hash=VERSION_HASH[:10], greet=greet) QtGui.QMessageBox.about(self, title, msg) - def _set_service_tokens(self, data): - """ - Set the received service token. - """ - service, token = data - self._service_tokens[service] = token - def _help(self): """ TRIGGERS: @@ -1095,7 +1083,7 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): # FIXME on i3, this doens't allow to mouse-select. # Switch to a dialog in which we can set the QLabel mail_auth_token = ( - self._service_tokens.get('mail_auth', None) or + self.app.service_tokens.get('mail_auth', None) or "??? (log in to unlock)") mail_password = self.tr("IMAP/SMTP Password:") + " %s" % ( mail_auth_token,) diff --git a/src/leap/bitmask/gui/passwordwindow.py b/src/leap/bitmask/gui/passwordwindow.py index dedfcb10..fe70b250 100644 --- a/src/leap/bitmask/gui/passwordwindow.py +++ b/src/leap/bitmask/gui/passwordwindow.py @@ -83,7 +83,7 @@ class PasswordWindow(QtGui.QDialog, Flashable): Returns true if the current account needs to change the soledad password as well as the SRP password. """ - return self.account.is_email_enabled() + return self.account.has_email() # # MANAGE WIDGETS diff --git a/src/leap/bitmask/gui/preferences_account_page.py b/src/leap/bitmask/gui/preferences_account_page.py index da9da14d..c175c42b 100644 --- a/src/leap/bitmask/gui/preferences_account_page.py +++ b/src/leap/bitmask/gui/preferences_account_page.py @@ -22,6 +22,7 @@ from PySide import QtCore, QtGui from leap.bitmask.logs.utils import get_logger from leap.bitmask.gui import ui_preferences_account_page as ui_pref +from leap.bitmask.gui.preferences_page import PreferencesPage from leap.bitmask.gui.passwordwindow import PasswordWindow from leap.bitmask.services import get_service_display_name from leap.bitmask._components import HAS_EIP @@ -29,7 +30,7 @@ from leap.bitmask._components import HAS_EIP logger = get_logger() -class PreferencesAccountPage(QtGui.QWidget): +class PreferencesAccountPage(PreferencesPage): def __init__(self, parent, account, app): """ @@ -42,20 +43,15 @@ class PreferencesAccountPage(QtGui.QWidget): :param app: the current App object :type app: App """ - QtGui.QWidget.__init__(self, parent) + PreferencesPage.__init__(self, parent, account, app) self.ui = ui_pref.Ui_PreferencesAccountPage() self.ui.setupUi(self) - self.account = account - self.app = app - self._selected_services = set() self.ui.change_password_label.setVisible(False) self.ui.provider_services_label.setVisible(False) - self.ui.change_password_button.clicked.connect( - self._show_change_password) - app.signaler.prov_get_supported_services.connect(self._load_services) + self.setup_connections() app.backend.provider_get_supported_services(domain=account.domain) if account.username is None: @@ -64,6 +60,25 @@ class PreferencesAccountPage(QtGui.QWidget): self.ui.change_password_label.setVisible(True) self.ui.change_password_button.setEnabled(False) + def setup_connections(self): + """ + connect signals + """ + self.ui.change_password_button.clicked.connect( + self._show_change_password) + self.app.signaler.prov_get_supported_services.connect( + self._load_services) + + + def teardown_connections(self): + """ + disconnect signals + """ + self.ui.change_password_button.clicked.disconnect( + self._show_change_password) + self.app.signaler.prov_get_supported_services.disconnect( + self._load_services) + def _service_selection_changed(self, service, state): """ TRIGGERS: diff --git a/src/leap/bitmask/gui/preferences_email_page.py b/src/leap/bitmask/gui/preferences_email_page.py index 3087f343..50f244fb 100644 --- a/src/leap/bitmask/gui/preferences_email_page.py +++ b/src/leap/bitmask/gui/preferences_email_page.py @@ -16,20 +16,192 @@ """ Widget for "email" preferences """ -from PySide import QtGui +from PySide import QtCore, QtGui + +from datetime import datetime from leap.bitmask.logs.utils import get_logger from leap.bitmask.gui.ui_preferences_email_page import Ui_PreferencesEmailPage +from leap.bitmask.gui.preferences_page import PreferencesPage +from leap.mail.imap.service.imap import IMAP_PORT logger = get_logger() - -class PreferencesEmailPage(QtGui.QWidget): +class PreferencesEmailPage(PreferencesPage): def __init__(self, parent, account, app): - QtGui.QWidget.__init__(self, parent) + """ + :param parent: parent object of the PreferencesWindow. + :parent type: QWidget + + :param account: user account (user + provider or just provider) + :type account: Account + + :param app: the current App object + :type app: App + """ + PreferencesPage.__init__(self, parent, account, app) self.ui = Ui_PreferencesEmailPage() self.ui.setupUi(self) - self.account = account - self.app = app + # the only way to set the tab titles is to re-add them: + self.ui.email_tabs.addTab(self.ui.config_tab, + self.tr("Mail Client")) + self.ui.email_tabs.addTab(self.ui.my_key_tab, + self.tr("My Key")) + self.ui.email_tabs.addTab(self.ui.other_keys_tab, + self.tr("Other Keys")) + + # set mail client configuration help text + lang = QtCore.QLocale.system().name().replace('_', '-') + thunderbird_extension_url = \ + "https://addons.mozilla.org/{0}/" \ + "thunderbird/addon/bitmask/".format(lang) + self.ui.thunderbird_label.setText(self.tr( + "For Thunderbird, you can use the Bitmask extension. " + "Search for \"Bitmask\" in the add-on manager or " + "download it from addons.mozilla.org.".format( + thunderbird_extension_url))) + self.ui.mail_client_label.setText(self.tr( + "Alternatively, you can manually configure your mail client to " + "use Bitmask Email with these options:")) + + self.ui.keys_table.horizontalHeader().setResizeMode( + 0, QtGui.QHeaderView.Stretch) + + self.setup_connections() + + + def setup_connections(self): + """ + connect signals + """ + self.app.signaler.keymanager_key_details.connect(self._key_details) + self.app.signaler.keymanager_export_ok.connect( + self._keymanager_export_ok) + self.app.signaler.keymanager_export_error.connect( + self._keymanager_export_error) + self.ui.import_button.clicked.connect(self._import_keys) + self.ui.export_button.clicked.connect(self._export_keys) + + def teardown_connections(self): + """ + disconnect signals + """ + self.app.signaler.keymanager_key_details.disconnect(self._key_details) + self.app.signaler.keymanager_export_ok.disconnect( + self._keymanager_export_ok) + self.app.signaler.keymanager_export_error.disconnect( + self._keymanager_export_error) + + def showEvent(self, event): + """ + called whenever this widget is shown + """ + self.ui.keys_table.clearContents() + + if self.account.username is None: + self.ui.email_tabs.setVisible(False) + self.ui.message_label.setVisible(True) + self.ui.message_label.setText( + self.tr('You must be logged in to edit email settings.')) + else: + self.ui.import_button.setVisible(False) # hide this until working + self.ui.message_label.setVisible(False) + self.ui.email_tabs.setVisible(True) + smtp_port = 2013 + self.ui.imap_port_edit.setText(str(IMAP_PORT)) + self.ui.imap_host_edit.setText("127.0.0.1") + self.ui.smtp_port_edit.setText(str(smtp_port)) + self.ui.smtp_host_edit.setText("127.0.0.1") + self.ui.username_edit.setText(self.account.address) + self.ui.password_edit.setText( + self.app.service_tokens.get('mail_auth', '')) + + self.app.backend.keymanager_list_keys() + self.app.backend.keymanager_get_key_details( + username=self.account.address) + + def _key_details(self, details): + """ + Trigger by signal: keymanager_key_details + Set the current user's key details into the gui. + """ + self.ui.fingerprint_edit.setPlainText( + self._format_fingerprint(details["fingerprint"])) + self.ui.expiration_edit.setText(details["expiry_date"]) + self.ui.uid_edit.setText(" ".join(details["uids"])) + self.ui.public_key_edit.setPlainText(details["key_data"]) + + def _format_fingerprint(self, fingerprint): + """ + formats an openpgp fingerprint in a manner similar to what gpg + produces, wrapped to two lines. + """ + fp = fingerprint.upper() + fp_list = [fp[i:i+4] for i in range(0, len(fp), 4)] + fp_wrapped = " ".join(fp_list[0:5]) + "\n" + " ".join(fp_list[5:10]) + return fp_wrapped + + def _export_keys(self): + """ + Exports the user's key pair. + """ + file_name, filtr = QtGui.QFileDialog.getSaveFileName( + self, self.tr("Save private key file"), + filter="*.pem", + options=QtGui.QFileDialog.DontUseNativeDialog) + + if file_name: + if not file_name.endswith('.pem'): + file_name += '.pem' + self.app.backend.keymanager_export_keys( + username=self.account.address, + filename=file_name) + else: + logger.debug('Export canceled by the user.') + + def _keymanager_export_ok(self): + """ + TRIGGERS: + Signaler.keymanager_export_ok + + Notify the user that the key export went OK. + """ + QtGui.QMessageBox.information( + self, self.tr("Export Successful"), + self.tr("The key pair was exported successfully.\n" + "Please, store your private key in a safe place.")) + + def _keymanager_export_error(self): + """ + TRIGGERS: + Signaler.keymanager_export_error + + Notify the user that the key export didn't go well. + """ + QtGui.QMessageBox.critical( + self, self.tr("Input/Output error"), + self.tr("There was an error accessing the file.\n" + "Export canceled.")) + + def _import_keys(self): + """ + not yet supported + """ + + def _keymanager_keys_list(self, keys): + """ + TRIGGERS: + Signaler.keymanager_keys_list + + Load the keys given as parameter in the table. + + :param keys: the list of keys to load. + :type keys: list + """ + for key in keys: + row = self.ui.keys_table.rowCount() + self.ui.keys_table.insertRow(row) + self.ui.keys_table.setItem(row, 0, QtGui.QTableWidgetItem(key.address)) + self.ui.keys_table.setItem(row, 1, QtGui.QTableWidgetItem(key.fingerprint)) diff --git a/src/leap/bitmask/gui/preferences_page.py b/src/leap/bitmask/gui/preferences_page.py new file mode 100644 index 00000000..c75b4991 --- /dev/null +++ b/src/leap/bitmask/gui/preferences_page.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2014 LEAP +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +""" +base class for preference pages +""" + +from PySide import QtCore, QtGui + +class PreferencesPage(QtGui.QWidget): + + def __init__(self, parent, account=None, app=None): + """ + :param parent: parent object of the EIPPreferencesWindow. + :type parent: QWidget + + :param account: the currently active account + :type account: Account + + :param app: shared App instance + :type app: App + """ + QtGui.QWidget.__init__(self, parent) + self.app = app + self.account = account + + def setup_connections(self): + """ + connect signals + must be overridden by subclass + """ + + def teardown_connections(self): + """ + disconnect signals + must be overridden by subclass + """ + diff --git a/src/leap/bitmask/gui/preferences_vpn_page.py b/src/leap/bitmask/gui/preferences_vpn_page.py index 5b5c9604..fc15340f 100644 --- a/src/leap/bitmask/gui/preferences_vpn_page.py +++ b/src/leap/bitmask/gui/preferences_vpn_page.py @@ -22,9 +22,9 @@ from leap.bitmask.gui.ui_preferences_vpn_page import Ui_PreferencesVpnPage from leap.bitmask.config.leapsettings import LeapSettings from leap.bitmask.gui.flashable import Flashable +from leap.bitmask.gui.preferences_page import PreferencesPage - -class PreferencesVpnPage(QtGui.QWidget, Flashable): +class PreferencesVpnPage(PreferencesPage, Flashable): """ Page in the preferences window that shows VPN settings @@ -41,19 +41,24 @@ class PreferencesVpnPage(QtGui.QWidget, Flashable): :param app: shared App instance :type app: App """ - QtGui.QWidget.__init__(self, parent) + PreferencesPage.__init__(self, parent, account, app) self.AUTOMATIC_GATEWAY_LABEL = self.tr("Automatic") - self.account = account - self.app = app - # Load UI self.ui = Ui_PreferencesVpnPage() self.ui.setupUi(self) self.ui.flash_label.setVisible(False) self.hide_flash() - # Connections + self.setup_connections() + + # Trigger update + self.app.backend.eip_get_gateways_list(domain=self.account.domain) + + def setup_connections(self): + """ + connect signals + """ self.ui.gateways_list.clicked.connect(self._save_selected_gateway) sig = self.app.signaler sig.eip_get_gateways_list.connect(self._update_gateways_list) @@ -61,8 +66,16 @@ class PreferencesVpnPage(QtGui.QWidget, Flashable): sig.eip_uninitialized_provider.connect( self._gateways_list_uninitialized) - # Trigger update - self.app.backend.eip_get_gateways_list(domain=self.account.domain) + def teardown_connections(self): + """ + disconnect signals + """ + self.ui.gateways_list.clicked.disconnect(self._save_selected_gateway) + sig = self.app.signaler + sig.eip_get_gateways_list.disconnect(self._update_gateways_list) + sig.eip_get_gateways_list_error.disconnect(self._gateways_list_error) + sig.eip_uninitialized_provider.disconnect( + self._gateways_list_uninitialized) def _save_selected_gateway(self, index): """ diff --git a/src/leap/bitmask/gui/preferenceswindow.py b/src/leap/bitmask/gui/preferenceswindow.py index 44c4641c..1facba69 100644 --- a/src/leap/bitmask/gui/preferenceswindow.py +++ b/src/leap/bitmask/gui/preferenceswindow.py @@ -20,18 +20,15 @@ Preferences window """ from PySide import QtCore, QtGui -from leap.bitmask.services import EIP_SERVICE -from leap.bitmask._components import HAS_EIP - from leap.bitmask.logs.utils import get_logger from leap.bitmask.gui.ui_preferences import Ui_Preferences +from leap.bitmask.gui.preferences_page import PreferencesPage from leap.bitmask.gui.preferences_account_page import PreferencesAccountPage from leap.bitmask.gui.preferences_vpn_page import PreferencesVpnPage from leap.bitmask.gui.preferences_email_page import PreferencesEmailPage logger = get_logger() - class PreferencesWindow(QtGui.QDialog): """ @@ -40,39 +37,46 @@ class PreferencesWindow(QtGui.QDialog): _current_window = None # currently visible preferences window - def __init__(self, parent, account, app): + def __init__(self, parent, app): """ :param parent: parent object of the PreferencesWindow. :parent type: QWidget - :param account: the user or provider - :type account: Account - :param app: the current App object :type app: App """ QtGui.QDialog.__init__(self, parent) - self.account = account self.app = app self.ui = Ui_Preferences() self.ui.setupUi(self) - self.ui.close_button.clicked.connect(self.close) - self.ui.account_label.setText(account.address) - - self.app.service_selection_changed.connect(self._update_icons) + self._account_page = None + self._vpn_page = None + self._email_page = None self._add_icons() - self._add_pages() - self._update_icons(self.account, self.account.services()) + self._set_account(app.current_account()) + self._setup_connections() # only allow a single preferences window at a time. if PreferencesWindow._current_window is not None: PreferencesWindow._current_window.close() PreferencesWindow._current_window = self + def _set_account(self, account): + """ + Initially sets, or resets, the currently viewed account. + The account might not represent an authenticated user, but + just a domain. + """ + self.ui.account_label.setText(account.address) + self._add_pages(account) + self._update_icons(account) + self.ui.pages_widget.setCurrentIndex(0) + self.ui.nav_widget.setCurrentRow(0) + def _add_icons(self): """ Adds all the icons for the different configuration categories. @@ -114,22 +118,71 @@ class PreferencesWindow(QtGui.QDialog): email_item.setSizeHint(QtCore.QSize(98, 56)) self._email_item = email_item - self.ui.nav_widget.currentItemChanged.connect(self._change_page) - self.ui.nav_widget.setCurrentRow(0) - - def _add_pages(self): + def _add_pages(self, account): """ Adds the pages for the different configuration categories. """ - self._account_page = PreferencesAccountPage( - self, self.account, self.app) - self._vpn_page = PreferencesVpnPage(self, self.account, self.app) - self._email_page = PreferencesEmailPage(self, self.account, self.app) - + self._remove_pages() # in case different account was loaded. + + # load placeholder widgets if the page should not be loaded. + # the order of the pages is important, and must match the order + # of the nav_widget icons. + self._account_page = PreferencesAccountPage(self, account, self.app) + if account.has_eip(): + self._vpn_page = PreferencesVpnPage(self, account, self.app) + else: + self._vpn_page = PreferencesPage(self) + if account.has_email(): + self._email_page = PreferencesEmailPage(self, account, self.app) + else: + self._email_page = PreferencesPage(self) self.ui.pages_widget.addWidget(self._account_page) self.ui.pages_widget.addWidget(self._vpn_page) self.ui.pages_widget.addWidget(self._email_page) + def _remove_pages(self): + # deleteLater does not seem to cascade to items in stackLayout + # (even with QtCore.Qt.WA_DeleteOnClose attribute). + # so, here we call deleteLater() explicitly. + if self._account_page is not None: + self.ui.pages_widget.removeWidget(self._account_page) + self._account_page.teardown_connections() + self._account_page.deleteLater() + if self._vpn_page is not None: + self.ui.pages_widget.removeWidget(self._vpn_page) + self._vpn_page.teardown_connections() + self._vpn_page.deleteLater() + if self._email_page is not None: + self.ui.pages_widget.removeWidget(self._email_page) + self._email_page.teardown_connections() + self._email_page.deleteLater() + + def _setup_connections(self): + """ + setup signal connections + """ + self.ui.nav_widget.currentItemChanged.connect(self._change_page) + self.ui.close_button.clicked.connect(self.close) + self.app.service_selection_changed.connect(self._update_icons) + sig = self.app.signaler + sig.srp_auth_ok.connect(self._login_status_changed) + sig.srp_logout_ok.connect(self._login_status_changed) + sig.srp_status_logged_in.connect(self._update_account) + sig.srp_status_not_logged_in.connect(self._update_account) + + def _teardown_connections(self): + """ + clean up signal connections + """ + self.ui.nav_widget.currentItemChanged.disconnect(self._change_page) + self.ui.close_button.clicked.disconnect(self.close) + self.app.service_selection_changed.disconnect(self._update_icons) + sig = self.app.signaler + sig.srp_auth_ok.disconnect(self._login_status_changed) + sig.srp_logout_ok.disconnect(self._login_status_changed) + sig.srp_status_logged_in.disconnect(self._update_account) + sig.srp_status_not_logged_in.disconnect(self._update_account) + # # Slots # @@ -144,13 +197,8 @@ class PreferencesWindow(QtGui.QDialog): Close this dialog and destroy it. """ PreferencesWindow._current_window = None - - # deleteLater does not seem to cascade to items in stackLayout - # (even with QtCore.Qt.WA_DeleteOnClose attribute). - # so, here we call deleteLater() explicitly: - self._account_page.deleteLater() - self._vpn_page.deleteLater() - self._email_page.deleteLater() + self._teardown_connections(); + self._remove_pages(); self.deleteLater() def _change_page(self, current, previous): @@ -170,17 +218,24 @@ class PreferencesWindow(QtGui.QDialog): current = previous self.ui.pages_widget.setCurrentIndex(self.ui.nav_widget.row(current)) - def _update_icons(self, account, services): + def _update_icons(self, account): """ TRIGGERS: self.app.service_selection_changed Change which icons are visible. """ - if account != self.account: - return + self._vpn_item.setHidden(not account.has_eip()) + self._email_item.setHidden(not account.has_email()) + + def _login_status_changed(self): + """ + Triggered by signal srp_auth_ok, srp_logout_ok + """ + self.app.backend.user_get_logged_in_status() - if HAS_EIP: - self._vpn_item.setHidden(EIP_SERVICE not in services) - # self._email_item.setHidden(not MX_SERVICE in services) - # ^^ disable email for now, there is nothing there yet. + def _update_account(self): + """ + Triggered by get srp_status_logged_in, srp_status_not_logged_in + """ + self._set_account(self.app.current_account()) diff --git a/src/leap/bitmask/gui/ui/preferences.ui b/src/leap/bitmask/gui/ui/preferences.ui index 5e30ea57..51cad0a1 100644 --- a/src/leap/bitmask/gui/ui/preferences.ui +++ b/src/leap/bitmask/gui/ui/preferences.ui @@ -6,8 +6,8 @@ 0 0 - 520 - 439 + 630 + 500
    @@ -60,6 +60,24 @@ 16777215 + + background: palette(base); border: 1px solid palette(dark); border-radius: 2px; + + + QFrame::StyledPanel + + + QFrame::Plain + + + 1 + + + 0 + + + Qt::ScrollBarAlwaysOff + 32 diff --git a/src/leap/bitmask/gui/ui/preferences_email_page.ui b/src/leap/bitmask/gui/ui/preferences_email_page.ui index 7cc5bb3c..5f83426b 100644 --- a/src/leap/bitmask/gui/ui/preferences_email_page.ui +++ b/src/leap/bitmask/gui/ui/preferences_email_page.ui @@ -6,13 +6,572 @@ 0 0 - 400 - 300 + 526 + 605 Form + + + 0 + + + 0 + + + + + 2 + + + + + + + + + + Tab 1 + + + + + + Thunderbird Configuration + + + + + + thunderbird information + + + true + + + + + + + + + + + 0 + 0 + + + + Mail Client Configuration + + + + + + mail client information + + + true + + + + + + + + + + + + 0 + 0 + + + + Host + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + Port + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 100 + 16777215 + + + + + + + true + + + + + + + + 0 + 0 + + + + TLS: off + + + + + + + + 0 + 0 + + + + + 50 + 16777215 + + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + IMAP + + + + + + + Username + + + + + + + SMTP + + + + + + + + + + 0 + 0 + + + + Host + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 100 + 16777215 + + + + + + + true + + + + + + + + 0 + 0 + + + + Port + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + TLS: off + + + + + + + + 0 + 0 + + + + + 50 + 16777215 + + + + true + + + + + + + + + true + + + + + + + Password + + + + + + + true + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Tab 2 + + + + + + + + + Public Key + + + + + + + + 0 + 0 + + + + + Courier + + + + QPlainTextEdit::NoWrap + + + true + + + + + + + + 0 + 42 + + + + + 16777215 + 48 + + + + + Courier + 50 + false + + + + false + + + + + + QPlainTextEdit::NoWrap + + + true + + + + + + + + + + Expiration + + + + + + + Fingerprint + + + + + + + true + + + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + + Address + + + + + + + true + + + + + + + + + Export Private Key + + + + + + + Import Private Key + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + uid_edit + fp_label + uid_label + expiration_edit + expiration_label + fingerprint_edit + public_key_edit + pub_label + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Page + + + + + + QAbstractItemView::NoEditTriggers + + + true + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + Qt::ElideRight + + + true + + + + Email + + + + + Key ID + + + + + + + + + + + + this message should be hidden + + + +
    -- cgit v1.2.3 From 5b90ad3552025436edb40665203ab98eceaa065b Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Tue, 19 Apr 2016 12:07:09 -0400 Subject: pep8/flake8 --- src/leap/bitmask/gui/account.py | 1 + src/leap/bitmask/gui/app.py | 4 +-- src/leap/bitmask/gui/mainwindow.py | 8 +++--- src/leap/bitmask/gui/preferences_account_page.py | 1 - src/leap/bitmask/gui/preferences_email_page.py | 36 ++++++++++++------------ src/leap/bitmask/gui/preferences_page.py | 6 ++-- src/leap/bitmask/gui/preferences_vpn_page.py | 2 +- src/leap/bitmask/gui/preferenceswindow.py | 7 +++-- src/leap/bitmask/gui/statemachines.py | 5 +++- 9 files changed, 37 insertions(+), 33 deletions(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/account.py b/src/leap/bitmask/gui/account.py index 5e43c8fe..b8b9509a 100644 --- a/src/leap/bitmask/gui/account.py +++ b/src/leap/bitmask/gui/account.py @@ -22,6 +22,7 @@ from leap.bitmask.config.leapsettings import LeapSettings from leap.bitmask.services import EIP_SERVICE, MX_SERVICE from leap.bitmask._components import HAS_EIP, HAS_MAIL + class Account(): def __init__(self, username, domain): diff --git a/src/leap/bitmask/gui/app.py b/src/leap/bitmask/gui/app.py index e3a4d7fe..1011454e 100644 --- a/src/leap/bitmask/gui/app.py +++ b/src/leap/bitmask/gui/app.py @@ -60,8 +60,8 @@ class App(QtGui.QWidget): def current_account(self): """ - Alas, the only definitive account information is buried in the memory of - QT widgets. + Alas, the only definitive account information is buried in the memory + of QT widgets. :returns: an object representing the current user account. :rtype: Account diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py index ca14e631..daf49eb6 100644 --- a/src/leap/bitmask/gui/mainwindow.py +++ b/src/leap/bitmask/gui/mainwindow.py @@ -154,11 +154,11 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): self._providers = Providers(self.ui.cmbProviders) ## - ## tmphack: important state information about the application is stored - ## in widgets. Rather than rewrite the UI, for now we simulate this - ## info being stored in an application object: + # tmphack: important state information about the application is stored + # in widgets. Rather than rewrite the UI, for now we simulate this + # info being stored in an application object: ## - self.app.login_state = self._login_widget._state + self.app.login_state = self._login_widget._state self.app.providers_widget = self._providers # Qt Signal Connections ##################################### diff --git a/src/leap/bitmask/gui/preferences_account_page.py b/src/leap/bitmask/gui/preferences_account_page.py index c175c42b..141523c8 100644 --- a/src/leap/bitmask/gui/preferences_account_page.py +++ b/src/leap/bitmask/gui/preferences_account_page.py @@ -69,7 +69,6 @@ class PreferencesAccountPage(PreferencesPage): self.app.signaler.prov_get_supported_services.connect( self._load_services) - def teardown_connections(self): """ disconnect signals diff --git a/src/leap/bitmask/gui/preferences_email_page.py b/src/leap/bitmask/gui/preferences_email_page.py index 50f244fb..8211aeb8 100644 --- a/src/leap/bitmask/gui/preferences_email_page.py +++ b/src/leap/bitmask/gui/preferences_email_page.py @@ -18,8 +18,6 @@ Widget for "email" preferences """ from PySide import QtCore, QtGui -from datetime import datetime - from leap.bitmask.logs.utils import get_logger from leap.bitmask.gui.ui_preferences_email_page import Ui_PreferencesEmailPage from leap.bitmask.gui.preferences_page import PreferencesPage @@ -27,6 +25,7 @@ from leap.mail.imap.service.imap import IMAP_PORT logger = get_logger() + class PreferencesEmailPage(PreferencesPage): def __init__(self, parent, account, app): @@ -46,11 +45,11 @@ class PreferencesEmailPage(PreferencesPage): # the only way to set the tab titles is to re-add them: self.ui.email_tabs.addTab(self.ui.config_tab, - self.tr("Mail Client")) + self.tr("Mail Client")) self.ui.email_tabs.addTab(self.ui.my_key_tab, - self.tr("My Key")) + self.tr("My Key")) self.ui.email_tabs.addTab(self.ui.other_keys_tab, - self.tr("Other Keys")) + self.tr("Other Keys")) # set mail client configuration help text lang = QtCore.QLocale.system().name().replace('_', '-') @@ -61,7 +60,7 @@ class PreferencesEmailPage(PreferencesPage): "For Thunderbird, you can use the Bitmask extension. " "Search for \"Bitmask\" in the add-on manager or " "download it from addons.mozilla.org.".format( - thunderbird_extension_url))) + thunderbird_extension_url))) self.ui.mail_client_label.setText(self.tr( "Alternatively, you can manually configure your mail client to " "use Bitmask Email with these options:")) @@ -71,7 +70,6 @@ class PreferencesEmailPage(PreferencesPage): self.setup_connections() - def setup_connections(self): """ connect signals @@ -106,7 +104,7 @@ class PreferencesEmailPage(PreferencesPage): self.ui.message_label.setText( self.tr('You must be logged in to edit email settings.')) else: - self.ui.import_button.setVisible(False) # hide this until working + self.ui.import_button.setVisible(False) # hide this until working self.ui.message_label.setVisible(False) self.ui.email_tabs.setVisible(True) smtp_port = 2013 @@ -128,7 +126,7 @@ class PreferencesEmailPage(PreferencesPage): Set the current user's key details into the gui. """ self.ui.fingerprint_edit.setPlainText( - self._format_fingerprint(details["fingerprint"])) + self._format_fingerprint(details["fingerprint"])) self.ui.expiration_edit.setText(details["expiry_date"]) self.ui.uid_edit.setText(" ".join(details["uids"])) self.ui.public_key_edit.setPlainText(details["key_data"]) @@ -139,8 +137,8 @@ class PreferencesEmailPage(PreferencesPage): produces, wrapped to two lines. """ fp = fingerprint.upper() - fp_list = [fp[i:i+4] for i in range(0, len(fp), 4)] - fp_wrapped = " ".join(fp_list[0:5]) + "\n" + " ".join(fp_list[5:10]) + fp_list = [fp[i:i + 4] for i in range(0, len(fp), 4)] + fp_wrapped = " ".join(fp_list[0:5]) + "\n" + " ".join(fp_list[5:10]) return fp_wrapped def _export_keys(self): @@ -156,8 +154,8 @@ class PreferencesEmailPage(PreferencesPage): if not file_name.endswith('.pem'): file_name += '.pem' self.app.backend.keymanager_export_keys( - username=self.account.address, - filename=file_name) + username=self.account.address, + filename=file_name) else: logger.debug('Export canceled by the user.') @@ -186,9 +184,9 @@ class PreferencesEmailPage(PreferencesPage): "Export canceled.")) def _import_keys(self): - """ - not yet supported - """ + """ + not yet supported + """ def _keymanager_keys_list(self, keys): """ @@ -203,5 +201,7 @@ class PreferencesEmailPage(PreferencesPage): for key in keys: row = self.ui.keys_table.rowCount() self.ui.keys_table.insertRow(row) - self.ui.keys_table.setItem(row, 0, QtGui.QTableWidgetItem(key.address)) - self.ui.keys_table.setItem(row, 1, QtGui.QTableWidgetItem(key.fingerprint)) + self.ui.keys_table.setItem( + row, 0, QtGui.QTableWidgetItem(key.address)) + self.ui.keys_table.setItem( + row, 1, QtGui.QTableWidgetItem(key.fingerprint)) diff --git a/src/leap/bitmask/gui/preferences_page.py b/src/leap/bitmask/gui/preferences_page.py index c75b4991..a5d811f9 100644 --- a/src/leap/bitmask/gui/preferences_page.py +++ b/src/leap/bitmask/gui/preferences_page.py @@ -14,10 +14,11 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . """ -base class for preference pages +Base class for preference pages """ -from PySide import QtCore, QtGui +from PySide import QtGui + class PreferencesPage(QtGui.QWidget): @@ -47,4 +48,3 @@ class PreferencesPage(QtGui.QWidget): disconnect signals must be overridden by subclass """ - diff --git a/src/leap/bitmask/gui/preferences_vpn_page.py b/src/leap/bitmask/gui/preferences_vpn_page.py index fc15340f..87b86c4e 100644 --- a/src/leap/bitmask/gui/preferences_vpn_page.py +++ b/src/leap/bitmask/gui/preferences_vpn_page.py @@ -20,10 +20,10 @@ Widget for "vpn" preferences from PySide import QtCore, QtGui from leap.bitmask.gui.ui_preferences_vpn_page import Ui_PreferencesVpnPage -from leap.bitmask.config.leapsettings import LeapSettings from leap.bitmask.gui.flashable import Flashable from leap.bitmask.gui.preferences_page import PreferencesPage + class PreferencesVpnPage(PreferencesPage, Flashable): """ diff --git a/src/leap/bitmask/gui/preferenceswindow.py b/src/leap/bitmask/gui/preferenceswindow.py index 1facba69..82dc8d77 100644 --- a/src/leap/bitmask/gui/preferenceswindow.py +++ b/src/leap/bitmask/gui/preferenceswindow.py @@ -29,6 +29,7 @@ from leap.bitmask.gui.preferences_email_page import PreferencesEmailPage logger = get_logger() + class PreferencesWindow(QtGui.QDialog): """ @@ -122,7 +123,7 @@ class PreferencesWindow(QtGui.QDialog): """ Adds the pages for the different configuration categories. """ - self._remove_pages() # in case different account was loaded. + self._remove_pages() # in case different account was loaded. # load placeholder widgets if the page should not be loaded. # the order of the pages is important, and must match the order @@ -197,8 +198,8 @@ class PreferencesWindow(QtGui.QDialog): Close this dialog and destroy it. """ PreferencesWindow._current_window = None - self._teardown_connections(); - self._remove_pages(); + self._teardown_connections() + self._remove_pages() self.deleteLater() def _change_page(self, current, previous): diff --git a/src/leap/bitmask/gui/statemachines.py b/src/leap/bitmask/gui/statemachines.py index ab48b756..92c5431d 100644 --- a/src/leap/bitmask/gui/statemachines.py +++ b/src/leap/bitmask/gui/statemachines.py @@ -40,6 +40,7 @@ class SignallingState(QState): """ A state that emits a custom signal on entry. """ + def __init__(self, signal, parent=None, name=None): """ Initializer. @@ -134,6 +135,7 @@ class States(object): class CompositeEvent(QtCore.QEvent): + def __init__(self): super(CompositeEvent, self).__init__( QtCore.QEvent.Type(self.ID)) @@ -174,6 +176,7 @@ class Events(QtCore.QObject): A Wrapper object for containing the events that will be posted to a composite state machine. """ + def __init__(self, parent=None): """ Initializes the QObject with the given parent. @@ -289,6 +292,7 @@ class ConnectionMachineBuilder(object): """ Builder class for state machines made from LEAPConnections. """ + def __init__(self, connection): """ :param connection: an instance of a concrete LEAPConnection @@ -352,7 +356,6 @@ class ConnectionMachineBuilder(object): :rtype: QStateMachine """ # TODO split this method in smaller utility functions. - parent = kwargs.get('parent', None) # 1. create machine machine = CompositeMachine() -- cgit v1.2.3 From 9a0568c18ed38558a481d5f6e4be12c68f9870a6 Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Tue, 19 Apr 2016 13:14:54 -0400 Subject: [feature] enable webmail from the mail preferences window this box is only visible when the HAS_PIXELATED flag is True, that means we have pixelated-user-agent and pixelated-www in the environment. - Releases: 0.9.2 --- src/leap/bitmask/gui/preferences_email_page.py | 19 ++++++++++++++ src/leap/bitmask/gui/ui/preferences_email_page.ui | 30 +++++++++++++++++++++-- 2 files changed, 47 insertions(+), 2 deletions(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/preferences_email_page.py b/src/leap/bitmask/gui/preferences_email_page.py index 8211aeb8..b8633f07 100644 --- a/src/leap/bitmask/gui/preferences_email_page.py +++ b/src/leap/bitmask/gui/preferences_email_page.py @@ -18,11 +18,14 @@ Widget for "email" preferences """ from PySide import QtCore, QtGui +from leap.bitmask.config.leapsettings import LeapSettings from leap.bitmask.logs.utils import get_logger from leap.bitmask.gui.ui_preferences_email_page import Ui_PreferencesEmailPage from leap.bitmask.gui.preferences_page import PreferencesPage +from leap.bitmask.pix import HAS_PIXELATED from leap.mail.imap.service.imap import IMAP_PORT + logger = get_logger() @@ -40,6 +43,7 @@ class PreferencesEmailPage(PreferencesPage): :type app: App """ PreferencesPage.__init__(self, parent, account, app) + self.settings = LeapSettings() self.ui = Ui_PreferencesEmailPage() self.ui.setupUi(self) @@ -65,6 +69,16 @@ class PreferencesEmailPage(PreferencesPage): "Alternatively, you can manually configure your mail client to " "use Bitmask Email with these options:")) + self.ui.webmail_label.setText(self.tr( + "This distribution of Bitmask ships an experimental integration " + "of the Pixelated " + "Webmail. It is not stable yet, but you can enable it to help " + "beta-testing it. (Needs restart!)")) + webmail_enabled = self.settings.get_pixelmail_enabled() + self.ui.webmail_checkbox.setChecked(webmail_enabled) + if not HAS_PIXELATED: + self.ui.webmail_box.setVisible(False) + self.ui.keys_table.horizontalHeader().setResizeMode( 0, QtGui.QHeaderView.Stretch) @@ -81,6 +95,7 @@ class PreferencesEmailPage(PreferencesPage): self._keymanager_export_error) self.ui.import_button.clicked.connect(self._import_keys) self.ui.export_button.clicked.connect(self._export_keys) + self.ui.webmail_checkbox.stateChanged.connect(self._toggle_webmail) def teardown_connections(self): """ @@ -205,3 +220,7 @@ class PreferencesEmailPage(PreferencesPage): row, 0, QtGui.QTableWidgetItem(key.address)) self.ui.keys_table.setItem( row, 1, QtGui.QTableWidgetItem(key.fingerprint)) + + def _toggle_webmail(self, state): + value = True if state == QtCore.Qt.Checked else False + self.settings.set_pixelmail_enabled(value) diff --git a/src/leap/bitmask/gui/ui/preferences_email_page.ui b/src/leap/bitmask/gui/ui/preferences_email_page.ui index 5f83426b..22d690d9 100644 --- a/src/leap/bitmask/gui/ui/preferences_email_page.ui +++ b/src/leap/bitmask/gui/ui/preferences_email_page.ui @@ -23,7 +23,7 @@ - 2 + 0 @@ -35,7 +35,7 @@ Tab 1 - + @@ -332,6 +332,32 @@ + + + + Webmail Configuration + + + + + + Enable Bitmask Webmail (beta) + + + + + + + webmail info + + + true + + + + + + -- cgit v1.2.3 From b6bf547e3a8b96b5fcdba739ed4be74bf040a7ed Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Mon, 25 Apr 2016 17:25:36 -0400 Subject: [refactor] move the pixelated panel upwards --- src/leap/bitmask/gui/preferences_email_page.py | 7 +-- src/leap/bitmask/gui/qt_browser.py | 2 +- src/leap/bitmask/gui/ui/preferences_email_page.ui | 54 +++++++++++------------ 3 files changed, 32 insertions(+), 31 deletions(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/preferences_email_page.py b/src/leap/bitmask/gui/preferences_email_page.py index b8633f07..f6d6f036 100644 --- a/src/leap/bitmask/gui/preferences_email_page.py +++ b/src/leap/bitmask/gui/preferences_email_page.py @@ -71,9 +71,10 @@ class PreferencesEmailPage(PreferencesPage): self.ui.webmail_label.setText(self.tr( "This distribution of Bitmask ships an experimental integration " - "of the Pixelated " - "Webmail. It is not stable yet, but you can enable it to help " - "beta-testing it. (Needs restart!)")) + "of Pixelated " + "Mail. Note: at the current state, anyone with access to " + "your device can read your mail without authentication, " + "by opening a browser pointing to http://localhost:9090 ")) webmail_enabled = self.settings.get_pixelmail_enabled() self.ui.webmail_checkbox.setChecked(webmail_enabled) if not HAS_PIXELATED: diff --git a/src/leap/bitmask/gui/qt_browser.py b/src/leap/bitmask/gui/qt_browser.py index b75bfb64..c62e7770 100644 --- a/src/leap/bitmask/gui/qt_browser.py +++ b/src/leap/bitmask/gui/qt_browser.py @@ -33,7 +33,7 @@ class PixelatedWindow(QtGui.QDialog): layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.view) self.setLayout(layout) - self.setWindowTitle('Bitmask/Pixelated WebMail') + self.setWindowTitle('Bitmask Mail') def load_app(self): self.view.load(QtCore.QUrl(PIXELATED_URI)) diff --git a/src/leap/bitmask/gui/ui/preferences_email_page.ui b/src/leap/bitmask/gui/ui/preferences_email_page.ui index 22d690d9..87e7121d 100644 --- a/src/leap/bitmask/gui/ui/preferences_email_page.ui +++ b/src/leap/bitmask/gui/ui/preferences_email_page.ui @@ -36,6 +36,32 @@ Tab 1 + + + + Bitmask Mail Configuration + + + + + + Enable Bitmask Mail (needs restart) + + + + + + + webmail info + + + true + + + + + + @@ -64,7 +90,7 @@ - Mail Client Configuration + Other Mail Clients Configuration @@ -332,32 +358,6 @@ - - - - Webmail Configuration - - - - - - Enable Bitmask Webmail (beta) - - - - - - - webmail info - - - true - - - - - - -- cgit v1.2.3 From 5a1dd49debdcd9a1ce0568217e9411d1e45a3cad Mon Sep 17 00:00:00 2001 From: Ruben Pollan Date: Mon, 25 Apr 2016 20:24:04 -0300 Subject: [bug] represent keys correctly in preference window --- src/leap/bitmask/gui/preferences_email_page.py | 6 ++++-- src/leap/bitmask/gui/ui/preferences_email_page.ui | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/preferences_email_page.py b/src/leap/bitmask/gui/preferences_email_page.py index f6d6f036..7186450d 100644 --- a/src/leap/bitmask/gui/preferences_email_page.py +++ b/src/leap/bitmask/gui/preferences_email_page.py @@ -90,6 +90,8 @@ class PreferencesEmailPage(PreferencesPage): connect signals """ self.app.signaler.keymanager_key_details.connect(self._key_details) + self.app.signaler.keymanager_keys_list.connect( + self._keymanager_keys_list) self.app.signaler.keymanager_export_ok.connect( self._keymanager_export_ok) self.app.signaler.keymanager_export_error.connect( @@ -218,9 +220,9 @@ class PreferencesEmailPage(PreferencesPage): row = self.ui.keys_table.rowCount() self.ui.keys_table.insertRow(row) self.ui.keys_table.setItem( - row, 0, QtGui.QTableWidgetItem(key.address)) + row, 0, QtGui.QTableWidgetItem(" ".join(key["uids"]))) self.ui.keys_table.setItem( - row, 1, QtGui.QTableWidgetItem(key.fingerprint)) + row, 1, QtGui.QTableWidgetItem(key["fingerprint"])) def _toggle_webmail(self, state): value = True if state == QtCore.Qt.Checked else False diff --git a/src/leap/bitmask/gui/ui/preferences_email_page.ui b/src/leap/bitmask/gui/ui/preferences_email_page.ui index 87e7121d..08feb7b0 100644 --- a/src/leap/bitmask/gui/ui/preferences_email_page.ui +++ b/src/leap/bitmask/gui/ui/preferences_email_page.ui @@ -581,7 +581,7 @@ - Key ID + Fingerprint -- cgit v1.2.3 From 68096fa81eebb07165c27648ab804d9e1c695f8e Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Tue, 26 Apr 2016 23:07:42 -0400 Subject: [style] fix typo: Webmail -> Mail --- src/leap/bitmask/gui/ui/mainwindow.ui | 2 +- src/leap/bitmask/gui/ui/preferences_email_page.ui | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/ui/mainwindow.ui b/src/leap/bitmask/gui/ui/mainwindow.ui index 976c0c0a..0dd0b891 100644 --- a/src/leap/bitmask/gui/ui/mainwindow.ui +++ b/src/leap/bitmask/gui/ui/mainwindow.ui @@ -373,7 +373,7 @@ - Bitmask Webmail + Bitmask Mail diff --git a/src/leap/bitmask/gui/ui/preferences_email_page.ui b/src/leap/bitmask/gui/ui/preferences_email_page.ui index 87e7121d..1101d7ba 100644 --- a/src/leap/bitmask/gui/ui/preferences_email_page.ui +++ b/src/leap/bitmask/gui/ui/preferences_email_page.ui @@ -39,7 +39,7 @@ - Bitmask Mail Configuration + Bitmask Mail -- cgit v1.2.3 From 54560623ac5c325bebbe627582b3895c3354368a Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Tue, 3 May 2016 12:18:25 -0400 Subject: [feature] enable to download attachments from within webkit - Resolves: #8069 - Releases: 0.9.2 --- src/leap/bitmask/gui/qt_browser.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/qt_browser.py b/src/leap/bitmask/gui/qt_browser.py index c62e7770..2f7e6086 100644 --- a/src/leap/bitmask/gui/qt_browser.py +++ b/src/leap/bitmask/gui/qt_browser.py @@ -17,8 +17,10 @@ """ QtWebKit-based browser to display Pixelated User Agent """ +import os +import urlparse -from PySide import QtCore, QtWebKit, QtGui +from PySide import QtCore, QtWebKit, QtGui, QtNetwork PIXELATED_URI = 'http://localhost:9090' @@ -37,3 +39,29 @@ class PixelatedWindow(QtGui.QDialog): def load_app(self): self.view.load(QtCore.QUrl(PIXELATED_URI)) + self.view.page().setForwardUnsupportedContent(True) + self.view.page().unsupportedContent.connect(self.download) + + self.manager = QtNetwork.QNetworkAccessManager() + self.manager.finished.connect(self.finished) + + def download(self, reply): + self.request = QtNetwork.QNetworkRequest(reply.url()) + self.reply = self.manager.get(self.request) + + def finished(self): + url = self.reply.url().toString() + + filename = urlparse.parse_qs(url).get('filename', None) + if filename: + filename = filename[0] + name = filename or url + + path = os.path.expanduser(os.path.join( + '~', unicode(name).split('/')[-1])) + destination = QtGui.QFileDialog.getSaveFileName(self, "Save", path) + if destination: + filename = destination[0] + with open(filename, 'wb') as f: + f.write(str(self.reply.readAll())) + f.close() -- cgit v1.2.3 From e7439f48b4279dcda0dc966903840a2affee3353 Mon Sep 17 00:00:00 2001 From: elijah Date: Wed, 11 May 2016 14:45:09 -0700 Subject: [bug] add scrollbars to mail preference panel --- src/leap/bitmask/gui/preferences_email_page.py | 20 +- src/leap/bitmask/gui/ui/preferences_email_page.ui | 648 ++++++++++++---------- 2 files changed, 354 insertions(+), 314 deletions(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/preferences_email_page.py b/src/leap/bitmask/gui/preferences_email_page.py index 7186450d..0f44dfee 100644 --- a/src/leap/bitmask/gui/preferences_email_page.py +++ b/src/leap/bitmask/gui/preferences_email_page.py @@ -65,20 +65,16 @@ class PreferencesEmailPage(PreferencesPage): "Search for \"Bitmask\" in the add-on manager or " "download it from addons.mozilla.org.".format( thunderbird_extension_url))) + self.ui.mail_client_label.setText(self.tr( "Alternatively, you can manually configure your mail client to " - "use Bitmask Email with these options:")) + "use Bitmask with these options:")) self.ui.webmail_label.setText(self.tr( - "This distribution of Bitmask ships an experimental integration " - "of Pixelated " - "Mail. Note: at the current state, anyone with access to " - "your device can read your mail without authentication, " - "by opening a browser pointing to http://localhost:9090 ")) - webmail_enabled = self.settings.get_pixelmail_enabled() - self.ui.webmail_checkbox.setChecked(webmail_enabled) - if not HAS_PIXELATED: - self.ui.webmail_box.setVisible(False) + "Bitmask Mail is an integrated mail client based " + "on Pixelated " + "User Agent. If enabled, any user on your device " + "can read your mail by opening http://localhost:9090")) self.ui.keys_table.horizontalHeader().setResizeMode( 0, QtGui.QHeaderView.Stretch) @@ -122,6 +118,10 @@ class PreferencesEmailPage(PreferencesPage): self.ui.message_label.setText( self.tr('You must be logged in to edit email settings.')) else: + webmail_enabled = self.settings.get_pixelmail_enabled() + self.ui.webmail_checkbox.setChecked(webmail_enabled) + if not HAS_PIXELATED: + self.ui.webmail_box.setVisible(False) self.ui.import_button.setVisible(False) # hide this until working self.ui.message_label.setVisible(False) self.ui.email_tabs.setVisible(True) diff --git a/src/leap/bitmask/gui/ui/preferences_email_page.ui b/src/leap/bitmask/gui/ui/preferences_email_page.ui index e4a72951..610a43c7 100644 --- a/src/leap/bitmask/gui/ui/preferences_email_page.ui +++ b/src/leap/bitmask/gui/ui/preferences_email_page.ui @@ -32,345 +32,385 @@ + + background: palette(base); + Tab 1 - - - Bitmask Mail + + + - - - - - Enable Bitmask Mail (needs restart) - - - - - - - webmail info - - - true - - - - - - - - - - Thunderbird Configuration + + QFrame::NoFrame - - - - - thunderbird information - - - true - - - - - - - - - - - 0 - 0 - - - - Other Mail Clients Configuration + + true - - - - - mail client information - - - true - - - - - - - - - - - - 0 - 0 - - - - Host - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - + + + + 0 + 0 + 504 + 537 + + + + false + + + background: palette(base); + + + + 6 + + + 0 + + + + + Bitmask Mail + + + + - Port - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + Enable Bitmask Mail (needs restart) - - - - - 0 - 0 - - - - - 100 - 16777215 - - + + - + webmail info - + true - - - - - 0 - 0 - - + + + + + + + Thunderbird Configuration + + + + - TLS: off - - - - - - - - 0 - 0 - - - - - 50 - 16777215 - + thunderbird information - + true - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - IMAP - - - - - - - Username - - - - - - - SMTP - - - - - - - - - - 0 - 0 - - + + + + + + + 0 + 0 + + + + Other Mail Clients Configuration + + + + - Host + mail client information - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 100 - 16777215 - - - - - - + true - - - - - 0 - 0 - - - - Port - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - TLS: off - - - - - - - - 0 - 0 - - - - - 50 - 16777215 - - - - true - - + + + + + + + + + 0 + 0 + + + + Host + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + Port + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 100 + 16777215 + + + + + + + true + + + + + + + + 0 + 0 + + + + TLS: off + + + + + + + + 0 + 0 + + + + + 50 + 16777215 + + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + IMAP + + + + + + + Username + + + + + + + SMTP + + + + + + + + + + 0 + 0 + + + + Host + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 100 + 16777215 + + + + + + + true + + + + + + + + 0 + 0 + + + + Port + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + TLS: off + + + + + + + + 0 + 0 + + + + + 50 + 16777215 + + + + true + + + + + + + + + true + + + + + + + Password + + + + + + + true + + + + - - - - - true - - - - - - - Password - - - - - - - true - - - - - - + + + + + + Qt::Vertical + + + + 20 + 4 + + + + + + - - - - Qt::Vertical - - - - 20 - 40 - - - - -- cgit v1.2.3 From c7f9bbcc8fe075750e4041c5a7f00c8767dd38b5 Mon Sep 17 00:00:00 2001 From: elijah Date: Wed, 11 May 2016 15:03:23 -0700 Subject: [feat] Make help menu item open bitmask.net/help directly --- src/leap/bitmask/gui/mainwindow.py | 50 +++----------------------------------- 1 file changed, 3 insertions(+), 47 deletions(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py index daf49eb6..25ee4f3d 100644 --- a/src/leap/bitmask/gui/mainwindow.py +++ b/src/leap/bitmask/gui/mainwindow.py @@ -1054,53 +1054,9 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): TRIGGERS: self.ui.action_help.triggered - Display the Bitmask help dialog. - """ - # TODO: don't hardcode! - smtp_port = 2013 - - help_url = "

    {0}

    ".format( - self.tr("bitmask.net/help")) - - lang = QtCore.QLocale.system().name().replace('_', '-') - thunderbird_extension_url = \ - "https://addons.mozilla.org/{0}/" \ - "thunderbird/addon/bitmask/".format(lang) - - email_quick_reference = self.tr("Email quick reference") - thunderbird_text = self.tr( - "For Thunderbird, you can use the " - "Bitmask extension. Search for \"Bitmask\" in the add-on " - "manager or download it from " - "addons.mozilla.org.".format(thunderbird_extension_url)) - manual_text = self.tr( - "Alternatively, you can manually configure " - "your mail client to use Bitmask Email with these options:") - manual_imap = self.tr("IMAP: localhost, port {0}".format(IMAP_PORT)) - manual_smtp = self.tr("SMTP: localhost, port {0}".format(smtp_port)) - manual_username = self.tr("Username: your full email address") - - # FIXME on i3, this doens't allow to mouse-select. - # Switch to a dialog in which we can set the QLabel - mail_auth_token = ( - self.app.service_tokens.get('mail_auth', None) or - "??? (log in to unlock)") - mail_password = self.tr("IMAP/SMTP Password:") + " %s" % ( - mail_auth_token,) - - msg = help_url + self.tr( - "

    {0}

    " - "

    {1}

    " - "

    {2}" - "

      " - "
    •  {3}
    • " - "
    •  {4}
    • " - "
    •  {5}
    • " - "
    •  {6}
    • " - "

    ").format(email_quick_reference, thunderbird_text, - manual_text, manual_imap, manual_smtp, - manual_username, mail_password) - QtGui.QMessageBox.about(self, self.tr("Bitmask Help"), msg) + Open bitmask.net/help + """ + QtGui.QDesktopServices.openUrl("https://bitmask.net/help") def _needs_update(self): """ -- cgit v1.2.3 From cd95c8d2e285538e282dbf2b5e848b4154c3606c Mon Sep 17 00:00:00 2001 From: elijah Date: Wed, 11 May 2016 15:05:57 -0700 Subject: [bug] remove "about bitmask" easter egg --- src/leap/bitmask/gui/mainwindow.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py index 25ee4f3d..e7b849e5 100644 --- a/src/leap/bitmask/gui/mainwindow.py +++ b/src/leap/bitmask/gui/mainwindow.py @@ -1030,12 +1030,9 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): Display the About Bitmask dialog """ today = datetime.now().date() - greet = ("Happy New 1984!... or not ;)

    " - if today.month == 1 and today.day < 15 else "") title = self.tr("About Bitmask - %s") % (VERSION,) msg = self.tr( "Version: {ver} ({ver_hash})
    " - "
    {greet}" "Bitmask is the Desktop client application for the LEAP " "platform, supporting Encrypted Internet Proxy " "and " @@ -1046,7 +1043,7 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): "available.
    " "
    " "
    More about LEAP") - msg = msg.format(ver=VERSION, ver_hash=VERSION_HASH[:10], greet=greet) + msg = msg.format(ver=VERSION, ver_hash=VERSION_HASH[:10]) QtGui.QMessageBox.about(self, title, msg) def _help(self): -- cgit v1.2.3 From 61970d6395afcaa5439d866fbfb1ab2ad471141a Mon Sep 17 00:00:00 2001 From: elijah Date: Wed, 11 May 2016 17:09:54 -0700 Subject: [feat] move pix UA launcher from menu to mail status widget. --- src/leap/bitmask/gui/mail_status.py | 52 +++++-- src/leap/bitmask/gui/mainwindow.py | 12 -- src/leap/bitmask/gui/preferenceswindow.py | 15 ++ src/leap/bitmask/gui/ui/mail_status.ui | 239 +++++++++++++++++------------- src/leap/bitmask/gui/ui/mainwindow.ui | 10 +- src/leap/bitmask/gui/ui/preferences.ui | 2 +- 6 files changed, 197 insertions(+), 133 deletions(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/mail_status.py b/src/leap/bitmask/gui/mail_status.py index 419a85c0..1045343b 100644 --- a/src/leap/bitmask/gui/mail_status.py +++ b/src/leap/bitmask/gui/mail_status.py @@ -26,7 +26,9 @@ from leap.common.check import leap_assert, leap_assert_type from leap.common.events import register from leap.common.events import catalog +from leap.bitmask.gui.preferenceswindow import PreferencesWindow from ui_mail_status import Ui_MailStatusWidget +from .qt_browser import PixelatedWindow logger = get_logger() @@ -52,13 +54,21 @@ class MailStatusWidget(QtGui.QWidget): self._systray = None self._disabled = True self._started = False + self._mainwindow = parent self._unread_mails = 0 self.ui = Ui_MailStatusWidget() self.ui.setupUi(self) - self.ui.lblMailReadyHelp.setVisible(False) + self.ui.email_ready.setVisible(False) + self.ui.configure_button.clicked.connect( + self._show_configure) + self.ui.open_mail_button.clicked.connect( + self._show_pix_ua) + if not self._mainwindow._settings.get_pixelmail_enabled(): + self.ui.open_mail_button.setVisible(False) + self.ui.or_label.setVisible(False) # set systray tooltip status self._mx_status = "" @@ -144,7 +154,23 @@ class MailStatusWidget(QtGui.QWidget): self.CONNECTED_ICON_TRAY = QtGui.QPixmap(EIP_ICONS_TRAY[1]) self.ERROR_ICON_TRAY = QtGui.QPixmap(EIP_ICONS_TRAY[2]) - # Systray and actions + # + # Button actions + # + + def _show_configure(self): + pref_win = PreferencesWindow(self._mainwindow, self._mainwindow.app) + pref_win.set_page("email") + pref_win.show() + + def _show_pix_ua(self): + win = PixelatedWindow(self._mainwindow) + win.show() + win.load_app() + + # + # Systray + # def set_systray(self, systray): """ @@ -166,6 +192,10 @@ class MailStatusWidget(QtGui.QWidget): mx_status = u"{0}: {1}".format(self._service_name, self._mx_status) self._systray.set_service_tooltip(MX_SERVICE, mx_status) + # + # Status + # + def set_action_mail_status(self, action_mail_status): """ Sets the action_mail_status to use. @@ -229,6 +259,9 @@ class MailStatusWidget(QtGui.QWidget): elif ready < 0: tray_status = self.tr("Mail is disabled") + if ready < 1: + self._hide_mail_ready() + self.ui.lblMailStatusIcon.setPixmap(icon) self._action_mail_status.setText(tray_status) self._update_systray_tooltip() @@ -424,9 +457,10 @@ class MailStatusWidget(QtGui.QWidget): self._show_unread_mails() elif event == catalog.IMAP_SERVICE_STARTED: self._imap_started = True - elif event == catalog.IMAP_CLIENT_LOGIN: - # If a MUA has logged in then we don't need to show this. - self._hide_mail_ready_help() + # this is disabled for now, because this event was being + # triggered at weird times. + #elif event == catalog.IMAP_CLIENT_LOGIN: + # self._hide_mail_ready() if ext_status is not None: self._set_mail_status(ext_status, ready=1) @@ -495,15 +529,13 @@ class MailStatusWidget(QtGui.QWidget): Display the correct UI for the connected state. """ self._set_mail_status(self.tr("ON"), 2) + self.ui.email_ready.setVisible(True) - # this help message will hide when the MUA connects - self.ui.lblMailReadyHelp.setVisible(True) - - def _hide_mail_ready_help(self): + def _hide_mail_ready(self): """ Hide the mail help message on the UI. """ - self.ui.lblMailReadyHelp.setVisible(False) + self.ui.email_ready.setVisible(False) def mail_state_disabled(self): """ diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py index e7b849e5..6637f170 100644 --- a/src/leap/bitmask/gui/mainwindow.py +++ b/src/leap/bitmask/gui/mainwindow.py @@ -59,8 +59,6 @@ from leap.bitmask.util.keyring_helpers import has_keyring from leap.common.events import register from leap.common.events import catalog -from .qt_browser import PixelatedWindow - from leap.mail.imap.service.imap import IMAP_PORT from ui_mainwindow import Ui_MainWindow @@ -227,11 +225,6 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): self._backend_connect() self.ui.action_preferences.triggered.connect(self._show_preferences) - self.ui.action_pixelated_mail.triggered.connect( - self._show_pixelated_browser) - - pixelated_enabled = self._settings.get_pixelmail_enabled() - self.ui.action_pixelated_mail.setVisible(pixelated_enabled) self.ui.action_about_leap.triggered.connect(self._about) self.ui.action_quit.triggered.connect(self.quit) @@ -575,11 +568,6 @@ class MainWindow(QtGui.QMainWindow, SignalTracker): pref_win = PreferencesWindow(self, self.app) pref_win.show() - def _show_pixelated_browser(self): - win = PixelatedWindow(self) - win.show() - win.load_app() - def _update_eip_enabled_status(self, account=None, services=None): """ TRIGGER: diff --git a/src/leap/bitmask/gui/preferenceswindow.py b/src/leap/bitmask/gui/preferenceswindow.py index 82dc8d77..30091312 100644 --- a/src/leap/bitmask/gui/preferenceswindow.py +++ b/src/leap/bitmask/gui/preferenceswindow.py @@ -38,6 +38,12 @@ class PreferencesWindow(QtGui.QDialog): _current_window = None # currently visible preferences window + _panels = { + "account": 0, + "vpn": 1, + "email": 2 + } + def __init__(self, parent, app): """ :param parent: parent object of the PreferencesWindow. @@ -240,3 +246,12 @@ class PreferencesWindow(QtGui.QDialog): Triggered by get srp_status_logged_in, srp_status_not_logged_in """ self._set_account(self.app.current_account()) + + def set_page(self, page): + """ + Jump to a particular page + """ + index = PreferencesWindow._panels[page] + self.ui.nav_widget.setCurrentRow(index) + self.ui.pages_widget.setCurrentIndex(index) + diff --git a/src/leap/bitmask/gui/ui/mail_status.ui b/src/leap/bitmask/gui/ui/mail_status.ui index 89e1843f..f8ebb5a8 100644 --- a/src/leap/bitmask/gui/ui/mail_status.ui +++ b/src/leap/bitmask/gui/ui/mail_status.ui @@ -6,12 +6,12 @@ 0 0 - 417 - 185 + 427 + 157
    - + 0 0 @@ -20,26 +20,131 @@ Form - - 0 - + + + + color: rgb(80, 80, 80); + + + You must login to use encrypted email. + + + + + + + + 22 + 22 + + + + + 22 + 22 + + + + + + + :/images/black/22/off.png + + + true + + + + + + + + 0 + + + 6 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + Configure Client + + + + + + + + 0 + 0 + + + + or + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + Open Bitmask Mail + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 10 + 10 + + + + + + + - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - + + + + + + :/images/black/32/email.png + + + + + + + 0 @@ -51,89 +156,18 @@ - - - + + + + Qt::Horizontal + + - 24 - 24 + 1 + 1 - - - - - :/images/black/22/off.png - - - true - - - - - - - false - - - background-color: #e0efd8; -padding: 10px; -margin-top:5px; - - - QFrame::NoFrame - - - QFrame::Plain - - - 0 - - - Bitmask is ready to encrypt your email. Go to <a href="https://bitmask.net/en/help/email">https://bitmask.net/en/help/email</a> for email application setup instructions. - - - Qt::AutoText - - - false - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - 0 - - - -1 - - - true - - - - - - - - - - :/images/black/32/email.png - - - - - - - color: rgb(80, 80, 80); - - - You must login to use encrypted email. - - +
    @@ -141,6 +175,7 @@ margin-top:5px; + diff --git a/src/leap/bitmask/gui/ui/mainwindow.ui b/src/leap/bitmask/gui/ui/mainwindow.ui index 0dd0b891..5d8e0f35 100644 --- a/src/leap/bitmask/gui/ui/mainwindow.ui +++ b/src/leap/bitmask/gui/ui/mainwindow.ui @@ -75,7 +75,7 @@ 0 0 524 - 549 + 541
    @@ -306,7 +306,7 @@ 0 0 524 - 21 + 25 @@ -315,7 +315,6 @@ - @@ -371,11 +370,6 @@ Create a new account... - - - Bitmask Mail - - false diff --git a/src/leap/bitmask/gui/ui/preferences.ui b/src/leap/bitmask/gui/ui/preferences.ui index 51cad0a1..8e884a63 100644 --- a/src/leap/bitmask/gui/ui/preferences.ui +++ b/src/leap/bitmask/gui/ui/preferences.ui @@ -7,7 +7,7 @@ 0 0 630 - 500 + 560 -- cgit v1.2.3 From 6d4c24af969d72331f0177ec302b9d48381683b8 Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Wed, 11 May 2016 20:49:31 -0400 Subject: [style] pep8 --- src/leap/bitmask/gui/mail_status.py | 2 +- src/leap/bitmask/gui/preferences_email_page.py | 2 +- src/leap/bitmask/gui/preferenceswindow.py | 7 +++---- 3 files changed, 5 insertions(+), 6 deletions(-) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/mail_status.py b/src/leap/bitmask/gui/mail_status.py index 1045343b..cb0314b5 100644 --- a/src/leap/bitmask/gui/mail_status.py +++ b/src/leap/bitmask/gui/mail_status.py @@ -459,7 +459,7 @@ class MailStatusWidget(QtGui.QWidget): self._imap_started = True # this is disabled for now, because this event was being # triggered at weird times. - #elif event == catalog.IMAP_CLIENT_LOGIN: + # elif event == catalog.IMAP_CLIENT_LOGIN: # self._hide_mail_ready() if ext_status is not None: diff --git a/src/leap/bitmask/gui/preferences_email_page.py b/src/leap/bitmask/gui/preferences_email_page.py index 0f44dfee..93c77df1 100644 --- a/src/leap/bitmask/gui/preferences_email_page.py +++ b/src/leap/bitmask/gui/preferences_email_page.py @@ -121,7 +121,7 @@ class PreferencesEmailPage(PreferencesPage): webmail_enabled = self.settings.get_pixelmail_enabled() self.ui.webmail_checkbox.setChecked(webmail_enabled) if not HAS_PIXELATED: - self.ui.webmail_box.setVisible(False) + self.ui.webmail_box.setVisible(False) self.ui.import_button.setVisible(False) # hide this until working self.ui.message_label.setVisible(False) self.ui.email_tabs.setVisible(True) diff --git a/src/leap/bitmask/gui/preferenceswindow.py b/src/leap/bitmask/gui/preferenceswindow.py index 30091312..50a972e1 100644 --- a/src/leap/bitmask/gui/preferenceswindow.py +++ b/src/leap/bitmask/gui/preferenceswindow.py @@ -39,9 +39,9 @@ class PreferencesWindow(QtGui.QDialog): _current_window = None # currently visible preferences window _panels = { - "account": 0, - "vpn": 1, - "email": 2 + "account": 0, + "vpn": 1, + "email": 2 } def __init__(self, parent, app): @@ -254,4 +254,3 @@ class PreferencesWindow(QtGui.QDialog): index = PreferencesWindow._panels[page] self.ui.nav_widget.setCurrentRow(index) self.ui.pages_widget.setCurrentIndex(index) - -- cgit v1.2.3 From 13b5afd1bdea38e908bb774becfc0f49a532d5bd Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Wed, 11 May 2016 13:38:07 -0400 Subject: [feat] resize qt-browser to a sensible default mainly to avoid the "Send" button to become out of view in the Compose pane (it needed scrolling to get it on view). this resize shouldn't be needed when pixelated solves the size-responsiveness issue. --- src/leap/bitmask/gui/qt_browser.py | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/leap/bitmask/gui') diff --git a/src/leap/bitmask/gui/qt_browser.py b/src/leap/bitmask/gui/qt_browser.py index 2f7e6086..2d9e20e6 100644 --- a/src/leap/bitmask/gui/qt_browser.py +++ b/src/leap/bitmask/gui/qt_browser.py @@ -37,6 +37,11 @@ class PixelatedWindow(QtGui.QDialog): self.setLayout(layout) self.setWindowTitle('Bitmask Mail') + # For the moment, we need to resize to a sensible default to avoid the + # "send" button to be out of view in the compose pane. This should be + # removed as soon as pixelated becomes size-responsive. + self.resize(800, 700) + def load_app(self): self.view.load(QtCore.QUrl(PIXELATED_URI)) self.view.page().setForwardUnsupportedContent(True) -- cgit v1.2.3