def set_search_text(self, search_term, fields_filter): query_matcher = { 'album': { 'search_all': Query.get_albums_with_any_match, 'search_artist': Query.get_albums_with_artist_match, 'search_composer': Query.get_albums_with_composer_match, 'search_album': Query.get_albums_with_album_match, 'search_track': Query.get_albums_with_track_match, }, 'artist': { 'search_all': Query.get_artists_with_any_match, 'search_artist': Query.get_artists_with_artist_match, 'search_composer': Query.get_artists_with_composer_match, 'search_album': Query.get_artists_with_album_match, 'search_track': Query.get_artists_with_track_match, }, 'song': { 'search_all': Query.get_songs_with_any_match, 'search_artist': Query.get_songs_with_artist_match, 'search_composer': Query.get_songs_with_composer_match, 'search_album': Query.get_songs_with_album_match, 'search_track': Query.get_songs_with_track_match, }, } self.model = Gtk.TreeStore( GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, # item title or header text GObject.TYPE_STRING, # artist for albums and songs GdkPixbuf.Pixbuf, # album art GObject.TYPE_OBJECT, # item GObject.TYPE_BOOLEAN, GObject.TYPE_INT, GObject.TYPE_STRING, GObject.TYPE_INT, GObject.TYPE_BOOLEAN, GObject.TYPE_STRING, # type GObject.TYPE_INT, GObject.TYPE_STRING, # composer ) self.filter_model = self.model.filter_new(None) self.filter_model.set_visible_func(self._filter_visible_func) self._view.set_model(self.filter_model) self._albums = {} self._artists = {} if search_term == "": return albums_iter = self.model.insert_with_values(None, -1, [2, 9], [_("Albums"), 2]) artists_iter = self.model.insert_with_values(None, -1, [2, 9], [_("Artists"), 2]) songs_iter = self.model.insert_with_values(None, -1, [2, 9], [_("Songs"), 2]) playlists_iter = self.model.insert_with_values(None, -1, [2, 9], [_("Playlists"), 2]) self.head_iters = [ albums_iter, artists_iter, songs_iter, playlists_iter ] self.songs_model = self.model.filter_new( self.model.get_path(songs_iter)) # Use queries for Tracker if not grilo.search_source or \ grilo.search_source.get_id() == 'grl-tracker-source': for category in ('album', 'artist', 'song'): query = query_matcher[category][fields_filter](search_term) grilo.populate_custom_query(query, self._add_item, -1, [self.model, category]) 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_search_item, self.model)
def set_search_text(self, search_term, fields_filter): query_matcher = { 'album': { 'search_all': Query.get_albums_with_any_match, 'search_artist': Query.get_albums_with_artist_match, 'search_composer': Query.get_albums_with_composer_match, 'search_album': Query.get_albums_with_album_match, 'search_track': Query.get_albums_with_track_match, }, 'artist': { 'search_all': Query.get_artists_with_any_match, 'search_artist': Query.get_artists_with_artist_match, 'search_composer': Query.get_artists_with_composer_match, 'search_album': Query.get_artists_with_album_match, 'search_track': Query.get_artists_with_track_match, }, 'song': { 'search_all': Query.get_songs_with_any_match, 'search_artist': Query.get_songs_with_artist_match, 'search_composer': Query.get_songs_with_composer_match, 'search_album': Query.get_songs_with_album_match, 'search_track': Query.get_songs_with_track_match, }, } self.model = Gtk.TreeStore( GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, # item title or header text GObject.TYPE_STRING, # artist for albums and songs GdkPixbuf.Pixbuf, # album art GObject.TYPE_OBJECT, # item GObject.TYPE_BOOLEAN, GObject.TYPE_INT, GObject.TYPE_STRING, GObject.TYPE_INT, GObject.TYPE_BOOLEAN, GObject.TYPE_STRING, # type GObject.TYPE_INT, GObject.TYPE_STRING, # composer ) self.filter_model = self.model.filter_new(None) self.filter_model.set_visible_func(self._filter_visible_func) self.view.set_model(self.filter_model) self._albums = {} self._artists = {} if search_term == "": return albums_iter = self.model.insert_with_values(None, -1, [2, 9], [_("Albums"), 2]) artists_iter = self.model.insert_with_values(None, -1, [2, 9], [_("Artists"), 2]) songs_iter = self.model.insert_with_values(None, -1, [2, 9], [_("Songs"), 2]) playlists_iter = self.model.insert_with_values(None, -1, [2, 9], [_("Playlists"), 2]) self.head_iters = [albums_iter, artists_iter, songs_iter, playlists_iter] self.songs_model = self.model.filter_new(self.model.get_path(songs_iter)) # Use queries for Tracker if not grilo.search_source or \ grilo.search_source.get_id() == 'grl-tracker-source': for category in ('album', 'artist', 'song'): query = query_matcher[category][fields_filter](search_term) grilo.populate_custom_query(query, self._add_item, -1, [self.model, category]) 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_search_item, self.model)