nixos-config/home-manager/modules/polybar/scripts/polybar-playerctl

86 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()