From e3ab2765313fc5a49c07fb4bb074ef1ead97fc9a Mon Sep 17 00:00:00 2001 From: Jason Woofenden Date: Thu, 19 Apr 2012 02:26:35 -0400 Subject: [PATCH] fix get_playlist flow/parsing --- api.coffee | 72 +++++++++++++++++++++++++++++++----------------------------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/api.coffee b/api.coffee index 958ba6e..214d82c 100644 --- a/api.coffee +++ b/api.coffee @@ -80,20 +80,27 @@ parse_xml = (str, callback) -> 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 @@ -217,26 +224,26 @@ get_playlist = (tag, callback) -> 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 @@ -274,18 +281,13 @@ get_playlist = (tag, callback) -> 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 -- 1.7.10.4