mirror of
				https://github.com/rad4day/Waybar.git
				synced 2025-10-31 07:52:42 +01:00 
			
		
		
		
	Merge pull request #256 from SibrenVasse/spotify-json
Convert spotify module to generic json version
This commit is contained in:
		| @@ -4,7 +4,7 @@ | ||||
|     // "height": 30, // Waybar height | ||||
|     // "width": 1280, // Waybar width | ||||
|     // Choose the order of the modules | ||||
|     "modules-left": ["sway/workspaces", "sway/mode", "custom/spotify"], | ||||
|     "modules-left": ["sway/workspaces", "sway/mode", "custom/media"], | ||||
|     "modules-center": ["sway/window"], | ||||
|     "modules-right": ["idle_inhibitor", "pulseaudio", "network", "cpu", "memory", "temperature", "backlight", "battery", "battery#bat2", "clock", "tray"], | ||||
|     // Modules configuration | ||||
| @@ -95,9 +95,14 @@ | ||||
|         }, | ||||
|         "on-click": "pavucontrol" | ||||
|     }, | ||||
|     "custom/spotify": { | ||||
|         "format": " {}", | ||||
|     "custom/media": { | ||||
|         "format": "{icon} {}", | ||||
|         "return-type": "json", | ||||
|         "max-length": 40, | ||||
|         "format-icons": { | ||||
|             "spotify": "", | ||||
|             "default": "🎜" | ||||
|         }, | ||||
|         "escape": true, | ||||
|         "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder | ||||
|     } | ||||
|   | ||||
| @@ -4,19 +4,31 @@ import logging | ||||
| import sys | ||||
| import signal | ||||
| 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") | ||||
|     logger.info('Received new metadata') | ||||
|     track_info = '' | ||||
|  | ||||
|     if player.props.player_name == 'spotify' and \ | ||||
| @@ -26,33 +38,27 @@ def on_metadata(player, metadata, manager): | ||||
|     elif player.get_artist() != '' and player.get_title() != '': | ||||
|         track_info = '{artist} - {title}'.format(artist=player.get_artist(), | ||||
|                                                  title=player.get_title()) | ||||
|     else: | ||||
|         sys.stdout.write('\n') | ||||
|         sys.stdout.flush() | ||||
|         return | ||||
|  | ||||
|     if player.props.status == 'Playing': | ||||
|         sys.stdout.write(track_info + '\n') | ||||
|     else: | ||||
|         sys.stdout.write(' ' + track_info + '\n') | ||||
|     sys.stdout.flush() | ||||
|     if player.props.status != 'Playing': | ||||
|         track_info = ' ' + track_info | ||||
|     write_output(track_info, player) | ||||
|  | ||||
|  | ||||
| def on_player_appeared(manager, player, selected_player=None): | ||||
|     if player is not None and player.name == selected_player: | ||||
|         init_player(manager, player) | ||||
|     else: | ||||
|         logger.debug('New player appeared, but it\'s not the selected player, skipping') | ||||
|         logger.debug("New player appeared, but it's not the selected player, skipping") | ||||
|  | ||||
|  | ||||
| def on_player_vanished(manager, player): | ||||
|     logger.info("Player has vanished") | ||||
|     sys.stdout.write("\n") | ||||
|     logger.info('Player has vanished') | ||||
|     sys.stdout.write('\n') | ||||
|     sys.stdout.flush() | ||||
|  | ||||
|  | ||||
| def init_player(manager, name): | ||||
|     logger.debug("Initialize player: {player}".format(player=name.name)) | ||||
|     logger.debug('Initialize player: {player}'.format(player=name.name)) | ||||
|     player = Playerctl.Player.new_from_name(name) | ||||
|     player.connect('playback-status', on_play, manager) | ||||
|     player.connect('metadata', on_metadata, manager) | ||||
| @@ -62,7 +68,7 @@ def init_player(manager, name): | ||||
|  | ||||
| def signal_handler(sig, frame): | ||||
|     logger.debug('Received signal to stop, exiting') | ||||
|     sys.stdout.write("\n") | ||||
|     sys.stdout.write('\n') | ||||
|     sys.stdout.flush() | ||||
|     # loop.quit() | ||||
|     sys.exit(0) | ||||
| @@ -72,7 +78,7 @@ def parse_arguments(): | ||||
|     parser = argparse.ArgumentParser() | ||||
|  | ||||
|     # Increase verbosity with every occurance of -v | ||||
|     parser.add_argument('-v', '--verbose', action="count", default=0) | ||||
|     parser.add_argument('-v', '--verbose', action='count', default=0) | ||||
|  | ||||
|     # Define for which player we're listening | ||||
|     parser.add_argument('--player') | ||||
| @@ -88,7 +94,7 @@ def main(): | ||||
|                         format='%(name)s %(levelname)s %(message)s') | ||||
|  | ||||
|     # Logging is set by default to WARN and higher. | ||||
|     # With every occurance of -v it's lowered by one | ||||
|     # With every occurrence of -v it's lowered by one | ||||
|     logger.setLevel(max((3 - arguments.verbose) * 10, 0)) | ||||
|  | ||||
|     # Log the sent command line arguments | ||||
| @@ -115,6 +121,6 @@ def main(): | ||||
|     loop.run() | ||||
|  | ||||
|  | ||||
| if __name__ == "__main__": | ||||
| if __name__ == '__main__': | ||||
|     main() | ||||
|  | ||||
|   | ||||
| @@ -30,7 +30,7 @@ window#waybar { | ||||
|     border-bottom: 3px solid #ffffff; | ||||
| } | ||||
|  | ||||
| #clock, #battery, #cpu, #memory, #temperature, #backlight, #network, #pulseaudio, #custom-spotify, #tray, #mode, #idle_inhibitor { | ||||
| #clock, #battery, #cpu, #memory, #temperature, #backlight, #network, #pulseaudio, #custom-media, #tray, #mode, #idle_inhibitor { | ||||
|     padding: 0 10px; | ||||
|     margin: 0 5px; | ||||
| } | ||||
| @@ -97,11 +97,19 @@ window#waybar { | ||||
|     color: #2a5c45; | ||||
| } | ||||
|  | ||||
| #custom-spotify { | ||||
| #custom-media { | ||||
|     background: #66cc99; | ||||
|     color: #2a5c45; | ||||
| } | ||||
|  | ||||
| .custom-spotify { | ||||
|     background: #66cc99; | ||||
| } | ||||
|  | ||||
| .custom-vlc { | ||||
|     background: #ffa000; | ||||
| } | ||||
|  | ||||
| #temperature { | ||||
|     background: #f0932b; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Alex
					Alex