allow adjusting volume, centralization of some code (#688)
This commit is contained in:
parent
91a0b5d05d
commit
d9c5d92bdc
@ -103,6 +103,8 @@ https://specifications.freedesktop.org/mpris-spec/latest/Player_Interface.html
|
|||||||
|
|
||||||
on_leftclick = "playpause"
|
on_leftclick = "playpause"
|
||||||
on_rightclick = "next_song"
|
on_rightclick = "next_song"
|
||||||
|
on_upscroll = 'volume_up'
|
||||||
|
on_downscroll = 'volume_down'
|
||||||
|
|
||||||
player = None
|
player = None
|
||||||
old_player = None
|
old_player = None
|
||||||
@ -137,25 +139,16 @@ https://specifications.freedesktop.org/mpris-spec/latest/Player_Interface.html
|
|||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
try:
|
try:
|
||||||
player = self.get_player()
|
currentsong = self.get_player_prop("Metadata")
|
||||||
properties = dbus.Interface(player, Dbus.intf_props)
|
|
||||||
|
|
||||||
def get_prop(name, default=None):
|
|
||||||
try:
|
|
||||||
return properties.Get(Dbus.intf_player, name)
|
|
||||||
except dbus.exceptions.DBusException:
|
|
||||||
return default
|
|
||||||
|
|
||||||
currentsong = get_prop("Metadata")
|
|
||||||
|
|
||||||
fdict = {
|
fdict = {
|
||||||
"status": self.status[self.statusmap[
|
"status": self.status[self.statusmap[
|
||||||
get_prop("PlaybackStatus")]],
|
self.get_player_prop("PlaybackStatus")]],
|
||||||
# TODO: Use optional(!) TrackList interface for this to
|
# TODO: Use optional(!) TrackList interface for this to
|
||||||
# gain 100 % mpd<->now_playing compat
|
# gain 100 % mpd<->now_playing compat
|
||||||
"len": 0,
|
"len": 0,
|
||||||
"pos": 0,
|
"pos": 0,
|
||||||
"volume": int(get_prop("Volume", 0) * 100),
|
"volume": int(self.get_player_prop("Volume", 0) * 100),
|
||||||
|
|
||||||
"title": currentsong.get("xesam:title", ""),
|
"title": currentsong.get("xesam:title", ""),
|
||||||
"album": currentsong.get("xesam:album", ""),
|
"album": currentsong.get("xesam:album", ""),
|
||||||
@ -163,7 +156,7 @@ https://specifications.freedesktop.org/mpris-spec/latest/Player_Interface.html
|
|||||||
"song_length": TimeWrapper(
|
"song_length": TimeWrapper(
|
||||||
(currentsong.get("mpris:length") or 0) / 1000 ** 2),
|
(currentsong.get("mpris:length") or 0) / 1000 ** 2),
|
||||||
"song_elapsed": TimeWrapper(
|
"song_elapsed": TimeWrapper(
|
||||||
(get_prop("Position") or 0) / 1000 ** 2),
|
(self.get_player_prop("Position") or 0) / 1000 ** 2),
|
||||||
"filename": "",
|
"filename": "",
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,30 +196,45 @@ https://specifications.freedesktop.org/mpris-spec/latest/Player_Interface.html
|
|||||||
return
|
return
|
||||||
|
|
||||||
def playpause(self):
|
def playpause(self):
|
||||||
try:
|
self.player_command('PlayPause')
|
||||||
dbus.Interface(self.get_player(), Dbus.intf_player).PlayPause()
|
|
||||||
except NoPlayerException:
|
|
||||||
return
|
|
||||||
except dbus.exceptions.DBusException:
|
|
||||||
return
|
|
||||||
|
|
||||||
def next_song(self):
|
def next_song(self):
|
||||||
try:
|
self.player_command('Next')
|
||||||
dbus.Interface(self.get_player(), Dbus.intf_player).Next()
|
|
||||||
except NoPlayerException:
|
def volume_up(self):
|
||||||
return
|
self.set_player_prop('Volume', self.volume + 1.0)
|
||||||
except dbus.exceptions.DBusException:
|
|
||||||
return
|
def volume_down(self):
|
||||||
|
self.set_player_prop('Volume', self.volume - 1.0)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def volume(self):
|
||||||
|
return self.get_player_prop('Volume')
|
||||||
|
|
||||||
def player_command(self, command, *args):
|
def player_command(self, command, *args):
|
||||||
try:
|
try:
|
||||||
interface = dbus.Interface(self.get_player(), Dbus.intf_player)
|
interface = dbus.Interface(self.get_player(), Dbus.intf_player)
|
||||||
getattr(interface, command)(*args)
|
return getattr(interface, command)(*args)
|
||||||
except NoPlayerException:
|
except NoPlayerException:
|
||||||
return
|
return
|
||||||
except dbus.exceptions.DBusException:
|
except dbus.exceptions.DBusException:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def get_player_prop(self, name, default=None):
|
||||||
|
properties = dbus.Interface(self.get_player(), Dbus.intf_props)
|
||||||
|
try:
|
||||||
|
return properties.Get(Dbus.intf_player, name)
|
||||||
|
except dbus.exceptions.DBusException:
|
||||||
|
return default
|
||||||
|
|
||||||
|
def set_player_prop(self, name, value):
|
||||||
|
properties = dbus.Interface(self.get_player(), Dbus.intf_props)
|
||||||
|
try:
|
||||||
|
return properties.Set(Dbus.intf_player, name, value)
|
||||||
|
except dbus.exceptions.DBusException as e:
|
||||||
|
self.logger.error('error setting player property: %s', e)
|
||||||
|
return
|
||||||
|
|
||||||
def player_prop(self, name, value=None):
|
def player_prop(self, name, value=None):
|
||||||
try:
|
try:
|
||||||
properties = dbus.Interface(self.get_player(), Dbus.intf_props)
|
properties = dbus.Interface(self.get_player(), Dbus.intf_props)
|
||||||
|
Loading…
Reference in New Issue
Block a user