84 lines
2.2 KiB
Python
Executable file
84 lines
2.2 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import sys
|
|
import gi
|
|
from gi.repository import GLib
|
|
|
|
# Check Playerctl version
|
|
gi.require_version('Playerctl', '2.0')
|
|
from gi.repository import Playerctl
|
|
|
|
|
|
def player_status_str(status):
|
|
if status == Playerctl.PlaybackStatus.PLAYING:
|
|
return 'Playing'
|
|
elif status == Playerctl.PlaybackStatus.PAUSED:
|
|
return 'Paused'
|
|
elif status == Playerctl.PlaybackStatus.STOPPED:
|
|
return 'Stopped'
|
|
else:
|
|
return 'Unknown'
|
|
|
|
def now_playing_str(artist, title):
|
|
if artist == None and title == None:
|
|
return 'No music information'
|
|
elif artist == None:
|
|
return title
|
|
else:
|
|
return f'{artist} - {title}'
|
|
|
|
players = Playerctl.list_players()
|
|
|
|
if len(players) == 0:
|
|
print("No players found")
|
|
exit(0)
|
|
|
|
homedir = os.environ['HOME']
|
|
player_file = f'{homedir}/.playerctl_player'
|
|
current_player_name = ''
|
|
|
|
if os.path.isfile(player_file):
|
|
with open(player_file, mode='r') as file:
|
|
current_player_name = file.read()
|
|
|
|
player_found = False
|
|
player_changed = False
|
|
player_index = 0
|
|
for (index, p) in enumerate(players):
|
|
if p.instance == current_player_name:
|
|
player_found = True
|
|
player_index = index
|
|
break
|
|
|
|
if not player_found:
|
|
player = Playerctl.Player.new_from_name(players[0])
|
|
else:
|
|
player = Playerctl.Player.new_from_name(players[player_index])
|
|
|
|
if len(sys.argv) == 1:
|
|
out = f'ﱘ [{player.get_property("player-name")}] '
|
|
if player.props.playback_status == Playerctl.PlaybackStatus.PLAYING:
|
|
out += now_playing_str(player.get_artist(), player.get_title())
|
|
else:
|
|
out += player_status_str(player.get_property('playback_status'))
|
|
|
|
print(out)
|
|
elif sys.argv[1] == 'next-player':
|
|
player_changed = True
|
|
player_index += 1
|
|
if player_index == len(players):
|
|
player_index = 0
|
|
|
|
player = Playerctl.Player.new_from_name(players[player_index])
|
|
elif sys.argv[1] == 'play-pause':
|
|
player.play_pause()
|
|
elif sys.argv[1] == 'next':
|
|
player.next()
|
|
elif sys.argv[1] == 'previous':
|
|
player.previous()
|
|
|
|
if player_changed or not player_found:
|
|
with open(player_file, mode='w') as file:
|
|
file.write(player.get_property('player-instance'))
|
|
file.flush()
|