JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
fix get_playlist flow/parsing master
authorJason Woofenden <jason@jasonwoof.com>
Thu, 19 Apr 2012 06:26:35 +0000 (02:26 -0400)
committerJason Woofenden <jason@jasonwoof.com>
Thu, 19 Apr 2012 06:26:35 +0000 (02:26 -0400)
api.coffee

index 958ba6e..214d82c 100644 (file)
@@ -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