X-Git-Url: http://git.maemo.org/git/?p=watersofshiloah;a=blobdiff_plain;f=src%2Fmormonchannel_gtk.py;h=c29a9824ad3d4b089374a3f86020531b6ad24efc;hp=8ac8d4ccc32a42c4643e14bab11908a3f559ceaf;hb=aa0e8ac26b860cad03adb0380b4701ba11f3b5db;hpb=64784fcf8a918d6b210e301f3fa70e5b291d9cd3 diff --git a/src/mormonchannel_gtk.py b/src/mormonchannel_gtk.py index 8ac8d4c..c29a982 100755 --- a/src/mormonchannel_gtk.py +++ b/src/mormonchannel_gtk.py @@ -2,24 +2,31 @@ # -*- coding: utf-8 -*- """ +@todo backgrounds need some resizing +@todo Re-use windows for better performance +@bug For some reason, the back/close button doesn't work when I nest multiple levels +@todo Need to confirm id's are persistent (not just for todos but broken behavior on transition) + @todo Track recent + @todo Persisted Pause + @todo Favorites +@todo Sleep timer @todo Reverse order option. Toggle between playing ascending/descending chronological order -@todo Track recent +@todo Podcast integration """ from __future__ import with_statement +import os import gc import logging import ConfigParser +import gobject +import dbus +import dbus.mainloop.glib import gtk try: - import hildon -except ImportError: - hildon = None - -try: import osso except ImportError: osso = None @@ -30,6 +37,7 @@ import util.misc as misc_utils import imagestore import player +import stream_index import windows @@ -41,24 +49,36 @@ class MormonChannelProgram(hildonize.get_app_class()): def __init__(self): super(MormonChannelProgram, self).__init__() - self._player = player.Player() - self._store = imagestore.ImageStore("../data", "../data") - - if not hildonize.IS_HILDON_SUPPORTED: - _moduleLogger.info("No hildonization support") - - if osso is not None: - self._osso_c = osso.Context(constants.__app_name__, constants.__version__, False) - self._deviceState = osso.DeviceState(self._osso_c) - self._deviceState.set_device_state_callback(self._on_device_state_change, 0) - else: - _moduleLogger.info("No osso support") - self._osso_c = None - self._deviceState = None - - self._sourceSelector = windows.SourceSelector(self._player, self._store) - self._sourceSelector.window.connect("destroy", self._on_destroy) - self._load_settings() + currentPath = os.path.abspath(__file__) + storePath = os.path.join(os.path.split(os.path.dirname(currentPath))[0], "data") + self._store = imagestore.ImageStore(storePath, constants._cache_path_) + self._index = stream_index.AudioIndex() + self._player = player.Player(self._index) + + self._store.start() + self._index.start() + try: + if not hildonize.IS_HILDON_SUPPORTED: + _moduleLogger.info("No hildonization support") + + if osso is not None: + self._osso_c = osso.Context(constants.__app_name__, constants.__version__, False) + self._deviceState = osso.DeviceState(self._osso_c) + self._deviceState.set_device_state_callback(self._on_device_state_change, 0) + else: + _moduleLogger.info("No osso support") + self._osso_c = None + self._deviceState = None + + self._sourceSelector = windows.source.SourceSelector(self, self._player, self._store, self._index) + self._sourceSelector.window.connect("destroy", self._on_destroy) + self._sourceSelector.window.set_default_size(400, 800) + self._sourceSelector.show() + self._load_settings() + except: + self._index.stop() + self._store.stop() + raise def _save_settings(self): config = ConfigParser.SafeConfigParser() @@ -90,19 +110,25 @@ class MormonChannelProgram(hildonize.get_app_class()): @misc_utils.log_exception(_moduleLogger) def _on_destroy(self, widget = None, data = None): try: - self._save_settings() - - try: - self._deviceState.close() - except AttributeError: - pass # Either None or close was removed (in Fremantle) - try: - self._osso_c.close() - except AttributeError: - pass # Either None or close was removed (in Fremantle) + self.quit() finally: gtk.main_quit() + def quit(self): + self._save_settings() + + self._index.stop() + self._store.stop() + + try: + self._deviceState.close() + except AttributeError: + pass # Either None or close was removed (in Fremantle) + try: + self._osso_c.close() + except AttributeError: + pass # Either None or close was removed (in Fremantle) + @misc_utils.log_exception(_moduleLogger) def _on_show_about(self, widget = None, data = None): dialog = gtk.AboutDialog() @@ -119,10 +145,20 @@ class MormonChannelProgram(hildonize.get_app_class()): def run(): + gobject.threads_init() + gtk.gdk.threads_init() + l = dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) + hildonize.set_application_title(constants.__pretty_app_name__) app = MormonChannelProgram() if not PROFILE_STARTUP: - gtk.main() + try: + gtk.main() + except KeyboardInterrupt: + app.quit() + raise + else: + app.quit() if __name__ == "__main__":