[gnome-music] view: Group songs into albums if source doesn't support queries
- From: Vadim Rutkovsky <vrutkovsky src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music] view: Group songs into albums if source doesn't support queries
- Date: Mon, 12 May 2014 08:50:04 +0000 (UTC)
commit ce89c1ce7642d74a24172a4e3cd52ffe402dcac1
Author: Arnel Borja <arnelborja src gnome org>
Date: Fri May 9 02:57:47 2014 +0800
view: Group songs into albums if source doesn't support queries
gnomemusic/grilo.py | 11 +++++++++--
gnomemusic/view.py | 37 ++++++++++++++++++++++++++++++++-----
gnomemusic/widgets.py | 4 ++--
3 files changed, 43 insertions(+), 9 deletions(-)
---
diff --git a/gnomemusic/grilo.py b/gnomemusic/grilo.py
index 679765f..ddc7338 100644
--- a/gnomemusic/grilo.py
+++ b/gnomemusic/grilo.py
@@ -163,8 +163,15 @@ class Grilo(GObject.GObject):
self.populate_items(Query.all_songs(), offset, callback, count)
@log
- def populate_album_songs(self, album_id, callback, count=-1):
- self.populate_items(Query.album_songs(album_id), 0, callback, count)
+ def populate_album_songs(self, album, callback, count=-1):
+ if album.get_source() == 'grl-tracker-source':
+ self.populate_items(Query.album_songs(album.get_id()), 0, callback, count)
+ else:
+ source = self.sources[album.get_source()]
+ length = len(album.tracks)
+ for i, track in enumerate(album.tracks):
+ callback(source, None, track, length-(i+1), None)
+ callback(source, None, None, 0, None)
@log
def populate_custom_query(self, query, callback, count=-1, data=None):
diff --git a/gnomemusic/view.py b/gnomemusic/view.py
index cc8e8ea..3fe3598 100644
--- a/gnomemusic/view.py
+++ b/gnomemusic/view.py
@@ -404,7 +404,7 @@ class Albums(ViewContainer):
@log
def _get_selected_album_songs(self):
grilo.populate_album_songs(
- self.albums_selected[self.albums_index].get_id(),
+ self.albums_selected[self.albums_index],
self._add_selected_item)
self.albums_index += 1
@@ -759,7 +759,7 @@ class Artists (ViewContainer):
@log
def _get_selected_album_songs(self):
grilo.populate_album_songs(
- self.albums_selected[self.albums_index].get_id(),
+ self.albums_selected[self.albums_index],
self._add_selected_item)
self.albums_index += 1
@@ -1181,6 +1181,7 @@ class Search(ViewContainer):
self.songs_model = self._model
self.albums_selected = []
+ self._albums = {}
self._albumWidget = Widgets.AlbumWidget(player)
self._albumWidget.view.connect('selection-mode-request', self._on_selection_mode_request)
self.add(self._albumWidget)
@@ -1242,6 +1243,31 @@ class Search(ViewContainer):
if self.get_visible_child() == self._artistAlbumsWidget:
self._artistAlbumsWidget.set_selection_mode(self.header_bar._selectionMode)
+ @log
+ def _add_search_item(self, source, param, item, remaining=0, data=None):
+ if not item or data != self._model:
+ return
+
+ artist = item.get_string(Grl.METADATA_KEY_ARTIST) \
+ or item.get_author() \
+ or _("Unknown Artist")
+ album = item.get_string(Grl.METADATA_KEY_ALBUM) \
+ or _("Unknown Album")
+
+ key = '%s-%s' % (artist, album)
+ if not key in self._albums:
+ self._albums[key] = Grl.MediaBox()
+ self._albums[key].set_title(album)
+ self._albums[key].add_author(artist)
+ self._albums[key].set_source(source.get_id())
+ self._albums[key].tracks = []
+ self._add_item(source, None, self._albums[key], 0, [self._model, 'album'])
+ self._add_item(source, None, self._albums[key], 0, [self._model, 'artist'])
+
+ self._albums[key].tracks.append(item)
+ self._add_item(source, None, item, 0, [self._model, 'song'])
+
+ @log
def _add_item(self, source, param, item, remaining=0, data=None):
if data is None:
return
@@ -1359,7 +1385,7 @@ class Search(ViewContainer):
@log
def _get_selected_albums_songs(self):
grilo.populate_album_songs(
- self.albums_selected[self.albums_index].get_id(),
+ self.albums_selected[self.albums_index],
self._add_selected_albums_songs)
self.albums_index += 1
@@ -1393,7 +1419,7 @@ class Search(ViewContainer):
@log
def _get_selected_artists_albums_songs(self):
grilo.populate_album_songs(
- self.artists_albums_selected[self.artists_albums_index].get_id(),
+ self.artists_albums_selected[self.artists_albums_index],
self._add_selected_artists_albums_songs)
self.artists_albums_index += 1
@@ -1460,6 +1486,7 @@ class Search(ViewContainer):
self.filter_model.set_visible_func(self._filter_visible_func)
self.view.set_model(self.filter_model)
+ self._albums = {}
self._artists = {}
if search_term == "":
@@ -1482,4 +1509,4 @@ class Search(ViewContainer):
if not grilo.search_source or \
grilo.search_source.get_id() != 'grl-tracker-source':
# nope, can't do - reverting to Search
- grilo.search(search_term, self._add_item, [self._model, 'song'])
+ grilo.search(search_term, self._add_search_item, self._model)
diff --git a/gnomemusic/widgets.py b/gnomemusic/widgets.py
index 092f5b6..0b64a29 100644
--- a/gnomemusic/widgets.py
+++ b/gnomemusic/widgets.py
@@ -192,7 +192,7 @@ class AlbumWidget(Gtk.EventBox):
else:
self.duration = 0
self._create_model()
- GLib.idle_add(grilo.populate_album_songs, item.get_id(), self.add_item)
+ GLib.idle_add(grilo.populate_album_songs, item, self.add_item)
header_bar._select_button.connect(
'toggled', self._on_header_select_button_toggled)
header_bar._cancel_button.connect(
@@ -494,7 +494,7 @@ class ArtistAlbumWidget(Gtk.HBox):
str(album.get_creation_date().get_year())
)
self.tracks = []
- GLib.idle_add(grilo.populate_album_songs, album.get_id(), self.add_item)
+ GLib.idle_add(grilo.populate_album_songs, album, self.add_item)
self.pack_start(self.ui.get_object('ArtistAlbumWidget'), True, True, 0)
self.show_all()
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]