exports.parse_xml = parse_xml
+# pass the js representation (nested arrays, etc)
+# returns the lfm object or null
+find_lfm_element = (parsed, callback) ->
+ for element in parsed
+ if element[0] is 'lfm'
+ return element
+ return null
+
# returns just the "lfm" element of xml (as described in parse_xml) or fires an error
# callback(err, array)
parse_lfm_xml = (text, callback) ->
parse_xml text, (err, parsed) ->
- if err
- # parse error
+ if err?
+ # report this parse error
callback err
return
- for element in parsed
- if element[0] is 'lfm'
- callback null, element
- return
- callback "Couldn't find lfm element in server response"
- return
+ lfm = find_lfm_element parsed
+ if lfm?
+ callback null, lfm
+ else
+ callback "Couldn't find lfm element in server response"
return
# login and get a session key
login_cached (err, sk) ->
return callback(err) if err?
- console.log "getting playlist with sk=#{sk}"
- http.get { host: 'alpha.libre.fm', port: 80, path: "/2.0/?method=radio.getPlaylist&sk=#{sk}"}, (res) ->
- if res.statusCode != 200
- console.log "login response code: #{res.statusCode}"
- callback "login response code: #{res.statusCode}"
- return
+ tune tag, (err)->
+ return callback(err) if err?
- res.setEncoding 'utf8'
- response_text = ''
- res.on 'data', (chunk) ->
- response_text += chunk
- res.on 'end', ->
- # while testing, got response_text === "BADSESSION"
- console.log "server said: #{response_text}"
- parse_xml response_text, (err, response) ->
- parse_lfm_xml response_text, (err, lfm) ->
- if err
- # parse error
- callback "Error while parsing server reply while requesting playlist: #{err}"
- return
+ console.log "getting playlist with sk=#{sk}"
+ http.get { host: 'alpha.libre.fm', port: 80, path: "/2.0/?method=radio.getPlaylist&sk=#{sk}"}, (res) ->
+ if res.statusCode != 200
+ callback "getPlaylist http response code: #{res.statusCode}"
+ return
+
+ res.setEncoding 'utf8'
+ response_text = ''
+ res.on 'data', (chunk) ->
+ response_text += chunk
+ res.on 'end', ->
+ # while testing, got response_text === "BADSESSION"
+ console.log "server responded"
+ # console.log "server said: #{response_text}"
+ parse_xml response_text, (err, response) ->
+ if err?
+ return callback "Error while parsing server reply while requesting playlist: #{err}"
for element in response
if element[0] is 'playlist'
# FIXME write this bit
callback "Error during tune: server responded without success or error message"
test = (tag, callback) ->
- tune tag, (err) ->
+ get_playlist tag, ->
if err?
console.log err
callback err
return
- get_playlist tag, ->
- if err?
- console.log err
- callback err
- return
- console.log 'yay'
- callback()
+ console.log 'yay'
+ callback()
exports.test = test
exports.get_playlist = get_playlist