66 lines
1.7 KiB
Python
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()
|
|
|