#!/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()