#!/usr/bin/python2.5
-# DialCentral - Front end for Google's Grand Central service.
-# Copyright (C) 2008 Mark Bergman bergman AT merctech DOT com
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library 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
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+"""
+DialCentral - Front end for Google's Grand Central service.
+Copyright (C) 2008 Mark Bergman bergman AT merctech DOT com
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
-"""
-DialCentral: A phone dialer using GrandCentral
+This library 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
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
@todo Add logging support to make debugging issues for people a lot easier
"""
__pretty_app_name__ = "DialCentral"
__app_name__ = "dialcentral"
- __version__ = "0.9.5"
+ __version__ = "0.9.6"
__app_magic__ = 0xdeadbeef
_glade_files = [
os.path.join(os.path.dirname(__file__), "../lib/dialcentral.glade"),
]
+ KEYPAD_TAB = 0
+ RECENT_TAB = 1
+ MESSAGES_TAB = 2
+ CONTACTS_TAB = 3
+ ACCOUNT_TAB = 4
+
NULL_BACKEND = 0
GC_BACKEND = 1
GV_BACKEND = 2
self._phoneBackends = None
self._dialpads = None
self._accountViews = None
+ self._messagesViews = None
self._recentViews = None
self._contactsViews = None
if self._window:
self._window.connect("destroy", gtk.main_quit)
self._window.show_all()
+ self._window.set_default_size(800, 300)
backgroundSetup = threading.Thread(target=self._idle_setup)
backgroundSetup.setDaemon(True)
self._dialpads = {self.NULL_BACKEND: null_views.Dialpad(self._widgetTree)}
self._accountViews = {self.NULL_BACKEND: null_views.AccountInfo(self._widgetTree)}
self._recentViews = {self.NULL_BACKEND: null_views.RecentCallsView(self._widgetTree)}
+ self._messagesViews = {self.NULL_BACKEND: null_views.MessagesView(self._widgetTree)}
self._contactsViews = {self.NULL_BACKEND: null_views.ContactsView(self._widgetTree)}
self._dialpads[self._selectedBackendId].enable()
self._accountViews[self._selectedBackendId].enable()
self._recentViews[self._selectedBackendId].enable()
+ self._messagesViews[self._selectedBackendId].enable()
self._contactsViews[self._selectedBackendId].enable()
# Setup maemo specifics
self._widgetTree, self._phoneBackends[self.GV_BACKEND], self._errorDisplay
),
})
+ self._messagesViews.update({
+ self.GC_BACKEND: null_views.MessagesView(self._widgetTree),
+ self.GV_BACKEND: gc_views.MessagesView(
+ self._widgetTree, self._phoneBackends[self.GV_BACKEND], self._errorDisplay
+ ),
+ })
self._contactsViews.update({
self.GC_BACKEND: gc_views.ContactsView(
self._widgetTree, self._phoneBackends[self.GC_BACKEND], self._errorDisplay
self._dialpads[oldStatus].disable()
self._accountViews[oldStatus].disable()
self._recentViews[oldStatus].disable()
+ self._messagesViews[oldStatus].disable()
self._contactsViews[oldStatus].disable()
self._dialpads[newStatus].enable()
self._accountViews[newStatus].enable()
self._recentViews[newStatus].enable()
+ self._messagesViews[newStatus].enable()
self._contactsViews[newStatus].enable()
if self._phoneBackends[self._selectedBackendId].get_callback_number() is None:
self._phoneBackends[self._selectedBackendId].logout()
self._accountViews[self._selectedBackendId].clear()
self._recentViews[self._selectedBackendId].clear()
+ self._messagesViews[self._selectedBackendId].clear()
self._contactsViews[self._selectedBackendId].clear()
self._change_loggedin_status(self.NULL_BACKEND)
backgroundLogin.start()
def _on_notebook_switch_page(self, notebook, page, page_num):
- if page_num == 1:
+ if page_num == self.CONTACTS_TAB:
self._contactsViews[self._selectedBackendId].update()
- elif page_num == 3:
+ elif page_num == self.RECENT_TAB:
self._recentViews[self._selectedBackendId].update()
+ elif page_num == self.MESSAGES_TAB:
+ self._messagesViews[self._selectedBackendId].update()
tabTitle = self._notebook.get_tab_label(self._notebook.get_nth_page(page_num)).get_text()
if hildon is not None:
else:
self._window.set_title("%s - %s" % (self.__pretty_app_name__, tabTitle))
- def _on_number_selected(self, number):
- self._dialpads[self._selectedBackendId].set_number(number)
- self._notebook.set_current_page(0)
+ def _on_number_selected(self, action, number, message):
+ if action == "select":
+ self._dialpads[self._selectedBackendId].set_number(number)
+ self._notebook.set_current_page(0)
+ elif action == "dial":
+ self._on_dial_clicked(number)
+ elif action == "sms":
+ self._on_sms_clicked(number, message)
+ else:
+ assert False, "Unknown action: %s" % action
+
+ def _on_sms_clicked(self, number, message):
+ """
+ @todo Potential blocking on web access, maybe we should defer parts of this or put up a dialog?
+ """
+ assert number
+ assert message
+ try:
+ loggedIn = self._phoneBackends[self._selectedBackendId].is_authed()
+ except RuntimeError, e:
+ loggedIn = False
+ self._errorDisplay.push_exception(e)
+ return
+
+ if not loggedIn:
+ self._errorDisplay.push_message(
+ "Backend link with grandcentral is not working, please try again"
+ )
+ return
+
+ dialed = False
+ try:
+ self._phoneBackends[self._selectedBackendId].send_sms(number, message)
+ dialed = True
+ except RuntimeError, e:
+ self._errorDisplay.push_exception(e)
+ except ValueError, e:
+ self._errorDisplay.push_exception(e)
def _on_dial_clicked(self, number):
"""
@todo Potential blocking on web access, maybe we should defer parts of this or put up a dialog?
"""
+ assert number
try:
loggedIn = self._phoneBackends[self._selectedBackendId].is_authed()
except RuntimeError, e: