]> git.sesse.net Git - vlc/commitdiff
lua: improve the apple trailer sd:
authorRémi Duraffort <ivoire@videolan.org>
Fri, 20 Aug 2010 18:46:26 +0000 (20:46 +0200)
committerRémi Duraffort <ivoire@videolan.org>
Fri, 20 Aug 2010 18:46:26 +0000 (20:46 +0200)
 * fetch the list of video for one item only if required
 * use the provided thumbnail if available.

share/lua/playlist/appletrailers.lua
share/lua/sd/appletrailers.lua

index dd1a5f1246da3320c16a0419c11f398d87343826..ad6437fd956c4ddc55a720bd377736bf448671d8 100644 (file)
@@ -23,7 +23,7 @@
 -- Probe function.
 function probe()
     return vlc.access == "http"
-        and string.match( vlc.path, "www.apple.com/trailers" ) 
+        and string.match( vlc.path, "trailers.apple.com" )
 end
 
 function find( haystack, needle )
@@ -33,36 +33,37 @@ end
 
 -- Parse function.
 function parse()
-    p = {}
+    local playlist = {}
+    local description = ''
+    local art_url = ''
+
     while true
     do 
         line = vlc.readline()
         if not line then break end
-        for path in string.gmatch( line, "http://movies.apple.com/movies/.-%.mov" ) do
-            path = vlc.strings.decode_uri( path )
-            if string.match( path, "320" ) then
-                extraname = " (320p)"
-            elseif string.match( path, "480" ) then
-                extraname = " (480p)"
-            elseif string.match( path, "640" ) then
-                extraname = " (640p)"
-            elseif string.match( path, "720" ) then
-                extraname = " (720p)"
-            elseif string.match( path, "1080" ) then
-                extraname = " (1080p)"
-            else
-                extraname = ""
-            end
-            table.insert( p, { path = path; name = title..extraname; description = description; url = vlc.path; options = ":http-user-agent=\"QuickTime\"" } )
+
+        if string.match( line, "class=\".-first" ) then
+            description = find( line, "h%d.->(.-)</h%d")
         end
-        if string.match( line, "<title>" )
-        then
-            title = vlc.strings.decode_uri( find( line, "<title>(.-)<" ) )
+        if string.match( line, 'img src=') then
+            for img in string.gmatch(line, '<img src="(http://.*\.jpg)" ') do
+                art_url = img
+            end
+            for i,value in pairs(playlist) do
+                if value.arturl == '' then
+                    playlist[i].arturl = art_url
+                else break end
+            end
         end
-        if string.match( line, "<meta name=\"Description\"" )
-        then
-            description = vlc.strings.resolve_xml_special_chars( find( line, "name=\"Description\" content=\"(.-)\"" ) )
+        if string.match( line, "class=\"hd\".-\.mov") then
+            for urlline,resolution in string.gmatch(line, "class=\"hd\".-href=\"(.-.mov)\".-(%d+.-p)") do
+                urlline = string.gsub( urlline, "_"..resolution, "_h"..resolution )
+                table.insert( playlist, { path = urlline,
+                                          name = description .. " (" .. resolution .. ")",
+                                          arturl = art_url,
+                                          options = {":http-user-agent=QuickTime/7.2", ":demux=avformat,ffmpeg",":play-and-pause"} } )
+            end
         end
     end
-    return p
+    return playlist
 end
index 3675c5d9cbd7cec36d5f81eb84e124d9f53db1a6..244f30e5d66e8e98de2f180a65b6ef2aa6763b46 100644 (file)
@@ -32,7 +32,6 @@ end
 function main()
     fd = vlc.stream( "http://trailers.apple.com/trailers/home/feeds/just_hd.json" )
     if not fd then return nil end
-    options = {":http-user-agent=QuickTime/7.2",":demux=avformat,ffmpeg",":play-and-pause"}
     line = fd:readline()
     while line ~= nil
     do
@@ -45,31 +44,10 @@ function main()
             end
 
             url = find( line, "location\":\"(.-)\"")
-            playlist = vlc.stream( "http://trailers.apple.com"..url.."includes/playlists/web.inc" )
-            if not playlist then 
-                vlc.msg.info("Didn't get playlist...")
-            end
-
-            node = vlc.sd.add_node( {title=title,arturl=art} )
+            node = vlc.sd.add_item( {title  = title,
+                                     path   = "http://trailers.apple.com"..url.."includes/playlists/web.inc",
+                                     arturl = art})
 
-            playlistline = playlist:readline()
-            description =""
-            if not playlistline then vlc.msg.info("Empty playlists-file") end
-            while playlistline ~= nil
-            do
-                if string.match( playlistline, "class=\".-first" ) then
-                    description = find( playlistline, "h%d.->(.-)</h%d")
-                end
-                if string.match( playlistline, "class=\"hd\".-\.mov") then
-                    for urlline,resolution in string.gmatch(playlistline, "class=\"hd\".-href=\"(.-.mov)\".-(%d+.-p)") do
-                        urlline = string.gsub( urlline, "_"..resolution, "_h"..resolution )
-                        node:add_subitem( {path = urlline,
-                                  title=title.." "..description.." ("..resolution..")",
-                                  options=options, arturl=art })
-                    end
-                end
-                playlistline = playlist:readline()
-            end
          end
          line = fd:readline()
     end