def _add_search_item(self, source, param, item, remaining=0, data=None): if not item: if grilo._search_callback_counter == 0 and grilo.search_source: self.emit('no-music-found') return if data != self.model: return artist = utils.get_artist_name(item) album = utils.get_album_title(item) composer = item.get_composer() key = '%s-%s' % (artist, album) if key not in self._albums: self._albums[key] = Grl.Media() self._albums[key].set_title(album) self._albums[key].add_artist(artist) self._albums[key].set_composer(composer) self._albums[key].set_source(source.get_id()) self._albums[key].songs = [] 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].songs.append(item) self._add_item(source, None, item, 0, [self.model, 'song'])
def _add_search_item(self, source, param, item, remaining=0, data=None): if not item: if (grilo._search_callback_counter == 0 and grilo.search_source): self.props.search_state = Search.State.NO_RESULT return if data != self.model: return artist = utils.get_artist_name(item) album = utils.get_album_title(item) key = '%s-%s' % (artist, album) if key not in self._albums: self._albums[key] = Grl.Media() self._albums[key].set_title(album) self._albums[key].add_artist(artist) self._albums[key].set_source(source.get_id()) self._albums[key].songs = [] 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].songs.append(item) self._add_item(source, None, item, 0, [self.model, 'song'])
def _store_btn_clicked_cb(self, *args): selection = self._browser_window.get_browser().get_selection() success, model, iter = selection.get_selected() if success: source = model.get_value(iter, BrowserListStore.SOURCE_COLUMN) container = model.get_value(iter, BrowserListStore.CONTENT_COLUMN) # dialog = StoreContentDialog(self) if dialog.run() == Gtk.ResponseType.OK: url = dialog.get_url() if url: media = Grl.Media() media.set_url(url) else: media = Grl.MediaBox() media.set_title(dialog.get_title()) media.set_description(dialog.get_description()) source.store(container, media, self._store_cb, None) dialog.destroy()
class TestMetadataSource(unittest.TestCase): MEDIA = Grl.Media() METADATA_FLAGS = Grl.MetadataResolutionFlags( Grl.MetadataResolutionFlags.FULL | Grl.MetadataResolutionFlags.IDLE_RELAY) def __init__(self, method_name): super(TestMetadataSource, self).__init__(method_name) Grl.init([]) self.registry = Grl.Registry.get_default() self.registry.load_all() ops = Grl.SupportedOps(Grl.SupportedOps.RESOLVE | Grl.SupportedOps.SET_METADATA) sources = self.registry.get_sources_by_operations(ops, False) if sources: self.metadata_source = sources[0] def test_supported_ops(self): ops = self.metadata_source.supported_operations() self.assertTrue(ops) def test_supported_keys(self): keys = self.metadata_source.supported_keys() self.assertTrue(keys) def test_slow_keys(self): keys = self.metadata_source.slow_keys() def test_filter_supported(self): sources = self.registry.get_sources(False) keys = self.registry.get_metadata_keys() for source in sources: supported, unsupported = source.filter_supported(keys, True) self.assertEqual(len(supported) + len(unsupported), len(keys)) def test_filter_slow(self): sources = self.registry.get_sources(False) keys = self.registry.get_metadata_keys() for source in sources: fast, slow = source.filter_slow(keys, True) self.assertEqual(len(fast) + len(slow), len(keys)) def test_filter_writable(self): sources = self.registry.get_sources(False) keys = self.registry.get_metadata_keys() for source in sources: writable, unwritable = source.filter_writable(keys, True) self.assertEqual(len(writable) + len(unwritable), len(keys)) def test_key_depends(self): key_id = self.registry.lookup_metadata_key(constants.KEY_ID) keys = self.metadata_source.key_depends(key_id) self.assertTrue(keys is not None) def test_writable_keys(self): keys = self.metadata_source.writable_keys() self.assertTrue(keys is not None) def test_resolve(self): self.metadata_source.resolve([], self.MEDIA, self.METADATA_FLAGS, self.resolve_cb, None) def resolve_cb(self, *args): pass def test_resolve_sync(self): try: self.metadata_source.resolve_sync([], self.MEDIA, self.METADATA_FLAGS) except Exception, ex: self.fail(ex)