diff options
Diffstat (limited to 'icy-info.py')
| -rwxr-xr-x | icy-info.py | 93 | 
1 files changed, 93 insertions, 0 deletions
| diff --git a/icy-info.py b/icy-info.py new file mode 100755 index 0000000..14ed558 --- /dev/null +++ b/icy-info.py @@ -0,0 +1,93 @@ +#!/usr/bin/python2 +# +# This script parses the mplayer standard output and +# extracts ICY info for the mot-encoder. +# +# Usage: +# mplayer <blablabla> | icy-info.py file.dls file-with-default.dls +# +# the file-with-default.dls contains DLS text to be sent when there +# is no ICY info + +import re +import select +import sys +import time + +re_icy = re.compile(r"""ICY Info: StreamTitle='([^']*)'.*""") + +if len(sys.argv) < 3: +    print("Please specify dls output file, and file containing default text") +    sys.exit(1) + +dls_file = sys.argv[1] + +default_textfile = sys.argv[2] + +def new_dlstext(text): +    if text.strip() == "": +        try: +            fd = open(default_textfile, "r") +            text = fd.read().strip() +            fd.close() +        except Exception as e: +            print("Could not read default text from {}: {}".format(default_textfile, e)) + +    print("New Text: {}".format(text)) + +    fd = open(dls_file, "w") +    fd.write(text) +    fd.close() + +wait_timeout = 5 +nodls_timeout = 0 + + +while True: +    # readline is blocking, therefore we cannot send a default text +    # after some timeout +    new_data = sys.stdin.readline() +    if not new_data: +        break + +    match = re_icy.match(new_data) + +    if match: +        artist_title = match.groups()[0] +        new_dlstext(artist_title) +    else: +        print("{}".format(new_data.strip())) + +if False: +    # The select call creates a one ICY delay, and it's not clear why... +    while True: +        rfds, wfds, efds = select.select( [sys.stdin], [], [], wait_timeout) + +        if rfds: +            # new data available on stdin +            print("SELECT !") +            new_data = sys.stdin.readline() +            print("DATA ! {}".format(new_data)) + +            if not new_data: +                break + +            match = re_icy.match(new_data) + +            if match: +                artist_title = match.groups()[0] +                new_dlstext(artist_title) +            else: +                print("{}".format(new_data.strip())) + +        else: +            # timeout reading stdin +            nodls_timeout += 1 + +            if nodls_timeout == 100: +                new_dlstext("") +                nodls_timeout = 0 + +        time.sleep(.1) + + | 
