aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuido Günther <agx@sigxcpu.org>2012-01-04 20:40:01 +0100
committerGuido Günther <agx@sigxcpu.org>2012-01-04 20:40:01 +0100
commit17bb6e30fd7a4d24f1fb1b700bd5e7ddc86be207 (patch)
tree41ebef3a855f3209175b7896e16529b4b6afe8f7
parent6a08a5de0d90caa19d6c8f3dc6eaf575cddde0c0 (diff)
parentef38aedd75fcbc2aea8875e2a811245da7ccbc04 (diff)
Merge commit 'v0.0.3.1' into debian/sid
-rw-r--r--NEWS8
-rw-r--r--configure.ac4
-rw-r--r--src/ppm-provider-assistant.ui2
-rw-r--r--src/ppm.ui5
-rw-r--r--src/ppm/modemproxy.py20
-rw-r--r--src/ppm/providerdb.py7
-rwxr-xr-xsrc/prepaid-manager-applet.py60
7 files changed, 76 insertions, 30 deletions
diff --git a/NEWS b/NEWS
index f9f1c41..1490352 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,11 @@
+===============
+Version 0.0.3.1
+===============
+* Provider selections fixes
+* Add 'change' button to allow to reconfigure current provider
+* Reschedule modem setup on modem errors
+* Switch to xz tarballs
+
==============
Version 0.0.3
==============
diff --git a/configure.ac b/configure.ac
index a6530a0..429b404 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,9 +1,9 @@
# -*- Autoconf -*-
AC_PREREQ([2.67])
-AC_INIT([prepaid-manager-applet], [0.0.3],
+AC_INIT([prepaid-manager-applet], [0.0.3.1],
[https://honk.sigxcpu.org/piki/projects/ppm/])
-AM_INIT_AUTOMAKE([-Wno-portability])
+AM_INIT_AUTOMAKE([dist-xz -Wno-portability])
IT_PROG_INTLTOOL([0.35.0])
diff --git a/src/ppm-provider-assistant.ui b/src/ppm-provider-assistant.ui
index f07314d..590e18d 100644
--- a/src/ppm-provider-assistant.ui
+++ b/src/ppm-provider-assistant.ui
@@ -33,7 +33,7 @@
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
- <property name="label" translatable="yes">Prepaid Manager couldn't autodetect your mobile broadband provider. The following pages will guide you through the process of setting it up.</property>
+ <property name="label" translatable="yes">The following pages will guide you through the process of setting it you mobile broadband provider.</property>
<property name="wrap">True</property>
</object>
<packing>
diff --git a/src/ppm.ui b/src/ppm.ui
index faef29d..6eee0c0 100644
--- a/src/ppm.ui
+++ b/src/ppm.ui
@@ -39,7 +39,7 @@
</object>
</child>
<child>
- <object class="GtkMenuItem" id="menuitem_help">
+ <object class="GtkMenuItem" id="menu_item_help">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -120,6 +120,7 @@
<object class="GtkButton" id="button_provider_change">
<property name="label" translatable="yes">change</property>
<property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="has_tooltip">True</property>
@@ -267,9 +268,11 @@
<object class="GtkButton" id="button_provider_change1">
<property name="label" translatable="yes">change</property>
<property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
+ <signal name="clicked" handler="on_provider_change_clicked" swapped="no"/>
</object>
<packing>
<property name="left_attach">2</property>
diff --git a/src/ppm/modemproxy.py b/src/ppm/modemproxy.py
index 7ac8fa7..08d8015 100644
--- a/src/ppm/modemproxy.py
+++ b/src/ppm/modemproxy.py
@@ -47,6 +47,8 @@ class ModemManagerProxy(GObject.GObject):
MM_DBUS_INTERFACE_MODEM_GSM_CARD='org.freedesktop.ModemManager.Modem.Gsm.Card'
MM_DBUS_INTERFACE_MODEM_GSM_USSD='org.freedesktop.ModemManager.Modem.Gsm.Ussd'
MM_DBUS_TIMEOUT = 5000
+ MM_DBUS_FLAGS = (Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES |
+ Gio.DBusProxyFlags.DO_NOT_CONNECT_SIGNALS)
__gsignals__ = {
# Emitted when a request to MM starts
@@ -114,7 +116,7 @@ class ModemManagerProxy(GObject.GObject):
def get_modems(self):
modems = []
mm = Gio.DBusProxy.new_sync(self.bus,
- Gio.DBusProxyFlags.NONE,
+ self.MM_DBUS_FLAGS,
None,
self.MM_DBUS_SERVICE,
self.MM_DBUS_OBJECT_MODEM_MANAGER,
@@ -127,12 +129,12 @@ class ModemManagerProxy(GObject.GObject):
def get_imsi(self):
card = Gio.DBusProxy.new_sync(self.bus,
- Gio.DBusProxyFlags.NONE,
- None,
- self.MM_DBUS_SERVICE,
- self.modem,
- self.MM_DBUS_INTERFACE_MODEM_GSM_CARD,
- None)
+ self.MM_DBUS_FLAGS,
+ None,
+ self.MM_DBUS_SERVICE,
+ self.modem,
+ self.MM_DBUS_INTERFACE_MODEM_GSM_CARD,
+ None)
try:
return card.GetImsi()
except Exception as msg:
@@ -147,7 +149,7 @@ class ModemManagerProxy(GObject.GObject):
@mm_request
def ussd_initiate(self, command, reply_func=None, error_func=None):
ussd = Gio.DBusProxy.new_sync(self.bus,
- Gio.DBusProxyFlags.NONE,
+ self.MM_DBUS_FLAGS,
None,
self.MM_DBUS_SERVICE,
self.modem,
@@ -160,7 +162,7 @@ class ModemManagerProxy(GObject.GObject):
@mm_request
def _modem__enable(self, enable, reply_func=None, error_func=None):
ussd = Gio.DBusProxy.new_sync(self.bus,
- Gio.DBusProxyFlags.NONE,
+ self.MM_DBUS_FLAGS,
None,
self.MM_DBUS_SERVICE,
self.modem,
diff --git a/src/ppm/providerdb.py b/src/ppm/providerdb.py
index e2b097d..c1aebec 100644
--- a/src/ppm/providerdb.py
+++ b/src/ppm/providerdb.py
@@ -133,6 +133,13 @@ class ProviderDB(object):
for r in searcher(self.tree):
yield r.attrib['code']
+ def get_country_by_code(self, code):
+ """Given a country code return it's name"""
+ try:
+ return self.countries[code]
+ except KeyError:
+ return None
+
def get_countries(self):
for code in self.get_country_codes():
try:
diff --git a/src/prepaid-manager-applet.py b/src/prepaid-manager-applet.py
index 7df63e6..b1f4f6f 100755
--- a/src/prepaid-manager-applet.py
+++ b/src/prepaid-manager-applet.py
@@ -117,21 +117,31 @@ class PPMController(GObject.GObject):
mnc = imsi[3:5]
return (mcc, mnc)
- def _get_provider_interactive(self, imsi):
+ def get_provider_interactive(self, imsi=None):
"""
Given the imsi, determine the provider based on that information
from providerdb, request user input where ncessary
+
+ @param imsi: If given use this to dertimine the mcc and mnc
+ and from that the provider. If set to C{None} request all
+ information from the user.
+ @type imsi: C{str}
"""
- mcc, mnc = self._imsi_to_network_id(imsi)
- self.providers = self.providerdb.get_providers(mcc, mnc)
- if self.providers:
- if len(self.providers) > 1:
- # More than one provider matching mcc/mnc, let user select
- self.view.show_provider_assistant(self.providers)
- else:
- self.set_provider(self.providers[0])
+ self.providers = []
+ if imsi:
+ mcc, mnc = self._imsi_to_network_id(imsi)
+ self.providers = self.providerdb.get_providers(mcc, mnc)
+
+ if len(self.providers) == 1:
+ self.set_provider(self.providers[0])
+ elif len(self.providers):
+ # More than one provider matching mcc/mnc, let user select
+ self.view.show_provider_assistant(self.providers)
else:
- self.view.show_provider_unknown(mcc, mnc)
+ if imsi:
+ self.view.show_provider_unknown(mcc, mnc)
+ else:
+ self.view.show_provider_assistant(None)
def _get_account_from_accountdb(self, imsi):
"""
@@ -175,7 +185,7 @@ class PPMController(GObject.GObject):
else:
# Account not known yet, get provider interactively
self.account = None
- self._get_provider_interactive(self.imsi)
+ self.get_provider_interactive(self.imsi)
# Everything worked out, disable the timer.
return False
@@ -217,6 +227,9 @@ class PPMController(GObject.GObject):
def get_provider_providers(self, country_code):
return self.providerdb.get_providers_by_code(country_code)
+ def get_country_by_code(self, code):
+ return self.providerdb.get_country_by_code(code)
+
def on_mm_request_started(self, obj, mm_proxy):
logging.debug("Started modem request: %s", mm_proxy.request)
self.view.show_modem_response()
@@ -247,6 +260,8 @@ class PPMController(GObject.GObject):
def on_modem_error(self, e):
self.view.show_modem_error(e.msg)
logging.error(e.msg)
+ # The modem might have disconnected. So reschedule the setup
+ self.schedule_setup()
def on_provider_changed(self, obj, provider):
"""Act on provider-changed signal"""
@@ -384,9 +399,7 @@ class PPMDialog(GObject.GObject, PPMObject):
self.controller.fetch_balance()
def on_provider_change_clicked(self, dummy):
- # FIXME: allow to select provider
- # and communicate the change to the controller
- raise NotImplementedError
+ self.controller.get_provider_interactive(imsi=None)
def on_entry_code_insert(self, entry):
cur_len = entry.get_text_length()
@@ -569,6 +582,7 @@ class PPMProviderAssistant(PPMObject):
self.country_code = None
self.provider = None
self.possible_providers = None
+ self.providers_initialized = False
def _get_current_country_from_locale(self):
(l, enc) = locale.getlocale()
@@ -611,6 +625,7 @@ class PPMProviderAssistant(PPMObject):
def show(self, providers=None):
self.possible_providers = providers
self.provider = None
+ self.providers_initialized = False
if not self.possible_providers:
# No list of possible providers so allow to select the country first
@@ -647,28 +662,39 @@ class PPMProviderAssistant(PPMObject):
def on_ppm_provider_assistant_prepare(self, obj, page):
if self.assistant.get_current_page() == self.PAGE_PROVIDERS:
if self.possible_providers:
+ if self.providers_initialized:
+ return
+ else:
+ self.providers_initialized = True
self._fill_provider_liststore_by_providers()
+ self.providers_intialized = True
else:
+ if self.country_code == self.providers_initialized:
+ return
+ else:
+ self.providers_initialized = self.country_code
self._fill_provider_liststore_by_country_code(self.country_code)
elif self.assistant.get_current_page() == self.PAGE_CONFIRM:
- self.label_country.set_text(self.country_code)
+ country = self.controller.get_country_by_code(self.country_code)
+ label = country if country else self.country_code
+ self.label_country.set_text(label)
self.label_provider.set_text(self.provider)
def on_treeview_countries_changed(self, obj):
- self.assistant.set_page_complete(self.vbox_countries, True)
selection = self.treeview_countries.get_selection()
(model, iter) = selection.get_selected()
if not iter:
return
self.country_code = model.get_value(iter, 1)
+ self.assistant.set_page_complete(self.vbox_countries, True)
def on_treeview_providers_changed(self, obj):
- self.assistant.set_page_complete(self.vbox_providers, True)
selection = self.treeview_providers.get_selection()
(model, iter) = selection.get_selected()
if not iter:
return
self.provider = model.get_value(iter, 0)
+ self.assistant.set_page_complete(self.vbox_providers, True)
def on_ppm_provider_assistant_close(self, obj):
logging.debug("Selected: %s %s", self.provider, self.country_code)