123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- # BIG TODO:
- # - Check for errors
- # - Unregister radio and streams
- # Register a radio on Liquidsoap Flows.
- # @category Liquidsoap
- # @param ~radio Name of the radio.
- # @param ~website URL of the website of the radio.
- # @param ~description Description of the radio.
- # @param ~genre Genre of the radio (rock or rap or etc.).
- # @param ~streams List of streams for the radio described by \
- # a pair of strings consisting of the format of the stream \
- # and the url of the stream. The format should be \
- # of the form "ogg/128k" consisting of the codec and \
- # the bitrate, separated by "/".
- def register_flow(~server="",~user="default",~password="default",
- ~email="",~radio,~website,~description,~genre,
- ~streams,s)
- # If the server is "", we get the server from sf.net
- server =
- if server == "" then
- server = http.get("http://savonet.sourceforge.net/flows_server")
- html_status = snd(fst(fst(fst(server))))
- if html_status == 200 then
- snd(server)
- else
- # If sf is down, we use the hardcoded server
- "http://savonet.rastageeks.org/liqflows.py"
- end
- else
- server
- end
- log(level=4,"Flows server: #{server}")
- # Initial variables
- ping_period = 600. # Pinging period in seconds
- # Fix default parameters
- # and set request function.
- base_params = [("v", "0.0"),
- ("user",user),
- ("password",password),
- ("email",email),
- ("radio",radio)]
- def request(~cmd,~params) =
- log = log(label=radio)
- log(level=4,"Processing command #{cmd} with arguments:")
- def log_arg(x) =
- label = fst(x)
- value = snd(x)
- log(level=4," #{label}: #{value}")
- end
- list.iter(log_arg,params)
- cmd = url.encode(cmd)
- params = list.append(base_params,params)
- def f(z) =
- x = fst(z)
- y = url.encode(snd(z))
- "#{x}=#{y}"
- end
- params = string.concat(separator="&",list.map(f,params))
- url = "#{server}?cmd=#{cmd}&#{params}"
- # TODO: do something with errors!
- answer = http.get(url)
- x = fst(answer)
- status = fst(x)
- y = fst(status)
- protocol = fst(y)
- code = snd(y)
- desc = snd(status)
- headers = snd(x)
- data = snd(answer)
- log(level=4,"Response status: #{protocol} #{code} #{desc}")
- log(level=4,"Response headers:")
- list.iter(log_arg,headers)
- log(level=4,"Response content: #{data}")
- end
- # Register radio
- params = [("radio_website",website),
- ("radio_description",description),
- ("radio_genre",genre)]
- request(cmd="add radio",params=params)
- # Ping
- def ping() =
- ignore(request(cmd="ping radio",params=[]))
- ping_period
- end
- add_timeout(fast=false,ping_period,ping)
- # Register streams
- def register_stream(format_url)
- format = fst(format_url);
- url = snd(format_url);
- params = [("stream_format",format),("stream_url",url)]
- request(cmd="add stream",params=params)
- end
- request(cmd="clear streams",params=[])
- list.iter(register_stream,streams)
- # Metadata update
- def metadata(m) =
- artist = m["artist"]
- title = m["title"]
- params = [("m_title",title),("m_artist",artist)]
- request(cmd="metadata",params=params)
- end
- on_metadata(metadata,s)
- end
|