#!/usr/bin/env python # -*- coding: UTF-8 -*- # # xmlrpc interface for re_codec: config and status # no xmlrpc for now. only the functions # import sys import jack import re from xml.dom.minidom import parse, parseString,getDOMImplementation #some basic config="/etc/reboot.fm/re_codec.xml" #read basics from xml try: xml=parse(config) except: print "could not parse config file: %s\n" % config sys.exit() re_stream_config_file=xml.getElementsByTagName("re_stream_config")[0].firstChild.data fallback_pls=xml.getElementsByTagName("fallback_playlist")[0].firstChild.data restream_status=xml.getElementsByTagName("re_restream_status")[0].firstChild.data jackplumbing_rc=xml.getElementsByTagName("jackplumbingrc")[0].firstChild.data channels=int(xml.getElementsByTagName("channels")[0].firstChild.data) #xmlrpc re_codec status framework: def jackmixer_status(): #not implementet in jackmixer right now #return stream|fallback return 'stream' def jackmixer_log(): #not implementet in jackmixer right now #return array(timestamp : status) return [] def internet_log(): #not implementet in pppkeepalive right now #return array(timestamp : reconnect) return [] def restream_status(): config_file=open(restream_status,"r") restream_status_value=config_file.read() config_file.close return restream_status_value # interpre restream_status_value here. stream or fallback # return stream|fallback def restream_log(): #not implementet in restreame right now #return array(timestamp : status) return [] def uptime(): return sys.uptime() #xmlrpc re_codec config framework_ # #TODO # check url. def re_stream_set_url(url): xml=parse(config) xml.getElementsByTagName("re_stream_url")[0].firstChild.replaceWholeText(ics_url) config_file=open(config,"w") config_file.write(rdf.toxml()) config_file.close def re_stream_get_url(): xml=parse(config) url=rdf.getElementsByTagName("re_stream_url")[0].firstChild.data return url def re_fallback_get_pls(): pls_file=open(fallback_pls,"r") pls_value=pls_file.read() pls_file.close return pls_value def re_fallback_set_pls(pls): pls_file=open(fallback_pls,"w") pls_file.write(pls) pls_file.close def re_jack_get_capture_ports(): jack.attach('re_config') all_ports=jack.get_ports() capture_ports= [] for x in all_ports: if (jack.get_port_flags(x) & jack.IsOutput) == 2: capture_ports.append(x) jack.detach() return capture_ports def re_jack_get_playback_ports(): jack.attach('re_config') all_ports=jack.get_ports() playback_ports= [] for x in all_ports: if (jack.get_port_flags(x) & jack.IsInput) == 1: playback_ports.append(x) jack.detach() return playback_ports def _jack_get_connected_ports(port): jack.attach('re_config') out_ports=[] for y in (jack.get_connections(port)): out_ports.append(z) jack.detach() return out_port # internal function, not for public use def _jack_plumbing_update(replace,new): rc_data_out='' rc=open(jackplumbing_rc,'r') rc_data=rc.read() rc.close() for line in rc_data.split('\n'): # alter rc_data here re_line= re.search(replace,line) if re_line: rc_data_out +=new +'\n' else: rc_data_out +=line +'\n' rc=open(jackplumbing_rc,'w') rc.write(rc_data_out.strip()) rc.close() def re_jackmixer_set_in(portnum,port): _jack_plumbing_update( 're_jackmixer:in_%s'%portnum, '(connect "%s" "re_jackmixer:in_%s")'%(port,portnum) ) def re_jackmixer_get_in(): cannel1=_jack_get_connected_ports('re_jackmixer:in_1') cannel2=_jack_get_connected_ports('re_jackmixer:in_2') return (cannel1,cannel2) def re_jackmixer_set_fallback(portnum,fallback_port): _jack_plumbing_update( 're_jackmixer:fallback_%s'%portnum, '(connect "%s" "re_jackmixer:fallback_%s")'%(port,portnum) ) def re_jackmixer_get_fallback(): cannel1=_jack_get_connected_ports('re_jackmixer:fallback_1') cannel2=_jack_get_connected_ports('re_jackmixer:fallback_2') return (cannel1,cannel2) def re_jackmixer_set_out(out_port): _jack_plumbing_update( 're_jackmixer:out_%s'%portnum, '(connect "%s" "re_jackmixer:fallback_%s")'%(port,portnum) ) def re_jackmixer_get_out(): cannel1=_jack_get_connected_ports('re_jackmixer:out_1') cannel2=_jack_get_connected_ports('re_jackmixer:out_2') return (cannel1,cannel2) def re_restream_set_icsurl(ics_url): xml=parse(config) xml.getElementsByTagName("icsurl")[0].firstChild.replaceWholeText(ics_url) config_file=open(config,"w") config_file.write(rdf.toxml()) config_file.close def re_restream_get_icsurl(): rdf=parse(config) url=rdf.getElementsByTagName("icsurl")[0].firstChild.data return url def re_restream_set_overwrite_source(ogg_url): return def re_restream_get_overwrite_source(): return re_restream_set_icsurl('http://www.reboot.fm/vcal/current.ics') print re_restream_get_icsurl()