Adding some todos and bugs
[gc-dialer] / src / dc_glade.py
index 14b6db5..e9e30c6 100755 (executable)
@@ -18,12 +18,16 @@ 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 Try gogol's bigger tree view items
+@todo Try gogol's wrapping for messages
+@bug Does special notifiers even work?
+@bug Messaging UI is bad(?)
+@bug Not logging back in on network reconnect
+
 @todo Figure out how to integrate with the Maemo contacts app
-@todo Look into an actor system
 @bug Session timeouts are bad, possible solutions:
        @li For every X minutes, if logged in, attempt login
        @li Restructure so code handling login/dial/sms is beneath everything else and login attempts are made if those fail
-@todo Can't text from dialpad (so can't do any arbitrary number texts)
 @todo Add logging support to make debugging issues for people a lot easier
 """
 
@@ -134,9 +138,16 @@ class Dialcentral(object):
                                self._widgetTree.get_widget("callbackcombo").get_child().set_property('hildon-input-mode', (1 << 4))
                        except TypeError, e:
                                warnings.warn(e.message)
-                       hildon.hildon_helper_set_thumb_scrollbar(self._widgetTree.get_widget('recent_scrolledwindow'), True)
-                       hildon.hildon_helper_set_thumb_scrollbar(self._widgetTree.get_widget('message_scrolledwindow'), True)
-                       hildon.hildon_helper_set_thumb_scrollbar(self._widgetTree.get_widget('contacts_scrolledwindow'), True)
+                       for scrollingWidget in (
+                               'recent_scrolledwindow',
+                               'message_scrolledwindow',
+                               'contacts_scrolledwindow',
+                               "phoneSelectionMessage_scrolledwindow",
+                               "phonetypes_scrolledwindow",
+                               "smsMessage_scrolledwindow",
+                               "smsMessage_scrolledEntry",
+                       ):
+                               hildon.hildon_helper_set_thumb_scrollbar(self._widgetTree.get_widget(scrollingWidget), True)
 
                        gtkMenu = self._widgetTree.get_widget("dialpad_menubar")
                        menu = gtk.Menu()
@@ -215,10 +226,13 @@ class Dialcentral(object):
                                self._alarmHandler = alarm_handler.AlarmHandler()
                        except ImportError:
                                alarm_handler = None
+                       except Exception:
+                               with gtk_toolbox.gtk_lock():
+                                       self._errorDisplay.push_exception()
+                               alarm_handler = None
                        if hildon is not None:
                                import led_handler
                                self._ledHandler = led_handler.LedHandler()
-                               self._ledHandler.off()
 
                        # Setup maemo specifics
                        try:
@@ -237,7 +251,6 @@ class Dialcentral(object):
                        import gv_backend
                        import gc_backend
                        import file_backend
-                       import evo_backend
                        import gc_views
 
                        try:
@@ -296,7 +309,6 @@ class Dialcentral(object):
                                        ),
                                })
 
-                       evoBackend = evo_backend.EvolutionAddressBook()
                        fsContactsPath = os.path.join(constants._data_path_, "contacts")
                        fileBackend = file_backend.FilesystemAddressBookFactory(fsContactsPath)
                        for backendId in (self.GV_BACKEND, self.GC_BACKEND):
@@ -307,7 +319,6 @@ class Dialcentral(object):
 
                                addressBooks = [
                                        self._phoneBackends[backendId],
-                                       evoBackend,
                                        fileBackend,
                                ]
                                mergedBook = gc_views.MergedAddressBook(addressBooks, gc_views.MergedAddressBook.advanced_lastname_sorter)
@@ -592,9 +603,6 @@ class Dialcentral(object):
                        config.write(configFile)
 
        def _refresh_active_tab(self):
-               if self._ledHandler is not None:
-                       self._ledHandler.off()
-
                pageIndex = self._notebook.get_current_page()
                if pageIndex == self.CONTACTS_TAB:
                        self._contactsViews[self._selectedBackendId].update(force=True)
@@ -603,6 +611,10 @@ class Dialcentral(object):
                elif pageIndex == self.MESSAGES_TAB:
                        self._messagesViews[self._selectedBackendId].update(force=True)
 
+               if pageIndex in (self.RECENT_TAB, self.MESSAGES_TAB):
+                       if self._ledHandler is not None:
+                               self._ledHandler.off()
+
        def _on_close(self, *args, **kwds):
                try:
                        if self._osso is not None:
@@ -679,15 +691,23 @@ class Dialcentral(object):
 
        def _on_notebook_switch_page(self, notebook, page, pageIndex):
                self._reset_tab_refresh()
+
+               didRecentUpdate = False
+               didMessagesUpdate = False
+
                if pageIndex == self.RECENT_TAB:
-                       self._recentViews[self._selectedBackendId].update()
+                       didRecentUpdate = self._recentViews[self._selectedBackendId].update()
                elif pageIndex == self.MESSAGES_TAB:
-                       self._messagesViews[self._selectedBackendId].update()
+                       didMessagesUpdate = self._messagesViews[self._selectedBackendId].update()
                elif pageIndex == self.CONTACTS_TAB:
                        self._contactsViews[self._selectedBackendId].update()
                elif pageIndex == self.ACCOUNT_TAB:
                        self._accountViews[self._selectedBackendId].update()
 
+               if didRecentUpdate or didMessagesUpdate:
+                       if self._ledHandler is not None:
+                               self._ledHandler.off()
+
        def _set_tab_refresh(self, *args):
                pageIndex = self._notebook.get_current_page()
                child = self._notebook.get_nth_page(pageIndex)
@@ -730,6 +750,9 @@ class Dialcentral(object):
                except ValueError, e:
                        self._errorDisplay.push_exception()
 
+               if dialed:
+                       self._dialpads[self._selectedBackendId].clear()
+
        def _on_dial_clicked(self, number):
                assert number, "No number to call"
                try:
@@ -790,13 +813,13 @@ def run_doctest():
 
 def run_dialpad():
        _lock_file = os.path.join(constants._data_path_, ".lock")
-       with gtk_toolbox.flock(_lock_file, 0):
-               gtk.gdk.threads_init()
+       #with gtk_toolbox.flock(_lock_file, 0):
+       gtk.gdk.threads_init()
 
-               if hildon is not None:
-                       gtk.set_application_name(constants.__pretty_app_name__)
-               handle = Dialcentral()
-               gtk.main()
+       if hildon is not None:
+               gtk.set_application_name(constants.__pretty_app_name__)
+       handle = Dialcentral()
+       gtk.main()
 
 
 class DummyOptions(object):