Audio: keep the popup updated on new/deleted mpris2 clients
This commit is contained in:
parent
fd5637b089
commit
192fa721fd
|
@ -100,7 +100,7 @@ class Gadget(e.Gadget):
|
|||
if obj is None: break
|
||||
|
||||
# remove the obj from our lists
|
||||
for name, objs in self.player_objs.items():
|
||||
for player, objs in self.player_objs.items():
|
||||
while obj in objs: objs.remove(obj)
|
||||
|
||||
# delete the cover image
|
||||
|
@ -137,6 +137,21 @@ class Gadget(e.Gadget):
|
|||
for o in self.player_objs.get(player, []):
|
||||
self.player_update(o, player)
|
||||
|
||||
def player_added(self, player):
|
||||
for popup in self._popups:
|
||||
self.popup_player_add(popup, player)
|
||||
|
||||
def player_removed(self, player):
|
||||
if player in self.player_objs:
|
||||
for o in self.player_objs[player]:
|
||||
# delete the cover image
|
||||
cover = o.part_swallow_get('cover.swallow')
|
||||
if cover: cover.delete()
|
||||
# delete the edje object
|
||||
o.delete()
|
||||
# remove the player from our list
|
||||
del self.player_objs[player]
|
||||
|
||||
def player_update(self, obj, player):
|
||||
# player name
|
||||
obj.part_text_set('player_name', player.label or player.name)
|
||||
|
@ -241,36 +256,47 @@ class Mpris2_Client(object):
|
|||
self.players = []
|
||||
self.bus = dbus.SessionBus(mainloop=DBusEcoreMainLoop())
|
||||
|
||||
# update the players list
|
||||
self.update_players_list()
|
||||
# build the list of players
|
||||
for name in self.bus.list_names():
|
||||
if name.startswith(self.BASE_PATH):
|
||||
self.player_add(name)
|
||||
|
||||
# and keep the list updated when names changes
|
||||
self.sig1 = self.bus.add_signal_receiver(self.name_owner_changed_cb,
|
||||
"NameOwnerChanged")
|
||||
self.bus.add_signal_receiver(self.name_owner_changed_cb,
|
||||
"NameOwnerChanged")
|
||||
|
||||
def name_owner_changed_cb(self, name, old_owner, new_owner):
|
||||
if name.startswith(self.BASE_PATH):
|
||||
self.update_players_list()
|
||||
if new_owner:
|
||||
self.player_add(name)
|
||||
else:
|
||||
self.player_del(name)
|
||||
|
||||
def update_players_list(self):
|
||||
names = [ n for n in self.bus.list_names() if n.startswith(self.BASE_PATH) ]
|
||||
del self.players[:]
|
||||
for name in names:
|
||||
self.players.append(Mpris2_Player(self.bus, name[len(self.BASE_PATH):]))
|
||||
def player_add(self, obj_path):
|
||||
player = Mpris2_Player(self.bus, obj_path)
|
||||
self.players.append(player)
|
||||
_instance.player_added(player)
|
||||
|
||||
def player_del(self, obj_path):
|
||||
for player in self.players:
|
||||
if player.obj_path == obj_path:
|
||||
self.players.remove(player)
|
||||
_instance.player_removed(player)
|
||||
del player
|
||||
break
|
||||
|
||||
class Mpris2_Player(object):
|
||||
MAIN_IFACE = 'org.mpris.MediaPlayer2'
|
||||
PLAYER_IFACE = 'org.mpris.MediaPlayer2.Player'
|
||||
|
||||
def __init__(self, bus, name):
|
||||
self.name = name
|
||||
def __init__(self, bus, obj_path):
|
||||
self.obj_path = obj_path
|
||||
self.label = None
|
||||
self.metadata = None # metadata dict as per mpris2 specs
|
||||
self.playback_status = 'Stopped' # or 'Playing' or 'Paused'
|
||||
self.volume = 0.0 # range: 0.0 - 1.0
|
||||
|
||||
self.proxy = bus.get_object('org.mpris.MediaPlayer2.%s' % name,
|
||||
'/org/mpris/MediaPlayer2')
|
||||
self.proxy = bus.get_object(self.obj_path, '/org/mpris/MediaPlayer2')
|
||||
|
||||
# self.prop_iface.GetAll(...)
|
||||
self.prop_iface = dbus.Interface(self.proxy, dbus_interface=dbus.PROPERTIES_IFACE)
|
||||
|
|
Loading…
Reference in New Issue