X-Git-Url: http://git.maemo.org/git/?p=jamaendo;a=blobdiff_plain;f=jamaui%2Fui.py;h=a276de7ec717939c2d6cac88bacc1eb480294946;hp=17cf1585b67ea60ada5f27e4ff2da5926bffa853;hb=3288b01ae01d4fdb65f23e80189cad301a232965;hpb=134c8caceae0c385366a1d5c1f9e6a3dd239057b diff --git a/jamaui/ui.py b/jamaui/ui.py index 17cf158..a276de7 100644 --- a/jamaui/ui.py +++ b/jamaui/ui.py @@ -11,8 +11,11 @@ import logging import gobject # we don't use the local DB... -from jamaendo.api import LocalDB, Query, Queries, refresh_dump +import jamaendo from jamaui.player import Player, Playlist +from util import jsonprint + +import ossohelper gobject.threads_init() @@ -28,73 +31,9 @@ except: log.critical('This ui only works in maemo') sys.exit(1) -class RefreshDialog(object): - def __init__(self): - self.notebook = gtk.Notebook() - info = gtk.VBox() - info.pack_start(gtk.Label("Downloading complete DB from jamendo.com."), True, False) - info.pack_start(gtk.Label("This will download approximately 8 MB."), True, False) - self.force = hildon.GtkToggleButton(gtk.HILDON_SIZE_FINGER_HEIGHT) - self.force.set_label("Force refresh") - - info.pack_start(self.force, True, False) - self.notebook.append_page(info) - - pcont = gtk.VBox() - self.progress = gtk.ProgressBar() - pcont.pack_start(self.progress, True, False) - self.notebook.append_page(pcont, - gtk.Label("Updating Database")) - self.progress.set_fraction(0) - self.progress.set_orientation(gtk.PROGRESS_LEFT_TO_RIGHT) - self.progress.set_text("Downloading...") - - self.notebook.append_page(gtk.Label("Database refreshed.")) - - self.dialog = hildon.WizardDialog(None, "Refresh", self.notebook) - self.notebook.connect("switch-page", self.on_switch) - self.dialog.set_forward_page_func(self.forward_func) - - self.refresher = None - - def on_complete(self, status): - hildon.hildon_gtk_window_set_progress_indicator(self.dialog, 0) - if status: - self.progress.set_fraction(1) - self.progress.set_text("DB up to date.") - else: - self.progress.set_fraction(0) - self.progress.set_text("Download failed.") - - def on_progress(self, percent): - if percent < 100: - self.progress.set_text("Downloading...") - self.progress.set_fraction(percent/100.0) - - def on_switch(self, notebook, page, num): - if num == 1: - hildon.hildon_gtk_window_set_progress_indicator(self.dialog, 1) - refresh_dump(self.on_complete, self.on_progress, force=self.force.get_active()) - elif self.refresher: - # cancel download - pass - return True - - def forward_func(self, notebook, current, userdata): - #page = notebook.get_nth_page(current) - if current == 0: - return True - else: - return False +from dbus.mainloop.glib import DBusGMainLoop - def show_all(self): - self.dialog.show_all() - - def run(self): - self.dialog.run() - - def hide(self): - self.dialog.hide() +DBusGMainLoop(set_as_default=True) class PlayerWindow(hildon.StackableWindow): def __init__(self, playlist=None): @@ -103,29 +42,30 @@ class PlayerWindow(hildon.StackableWindow): self.playlist = Playlist(playlist) self.player = Player() - #self.player.play(playlist) vbox = gtk.VBox() hbox = gtk.HBox() - cover = gtk.Image() + self.cover = gtk.Image() + self.cover.set_size_request(160, 160) + self.cover.set_from_stock(gtk.STOCK_CDROM, gtk.ICON_SIZE_DIALOG) vbox2 = gtk.VBox() - playlist_pos = gtk.Label("0/0 songs") - track = gtk.Label("Track name") - progress = hildon.GtkHScale() - artist = gtk.Label("Artist") - album = gtk.Label("Album") + self.playlist_pos = gtk.Label("0/0 songs") + self.track = gtk.Label("Track name") + self.progress = hildon.GtkHScale() + self.artist = gtk.Label("Artist") + self.album = gtk.Label("Album") - vbox2.pack_start(playlist_pos, False) - vbox2.pack_start(track, False) - vbox2.pack_start(progress, True, True) - vbox2.pack_start(artist, False) - vbox2.pack_start(album, False) + vbox2.pack_start(self.playlist_pos, False) + vbox2.pack_start(self.track, False) + vbox2.pack_start(self.progress, True, True) + vbox2.pack_start(self.artist, False) + vbox2.pack_start(self.album, False) - hbox.pack_start(cover, True, True, 0) + hbox.pack_start(self.cover, True, True, 0) hbox.pack_start(vbox2, True, True, 0) vbox.pack_start(hbox, True, True, 0) @@ -150,14 +90,30 @@ class PlayerWindow(hildon.StackableWindow): btn.connect('clicked', cb) btns.add(btn) + def update_state(self): + item = self.playlist.current() + if item: + if not item.name: + item.load() + self.track.set_text(item.name) + self.playlist_pos.set_text("%d/%d songs", + self.playlist.current_index(), + len(self.playlist)) + self.artist.set_text(item.artist_name) + self.album.set_text(item.album_name) + self.cover.set_from_file(jamaendo.get_album_cover(item.album_id, size=160)) + def on_play(self, button): self.player.play(self.playlist) + self.update_state() def on_pause(self, button): self.player.pause() def on_prev(self, button): self.player.prev() + self.update_state() def on_next(self, button): self.player.next() + self.update_state() def on_stop(self, button): self.player.stop() @@ -178,11 +134,19 @@ class SearchWindow(hildon.StackableWindow): hbox.pack_start(self.entry, True, True, 0) hbox.pack_start(btn, False) + btnbox = gtk.HBox() + playbtn = hildon.GtkButton(gtk.HILDON_SIZE_FINGER_HEIGHT) + playbtn.set_label("Play selected") + playbtn.connect('clicked', self.play_selected) + btnbox.pack_start(playbtn, False) + self.results = hildon.TouchSelector(text=True) self.results.connect("changed", self.selection_changed) + self.results.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE) vbox.pack_start(hbox, False) vbox.pack_start(self.results, True, True, 0) + vbox.pack_start(btnbox, False) self.add(vbox) @@ -192,27 +156,43 @@ class SearchWindow(hildon.StackableWindow): def on_search(self, w): txt = self.entry.get_text() - print "Search for: %s" % (txt) - #db = LocalDB() - #db.connect() - for album in Queries.search_albums(query=txt): - title = "%s - %s" % (album['artist_name'], album['name']) + for album in jamaendo.search_albums(query=txt): + title = "%s - %s" % (album.artist_name, album.name) self.idmap[title] = album - print "Found %s" % (album) self.results.append_text(title) def selection_changed(self, results, userdata): - current_selection = results.get_current_text() + pass + + def play_selected(self, btn): + current_selection = self.results.get_current_text() album = self.idmap[current_selection] - selected = [int(album['id'])] - print "Selected: %s" % (selected) - tracks = Queries.album_tracks(selected) + tracks = jamaendo.get_tracks(album.ID) if tracks: - print "Playing: %s" % (tracks) self.pwnd = PlayerWindow(tracks) self.pwnd.show_all() +class RadiosWindow(hildon.StackableWindow): + def __init__(self): + hildon.StackableWindow.__init__(self) + self.set_title("Radios") + + label = gtk.Label("Radios") + vbox = gtk.VBox(False, 0) + vbox.pack_start(label, True, True, 0) + self.add(vbox) + +class FeaturedWindow(hildon.StackableWindow): + def __init__(self): + hildon.StackableWindow.__init__(self) + self.set_title("Featured") + + label = gtk.Label("featured") + vbox = gtk.VBox(False, 0) + vbox.pack_start(label, True, True, 0) + self.add(vbox) + class PlaylistsWindow(hildon.StackableWindow): def __init__(self): hildon.StackableWindow.__init__(self) @@ -262,6 +242,16 @@ class Jamaui(object): player.connect("clicked", self.on_player) self.menu.append(player) + player = hildon.GtkButton(gtk.HILDON_SIZE_AUTO) + player.set_label("Favorites") + player.connect("clicked", self.on_favorites) + self.menu.append(player) + + player = hildon.GtkButton(gtk.HILDON_SIZE_AUTO) + player.set_label("Playlists") + player.connect("clicked", self.on_playlists) + self.menu.append(player) + # Don't use localdb ATM #refresh = hildon.GtkButton(gtk.HILDON_SIZE_AUTO) #refresh.set_label("Refresh") @@ -285,12 +275,14 @@ class Jamaui(object): elif os.path.isfile(os.path.join('/usr/share/jaemendo', name)): return os.path.join('/usr/share/jaemendo', name) else: - return name + return None def setup_widgets(self): - background, mask = gtk.gdk.pixbuf_new_from_file(self.find_resource(self._BG)).render_pixmap_and_mask() - self.window.realize() - self.window.window.set_back_pixmap(background, False) + bgimg = self.find_resource(self._BG) + if bgimg: + background, mask = gtk.gdk.pixbuf_new_from_file(bgimg).render_pixmap_and_mask() + self.window.realize() + self.window.window.set_back_pixmap(background, False) bbox = gtk.HButtonBox() alignment = gtk.Alignment(xalign=0.0, yalign=0.8, xscale=1.0) @@ -299,9 +291,9 @@ class Jamaui(object): self.bbox = bbox self.window.add(alignment) + self.add_mainscreen_button("Featured", "Most listened to", self.on_featured) + self.add_mainscreen_button("Radios", "The best in free music", self.on_radios) self.add_mainscreen_button("Search", "Search for artists/albums", self.on_search) - self.add_mainscreen_button("Playlists", "Browse playlists", self.on_playlists) - self.add_mainscreen_button("Favorites", "Your favorite albums", self.on_favorites) self.window.show_all() @@ -320,9 +312,10 @@ class Jamaui(object): dialog = gtk.AboutDialog() dialog.set_website("http://github.com/krig") dialog.set_website_label("http://github.com/krig") - dialog.set_name("Jamaendo") dialog.set_authors(("Kristoffer Gronlund (Purple Scout AB)",)) - dialog.set_comments("Media player for jamendo.com") + dialog.set_comments("""Jamaendo plays music from the music catalog of JAMENDO. + +JAMENDO is an online platform that distributes musical works under Creative Commons licenses.""") dialog.set_version('') dialog.run() dialog.destroy() @@ -332,11 +325,19 @@ class Jamaui(object): webbrowser.open_new(url) - def on_refresh(self, button): - dialog = RefreshDialog() - dialog.show_all() - dialog.run() - dialog.hide() + #def on_refresh(self, button): + # dialog = RefreshDialog() + # dialog.show_all() + # dialog.run() + # dialog.hide() + + def on_featured(self, button): + self.featuredwnd = FeaturedWindow() + self.featuredwnd.show_all() + + def on_radios(self, button): + self.radiownd = RadioWindow() + self.radiownd.show_all() def on_search(self, button): self.searchwnd = SearchWindow() @@ -371,11 +372,13 @@ class Jamaui(object): ''' def run(self): + ossohelper.application_init('org.jamaendo', '0.1') self.create_window() self.create_menu() self.setup_widgets() self.window.show_all() gtk.main() + ossohelper.application_exit() if __name__=="__main__": ui = Jamaui()