#
import gtk
import cgi
-import hildon
+try:
+ import hildon
+except:
+ import helldon as hildon
import jamaendo
from player import Playlist
from playerwindow import open_playerwindow
from postoffice import postoffice
import util
import logging
+import thread
+import gobject
from albumlist import TrackList
+from playlists import add_to_playlist
+from fetcher import Fetcher
+
import webbrowser
log = logging.getLogger(__name__)
hildon.StackableWindow.__init__(self)
self.set_title(album.artist_name)
self.album = album
+ self.fetcher = None
self.connect('destroy', self.on_destroy)
self.tracks = TrackList(numbers=True)
self.tracks.connect('row-activated', self.row_activated)
- self.tracklist = jamaendo.get_tracks(album.ID)
- for track in self.tracklist:
- self.tracks.add_track(track)
+ self.tracklist = []
+ #self.tracklist = jamaendo.get_tracks(album.ID)
+ #for track in self.tracklist:
+ # self.tracks.add_track(track)
top_hbox.pack_start(vbox1, False)
top_hbox.pack_start(vbox2, True)
postoffice.notify('request-album-cover', self.album.ID, 300)
self.create_menu()
+ self.start_track_fetcher()
def create_menu(self):
def on_player(*args):
player.set_label("Open player")
player.connect("clicked", on_player)
self.menu.append(player)
+ player = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
+ player.set_label("Add to playlist")
+ player.connect("clicked", self.on_add_to_playlist)
+ self.menu.append(player)
self.menu.show_all()
self.set_app_menu(self.menu)
def on_destroy(self, wnd):
postoffice.disconnect('album-cover', self)
+ if self.fetcher:
+ self.fetcher.stop()
+ self.fetcher = None
+
+ def start_track_fetcher(self):
+ if self.fetcher:
+ self.fetcher.stop()
+ self.fetcher = None
+ self.fetcher = Fetcher(lambda: jamaendo.get_tracks(self.album.ID), self,
+ on_item = self.on_track_result,
+ on_ok = self.on_track_complete,
+ on_fail = self.on_track_complete)
+ self.fetcher.start()
+
+ def on_track_result(self, wnd, item):
+ if wnd is self:
+ self.tracklist.append(item)
+ self.tracks.add_track(item)
+
+ def on_track_complete(self, wnd, error=None):
+ if wnd is self:
+ self.fetcher.stop()
+ self.fetcher = None
def on_album_cover(self, albumid, size, cover):
if albumid == self.album.ID and size == 300:
self.cover.set_from_file(cover)
+ def on_add_to_playlist(self, button, user_data=None):
+ add_to_playlist(self, self.tracklist)
+
def make_imagebutton(self, name, cb):
btn = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
btn.set_relief(gtk.RELIEF_NONE)
return btn
def on_goto_artist(self, btn):
- artist = jamaendo.get_artist(int(self.album.artist_id))
- self.open_item(artist)
+ def threadfun(wnd, artist_id):
+ try:
+ artist = jamaendo.get_artist(artist_id)
+ def oncomplete(wnd, artist):
+ wnd.open_item(artist)
+ hildon.hildon_gtk_window_set_progress_indicator(wnd, 0)
+ gobject.idle_add(oncomplete, wnd, artist)
+ except:
+ def onfail(wnd):
+ hildon.hildon_gtk_window_set_progress_indicator(wnd, 0)
+ gobject.idle_add(onfail, wnd)
+ hildon.hildon_gtk_window_set_progress_indicator(self, 1)
+ thread.start_new_thread(threadfun, (self, int(self.album.artist_id)))
def on_download(self, btn):
banner = hildon.hildon_banner_show_information(self, '', "Opening in web browser")
self.open_item(self.album)
def row_activated(self, treeview, path, view_column):
+ # TODO: wait for all tracks to load
_id = self.tracks.get_track_id(path)
playlist = Playlist(self.tracklist)
playlist.jump_to(_id)