/usr/lib/python3/dist-packages/gnomemusic/grilo.py is in gnome-music 3.10.3-0ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | # Copyright (c) 2013 Vadim Rutkovsky <vrutkovs@redhat.com>
# Copyright (c) 2013 Arnel A. Borja <kyoushuu@yahoo.com>
# Copyright (c) 2013 Seif Lotfy <seif@lotfy.com>
# Copyright (c) 2013 Guillaume Quintard <guillaume.quintard@gmail.com>
#
# GNOME Music is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# GNOME Music is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with GNOME Music; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# The GNOME Music authors hereby grant permission for non-GPL compatible
# GStreamer plugins to be used and distributed together with GStreamer
# and GNOME Music. This permission is above and beyond the permissions
# granted by the GPL license by which GNOME Music is covered. If you
# modify this code, you may extend this exception to your version of the
# code, but you are not obligated to do so. If you do not wish to do so,
# delete this exception statement from your version.
from gi.repository import Grl, GLib, GObject
from gnomemusic.query import Query
class Grilo(GObject.GObject):
__gsignals__ = {
'ready': (GObject.SIGNAL_RUN_FIRST, None, ())
}
METADATA_KEYS = [
Grl.METADATA_KEY_ID, Grl.METADATA_KEY_TITLE,
Grl.METADATA_KEY_ARTIST, Grl.METADATA_KEY_ALBUM,
Grl.METADATA_KEY_DURATION,
Grl.METADATA_KEY_CREATION_DATE]
METADATA_THUMBNAIL_KEYS = [
Grl.METADATA_KEY_ID,
Grl.METADATA_KEY_THUMBNAIL,
]
def __init__(self):
GObject.GObject.__init__(self)
self.options = Grl.OperationOptions()
self.options.set_flags(Grl.ResolutionFlags.FULL |
Grl.ResolutionFlags.IDLE_RELAY)
self.registry = Grl.Registry.get_default()
try:
self.registry.load_all_plugins()
except GLib.GError:
print('Failed to load plugins.')
self.sources = {}
self.tracker = None
self.registry.connect('source_added', self._on_source_added)
self.registry.connect('source_removed', self._on_source_removed)
def _on_source_added(self, pluginRegistry, mediaSource):
id = mediaSource.get_id()
if id == 'grl-tracker-source':
ops = mediaSource.supported_operations()
if ops & Grl.SupportedOps.SEARCH:
print('Detected new source available: \'%s\' and it supports search' %
mediaSource.get_name())
self.sources[id] = mediaSource
self.tracker = mediaSource
if self.tracker is not None:
self.emit('ready')
def _on_source_removed(self, pluginRegistry, mediaSource):
print('source removed')
def populate_artists(self, offset, callback, count=-1):
self.populate_items(Query.ARTISTS, offset, callback, count)
def populate_albums(self, offset, callback, count=50):
self.populate_items(Query.ALBUMS, offset, callback, count)
def populate_songs(self, offset, callback, count=-1):
self.populate_items(Query.SONGS, offset, callback, count)
def populate_album_songs(self, album_id, callback):
self.populate_items(Query.album_songs(album_id), 0, callback)
def populate_items(self, query, offset, callback, count=50):
options = self.options.copy()
options.set_skip(offset)
if count != -1:
options.set_count(count)
def _callback(source, param, item, count, data, offset):
callback(source, param, item)
self.tracker.query(query, self.METADATA_KEYS, options, _callback, None)
def _search_callback(self):
print('yeah')
def search(self, q):
options = self.options.copy()
for source in self.sources:
print(source.get_name() + ' - ' + q)
source.search(q, [Grl.METADATA_KEY_ID], 0, 10,
options, self._search_callback, source)
def get_album_art_for_album_id(self, album_id, _callback):
options = self.options.copy()
query = Query.get_album_for_id(album_id)
self.tracker.query(query, self.METADATA_THUMBNAIL_KEYS, options, _callback, None)
Grl.init(None)
grilo = Grilo()
|