[gnome-music/wip/jfelder/searchview-new-style: 14/15] grltrackerwrapper: Order queries top to bottom
- From: Marinus Schraal <mschraal src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/jfelder/searchview-new-style: 14/15] grltrackerwrapper: Order queries top to bottom
- Date: Mon, 5 Aug 2019 21:39:16 +0000 (UTC)
commit f66c280ca8c076a7851c51ee072eef8d702d8927
Author: Marinus Schraal <mschraal gnome org>
Date: Mon Aug 5 21:29:46 2019 +0200
grltrackerwrapper: Order queries top to bottom
Artists are shown on top, so query them first. And so on.
gnomemusic/grilowrappers/grltrackerwrapper.py | 72 ++++++++++++++-------------
gnomemusic/views/searchview.py | 7 +++
2 files changed, 44 insertions(+), 35 deletions(-)
---
diff --git a/gnomemusic/grilowrappers/grltrackerwrapper.py b/gnomemusic/grilowrappers/grltrackerwrapper.py
index 40c862a1..97953c81 100644
--- a/gnomemusic/grilowrappers/grltrackerwrapper.py
+++ b/gnomemusic/grilowrappers/grltrackerwrapper.py
@@ -627,20 +627,21 @@ class GrlTrackerWrapper(GObject.GObject):
GLib.utf8_normalize(
GLib.utf8_casefold(text, -1), -1, GLib.NormalizeMode.NFKD))
+ # Artist search
+
query = """
SELECT DISTINCT
- rdf:type(?song)
- tracker:id(?song) AS ?id
+ rdf:type(?artist)
+ tracker:id(?artist) AS ?id
WHERE {
- ?song a nmm:MusicPiece .
+ ?song a nmm:MusicPiece ;
+ nmm:musicAlbum ?album ;
+ nmm:performer ?artist .
BIND(tracker:normalize(
- nie:title(nmm:musicAlbum(?song)), 'nfkd') AS ?match1) .
+ nmm:artistName(nmm:albumArtist(?album)), 'nfkd') AS ?match1) .
BIND(tracker:normalize(
nmm:artistName(nmm:performer(?song)), 'nfkd') AS ?match2) .
- BIND(tracker:normalize(
- nie:title(?song), 'nfkd') AS ?match3) .
- BIND(
- tracker:normalize(nmm:composer(?song), 'nfkd') AS ?match4) .
+ BIND(tracker:normalize(nmm:composer(?song), 'nfkd') AS ?match4) .
FILTER (
CONTAINS(tracker:case-fold(
tracker:unaccent(?match1)), "%(name)s")
@@ -648,9 +649,6 @@ class GrlTrackerWrapper(GObject.GObject):
|| CONTAINS(tracker:case-fold(
tracker:unaccent(?match2)), "%(name)s")
|| CONTAINS(tracker:case-fold(?match2), "%(name)s")
- || CONTAINS(tracker:case-fold(
- tracker:unaccent(?match3)), "%(name)s")
- || CONTAINS(tracker:case-fold(?match3), "%(name)s")
|| CONTAINS(tracker:case-fold(
tracker:unaccent(?match4)), "%(name)s")
|| CONTAINS(tracker:case-fold(?match4), "%(name)s")
@@ -663,25 +661,25 @@ class GrlTrackerWrapper(GObject.GObject):
'name': term
}
- filter_ids = []
+ artist_filter_ids = []
- def songs_filter(coresong):
- return coresong.media.get_id() in filter_ids
+ def artist_filter(coreartist):
+ return coreartist.media.get_id() in artist_filter_ids
- def songs_search_cb(source, op_id, media, data, error):
+ def artist_search_cb(source, op_id, media, data, error):
if error:
print("ERROR", error)
return
if not media:
- self._song_search_tracker.set_filter_func(songs_filter)
+ self._artist_search_model.set_filter_func(artist_filter)
return
- filter_ids.append(media.get_id())
+ artist_filter_ids.append(media.get_id())
options = self._fast_options.copy()
-
- self._source.query(query, self.METADATA_KEYS, options, songs_search_cb)
+ self._source.query(
+ query, self.METADATA_KEYS, options, artist_search_cb)
# Album search
@@ -735,21 +733,22 @@ class GrlTrackerWrapper(GObject.GObject):
self._source.query(
query, self.METADATA_KEYS, options, albums_search_cb)
- # Artist search
+ # Song search
query = """
SELECT DISTINCT
- rdf:type(?artist)
- tracker:id(?artist) AS ?id
+ rdf:type(?song)
+ tracker:id(?song) AS ?id
WHERE {
- ?song a nmm:MusicPiece ;
- nmm:musicAlbum ?album ;
- nmm:performer ?artist .
+ ?song a nmm:MusicPiece .
BIND(tracker:normalize(
- nmm:artistName(nmm:albumArtist(?album)), 'nfkd') AS ?match1) .
+ nie:title(nmm:musicAlbum(?song)), 'nfkd') AS ?match1) .
BIND(tracker:normalize(
nmm:artistName(nmm:performer(?song)), 'nfkd') AS ?match2) .
- BIND(tracker:normalize(nmm:composer(?song), 'nfkd') AS ?match4) .
+ BIND(tracker:normalize(
+ nie:title(?song), 'nfkd') AS ?match3) .
+ BIND(
+ tracker:normalize(nmm:composer(?song), 'nfkd') AS ?match4) .
FILTER (
CONTAINS(tracker:case-fold(
tracker:unaccent(?match1)), "%(name)s")
@@ -757,6 +756,9 @@ class GrlTrackerWrapper(GObject.GObject):
|| CONTAINS(tracker:case-fold(
tracker:unaccent(?match2)), "%(name)s")
|| CONTAINS(tracker:case-fold(?match2), "%(name)s")
+ || CONTAINS(tracker:case-fold(
+ tracker:unaccent(?match3)), "%(name)s")
+ || CONTAINS(tracker:case-fold(?match3), "%(name)s")
|| CONTAINS(tracker:case-fold(
tracker:unaccent(?match4)), "%(name)s")
|| CONTAINS(tracker:case-fold(?match4), "%(name)s")
@@ -769,25 +771,25 @@ class GrlTrackerWrapper(GObject.GObject):
'name': term
}
- artist_filter_ids = []
+ filter_ids = []
- def artist_filter(coreartist):
- return coreartist.media.get_id() in artist_filter_ids
+ def songs_filter(coresong):
+ return coresong.media.get_id() in filter_ids
- def artist_search_cb(source, op_id, media, data, error):
+ def songs_search_cb(source, op_id, media, data, error):
if error:
print("ERROR", error)
return
if not media:
- self._artist_search_model.set_filter_func(artist_filter)
+ self._song_search_tracker.set_filter_func(songs_filter)
return
- artist_filter_ids.append(media.get_id())
+ filter_ids.append(media.get_id())
options = self._fast_options.copy()
- self._source.query(
- query, self.METADATA_KEYS, options, artist_search_cb)
+
+ self._source.query(query, self.METADATA_KEYS, options, songs_search_cb)
def get_album_art_for_item(self, coresong, callback):
"""Placeholder until we got a better solution
diff --git a/gnomemusic/views/searchview.py b/gnomemusic/views/searchview.py
index defe0395..4feaa2c5 100644
--- a/gnomemusic/views/searchview.py
+++ b/gnomemusic/views/searchview.py
@@ -284,6 +284,13 @@ class SearchView(Gtk.Stack):
return
first_child = self._album_flowbox.get_child_at_index(0)
+ # FIXME: It looks like it is possible that the widget is not
+ # yet created, resulting in a crash with first_child being
+ # None.
+ # Look for a cleaner solution.
+ if first_child is None:
+ return
+
child_height = first_child.get_allocation().height
if allocation.height > 1.5 * child_height:
for i in range(nb_children - 1, -1, -1):
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]