From ec6d9ff1cbe9cc3eb046bf7b76fa118cc59602d4 Mon Sep 17 00:00:00 2001 From: nodiego Date: Tue, 10 Feb 2026 13:45:14 +0100 Subject: [PATCH] =?UTF-8?q?T=C3=A9l=C3=A9verser=20les=20fichiers=20vers=20?= =?UTF-8?q?"waybar"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- waybar/mediaplayer.py | 69 +++++++++++++++++++++++++++++++++++++++++++ waybar/style.css | 61 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 waybar/mediaplayer.py create mode 100644 waybar/style.css diff --git a/waybar/mediaplayer.py b/waybar/mediaplayer.py new file mode 100644 index 0000000..0755974 --- /dev/null +++ b/waybar/mediaplayer.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +import argparse +import logging +import sys +import gi +import json +gi.require_version('Playerctl', '2.0') +from gi.repository import Playerctl, GLib + +logger = logging.getLogger(__name__) + +def write_output(text, player): + logger.info('Writing output') + output = {'text': text, + 'class': 'custom-' + player.props.player_name, + 'alt': player.props.player_name} + sys.stdout.write(json.dumps(output) + '\n') + sys.stdout.flush() + +def on_play(player, status, manager): + logger.info('Received new playback status') + on_metadata(player, player.props.metadata, manager) + +def on_metadata(player, metadata, manager): + logger.info('Received new metadata') + track_info = '' + if player.props.player_name == 'spotify': + track_info = '{artist} - {title}'.format(artist=metadata['xesam:artist'][0], title=metadata['xesam:title']) + else: + if 'xesam:artist' in metadata.keys() and 'xesam:title' in metadata.keys(): + track_info = '{artist} - {title}'.format(artist=metadata['xesam:artist'][0], title=metadata['xesam:title']) + else: + track_info = metadata['xesam:title'] + write_output(track_info, player) + +def on_player_appeared(manager, player): + logger.info('Player has appeared') + player.connect('playback-status', on_play, manager) + player.connect('metadata', on_metadata, manager) + on_metadata(player, player.props.metadata, manager) + +def on_player_vanished(manager, player): + logger.info('Player has vanished') + sys.stdout.write('\n') + sys.stdout.flush() + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--ignore', help='List of player names to ignore', default=[]) + args = parser.parse_args() + + logging.basicConfig(level=logging.INFO) + + manager = Playerctl.PlayerManager() + loop = GLib.MainLoop() + + manager.connect('name-appeared', lambda *args: on_player_appeared(*args)) + manager.connect('player-vanished', lambda *args: on_player_vanished(*args)) + + for player in manager.props.player_names: + if args.ignore is not None and player.name in args.ignore: + logger.info("Ignoring player: {player}".format(player=player.name)) + continue + on_player_appeared(manager, player) + + loop.run() + +if __name__ == '__main__': + main() diff --git a/waybar/style.css b/waybar/style.css new file mode 100644 index 0000000..9dc086c --- /dev/null +++ b/waybar/style.css @@ -0,0 +1,61 @@ +* { + border:none; + border-radius:0; + padding:0; + margin:0; + + font-family: "SF Pro Display", "Inter", "JetBrainsMono Nerd Font"; + font-size: 14px; + min-height: 0; +} + +window#waybar { + background: rgba(30, 30, 30, 0.8); + border-radius: 0; + color: #ffffff; + padding: 4px 12px; +} + +/* Modules spacing */ +.modules-left, +.modules-center, +.modules-right { + margin: 0 8px; +} + +/* Apple icon */ +#custom-apple { + font-size: 15px; + padding: 0 10px; +} + +/* Workspaces */ +#workspaces button { + background: transparent; + color: #bbbbbb; + border: none; + padding: 0 6px; +} + +#workspaces button.active { + color: #ffffff; +} + +/* Center clock */ +#clock { + font-weight: 500; + padding: 0 12px; +} + +/* Right modules */ +#pulseaudio, +#network, +#battery, +#tray { + padding: 0 8px; +} + +/* Tray icons */ +#tray > .item { + padding: 0 4px; +}