# -*- coding: utf-8 -*-

import sys, requests
from re import search
from os import path

oldtitle = ""
stream = None

try:
	url = sys.argv[1]
except:
	sys.exit(1)

try:
	stream = requests.get(url, stream=True, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0', 'Icy-MetaData': '1'})
except:
	sys.exit(1)

tmpfile = "/tmp/hdfradio_songtitle"
if not path.exists(tmpfile):
	open(tmpfile, 'a').close()

def getMetaSize():
	try:
		byteLength = stream.raw.read(1)
		if byteLength:
			return ord(byteLength) * 16
		sys.exit(1)
	except:
		sys.exit(1)

def parseMetaData(metadata):
	try:
		m = search(br"StreamTitle='(.*?)';", metadata)
		if m:
			title = m.group(1).decode('utf-8', errors='replace')
			if title:
				return title
			return None
	except:
		return None

if stream:
	try:
		while True:
			metasize = getMetaSize()
			if metasize:
				title = parseMetaData(stream.raw.read(metasize))
				if title and title.lower() != oldtitle.lower():
					oldtitle = title
					with open(tmpfile, 'w') as tf:
						tf.write(title)
	except:
		sys.exit(1)
