barmanager/barmanager.py
2024-11-26 13:19:11 +01:00

66 lines
1.7 KiB
Python

"""barmanager
helper script for eww bar from Shobu Ser'Hao
Usage:
barmanager player get [-f --follow]
Options:
-h --help Show Help screen
-f --follow Loop on the output
"""
from docopt import docopt
from subprocess import run, Popen, PIPE
import json
import sys
def main():
arguments = docopt(__doc__)
if arguments["player"]:
run(["echo", json.dumps(handle_player(arguments))])
def handle_player(arguments):
if arguments["get"]:
raw_metadata = run(["playerctl", "metadata"], capture_output=True).stdout.decode()
metadata = parse_player_metadata(raw_metadata)
if not arguments["--follow"]:
return metadata
if arguments["--follow"]:
process = Popen(["playerctl", "metadata", "--follow"], stdout=PIPE)
chars = b''
row_count = 0
for char in iter(lambda: process.stdout.read(1), b""):
if char:
chars += char
if char == b"\n":
row_count += 1
if row_count == len(metadata):
run(["echo", json.dumps(parse_player_metadata(chars.decode()))])
string = ''
row_count = 0
def parse_player_metadata(raw_string):
metadata = {}
for i in raw_string.strip().split("\n"):
head = ''
tail = ''
spaces = 0
for j in i:
if spaces < 2:
if j == " ":
spaces += 1
else:
spaces = 0
head += j
else:
tail += j
metadata[head.strip().split(":")[-1]] = tail.strip()
return metadata
if __name__ == "__main__":
main()