X-Git-Url: http://git.maemo.org/git/?p=watersofshiloah;a=blobdiff_plain;f=src%2Fmormonchannel_gtk.py;h=ffcddfd5959774e481c2bf2ffa6a9d578c3e7f71;hp=0ddff73acc382743e274e9ace71794293a35233b;hb=f5a00133b881649305561372ecd0c3b503c3fdc6;hpb=4fe668385d73efc85dc6a61dda036a2bbb906986 diff --git a/src/mormonchannel_gtk.py b/src/mormonchannel_gtk.py index 0ddff73..ffcddfd 100755 --- a/src/mormonchannel_gtk.py +++ b/src/mormonchannel_gtk.py @@ -2,24 +2,34 @@ # -*- coding: utf-8 -*- """ +@bug For some reason, the back/close button doesn't work when I nest multiple levels +@bug When switching from conference to magazines, it randomly jumps around and duplicates windows + +@todo Re-use windows for better performance +@todo Make radio program updates only happen when the app has focus to reduce CPU wakes +@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 + @todo Default with BYU Devotionals, http://speeches.byu.edu/?act=help&page=podcast """ 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 +40,7 @@ import util.misc as misc_utils import imagestore import player +import stream_index import windows @@ -41,24 +52,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 +113,26 @@ 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._player.stop() + 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,11 +149,20 @@ class MormonChannelProgram(hildonize.get_app_class()): def run(): - if hildonize.IS_HILDON_SUPPORTED: - gtk.set_application_name(constants.__pretty_app_name__) + gobject.threads_init() + gtk.gdk.threads_init() + l = dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) + + hildonize.set_application_name("FMRadio") # Playback while silent on Maemo 5 app = MormonChannelProgram() if not PROFILE_STARTUP: - gtk.main() + try: + gtk.main() + except KeyboardInterrupt: + app.quit() + raise + else: + app.quit() if __name__ == "__main__":