]> git.sesse.net Git - vlc/commitdiff
* luaplaylist.c: add support for meta data info. Playlist items now use .path and...
authorAntoine Cellerier <dionoea@videolan.org>
Thu, 17 May 2007 20:19:38 +0000 (20:19 +0000)
committerAntoine Cellerier <dionoea@videolan.org>
Thu, 17 May 2007 20:19:38 +0000 (20:19 +0000)
* luaplaylist/dailymotion.lua: add support for "description" and "arturl" meta data items.
* luaplaylist/*lua: update source to make it work with new playlist conventions.
* luaplaylist/youtube.lua: update help instructions.

modules/demux/playlist/luaplaylist.c
share/luaplaylist/dailymotion.lua
share/luaplaylist/googlevideo.lua
share/luaplaylist/metacafe.lua
share/luaplaylist/youtube.lua

index 1599af1042d4f57f38da299a8a17a22dddd8fb4e..981724113b3bd30869e80553424a9ed95a9f7e89 100644 (file)
@@ -382,16 +382,16 @@ static int Demux( demux_t *p_demux )
                 {
                     const char *psz_url = NULL;
                     const char *psz_title = NULL;
-                    lua_getfield( p_state, t+2, "url" );
+                    lua_getfield( p_state, t+2, "path" );
                     if( lua_isstring( p_state, t+3 ) )
                     {
                         psz_url = lua_tostring( p_state, t+3 );
-                        printf("URL: %s\n", psz_url );
-                        lua_getfield( p_state, t+2, "title" );
+                        printf("Path: %s\n", psz_url );
+                        lua_getfield( p_state, t+2, "name" );
                         if( lua_isstring( p_state, t+4 ) )
                         {
                             psz_title = lua_tostring( p_state, t+4 );
-                            printf("Title: %s\n", psz_title );
+                            printf("Name: %s\n", psz_title );
                         }
                         else
                         {
@@ -399,18 +399,47 @@ static int Demux( demux_t *p_demux )
                         }
                         p_input = input_ItemNewExt( p_playlist, psz_url,
                                                     psz_title, 0, NULL, -1 );
+                        p_input->p_meta = vlc_meta_New();
+
+#define TRY_META( a, b ) \
+                        lua_getfield( p_state, t+2, a ); \
+                        if( lua_isstring( p_state, t+5 ) ) \
+                        { \
+                            psz_title = lua_tostring( p_state, t+5 ); \
+                            printf( #b ": %s\n", psz_title ); \
+                            vlc_meta_Set ## b ( p_input->p_meta, psz_title ); \
+                        } \
+                        lua_pop( p_state, 1 ); /* pop a */
+                        TRY_META( "title", Title );
+                        TRY_META( "artist", Artist );
+                        TRY_META( "genre", Genre );
+                        TRY_META( "copyright", Copyright );
+                        TRY_META( "album", Album );
+                        TRY_META( "tracknum", Tracknum );
+                        TRY_META( "description", Description );
+                        TRY_META( "rating", Rating );
+                        TRY_META( "date", Date );
+                        TRY_META( "setting", Setting );
+                        TRY_META( "url", URL );
+                        TRY_META( "language", Language );
+                        TRY_META( "nowplaying", NowPlaying );
+                        TRY_META( "publisher", Publisher );
+                        TRY_META( "encodedby", EncodedBy );
+                        TRY_META( "arturl", ArtURL );
+                        TRY_META( "trackid", TrackID );
+
                         playlist_BothAddInput(
                             p_playlist, p_input,
                             p_item_in_category,
                             PLAYLIST_APPEND | PLAYLIST_SPREPARSE,
                             PLAYLIST_END, NULL, NULL, VLC_FALSE );
-                        lua_pop( p_state, 1 ); /* pop "title" */
+                        lua_pop( p_state, 1 ); /* pop "name" */
                     }
                     else
                     {
-                        printf("URL isn't a string\n");
+                        printf("Path isn't a string\n");
                     }
-                    lua_pop( p_state, 1 ); /* pop "url" */
+                    lua_pop( p_state, 1 ); /* pop "path" */
                 }
                 else
                 {
index 3d3777e7885d7898519584c2c2d35b83c7100e54..eb731ba27cff4aff273fb338c512e2e80a95c259 100644 (file)
@@ -15,13 +15,22 @@ function parse()
         if not line then break end
         if string.match( line, "param name=\"flashvars\" value=\"url=" )
         then
-            url = vlc.decode_uri( string.gsub( line, "^.*param name=\"flashvars\" value=\"url=([^&]*).*$", "%1" ) )
+            path = vlc.decode_uri( string.gsub( line, "^.*param name=\"flashvars\" value=\"url=([^&]*).*$", "%1" ) )
         end
-        if string.match( line, "<title>" )
+        --[[ if string.match( line, "<title>" )
         then
             title = vlc.decode_uri( string.gsub( line, "^.*<title>([^<]*).*$", "%1" ) )
+        end ]]
+        if string.match( line, "<meta name=\"description\"" )
+        then
+            name = vlc.resolve_xml_special_chars( string.gsub( line, "^.*name=\"description\" content=\"Regarder (.*) sur Dailymotion Partagez Vos Videos\..*$", "%1" ) )
+            description = vlc.resolve_xml_special_chars( string.gsub( line, "^.*name=\"description\" content=\"Regarder .* sur Dailymotion Partagez Vos Videos\. ([^\"]*)\".*$", "%1" ) )
+        end
+        if string.match( line, "<link rel=\"thumbnail\"" )
+        then
+            arturl = string.gsub( line, "^.*\"thumbnail\" type=\"([^\"]*)\".*$", "http://%1" ) -- looks like the dailymotion people mixed up type and href here ...
         end
-        if url and title then break end
+        if path and name and description and arturl then break end
     end
-    return { { url = url; title = title } }
+    return { { path = path; name = name; description = description; url = vlc.path; arturl = arturl } }
 end
index be0d81cc1cfe13edd413bb0b6829996ff0cf444e..b4ad5dd0f5248865f5ab9deb0199f13d45e32381 100644 (file)
@@ -9,5 +9,5 @@ end
 
 -- Parse function.
 function parse()
-    return { { url = string.gsub( vlc.path, "^.*(docid=[^&]*).*$", "http://video.google.com/videogvp?%1" ) } }
+    return { { path = string.gsub( vlc.path, "^.*(docid=[^&]*).*$", "http://video.google.com/videogvp?%1" ) } }
 end
index 2f0e520267c3938ee26e0d6b6a7b5a0ae8a54b18..c0944821cb679094cf2f12dfecf89357f272e983 100644 (file)
@@ -17,12 +17,12 @@ function parse()
             line = vlc.readline()
             if not line then break end
             if string.match( line, "<meta name=\"title\"" ) then
-                title = string.gsub( line, "^.*content=\"([^\"]*).*$", "%1" )  
+                name = string.gsub( line, "^.*content=\"([^\"]*).*$", "%1" )  
                 break
             end
         end
-        return { { url = string.gsub( vlc.path, "^.*watch/(.*[^/])/?$", "http://www.metacafe.com/fplayer/%1.swf" ); title = title } }
+        return { { path = string.gsub( vlc.path, "^.*watch/(.*[^/])/?$", "http://www.metacafe.com/fplayer/%1.swf" ); name = name } }
     else -- This is the flash player's URL
-        return { { url = string.gsub( vlc.path, "^.*mediaURL=([^&]*).*$", "%1" ) } }
+        return { { path = string.gsub( vlc.path, "^.*mediaURL=([^&]*).*$", "%1" ) } }
     end
 end
index 5093e75f04dc443a4264d673b33e8efc3b3f17c7..80630ccf13f969b8db7da0795226e3a9c80f7529 100644 (file)
@@ -6,14 +6,33 @@ VLC Lua playlist modules should define two functions:
  * parse(): read the incoming data and return playlist item(s)
             The playlist is a table of playlist objects.
             A playlist object has the following members:
-                .url: the item's full URL
-                .title: the item's title (OPTIONAL)
+                .path: the item's full path / URL
+                .name: the item's name in playlist (OPTIONAL)
+                .title: the item's Title (OPTIONAL, meta data)
+                .artist: the item's Artist (OPTIONAL, meta data)
+                .genre: the item's Genre (OPTIONAL, meta data)
+                .copyright: the item's Copyright (OPTIONAL, meta data)
+                .album: the item's Album (OPTIONAL, meta data)
+                .tracknum: the item's Tracknum (OPTIONAL, meta data)
+                .description: the item's Description (OPTIONAL, meta data)
+                .rating: the item's Rating (OPTIONAL, meta data)
+                .date: the item's Date (OPTIONAL, meta data)
+                .setting: the item's Setting (OPTIONAL, meta data)
+                .url: the item's URL (OPTIONAL, meta data)
+                .language: the item's Language (OPTIONAL, meta data)
+                .nowplaying: the item's NowPlaying (OPTIONAL, meta data)
+                .publisher: the item's Publisher (OPTIONAL, meta data)
+                .encodedby: the item's EncodedBy (OPTIONAL, meta data)
+                .arturl: the item's ArtURL (OPTIONAL, meta data)
+                .trackid: the item's TrackID (OPTIONAL, meta data)
             Invalid playlist items will be discarded by VLC.
 
 VLC defines a global vlc object with the following members:
  * vlc.path: the URL string (without the leading http:// or file:// element)
  * vlc.access: the access used ("http" for http://, "file" for file://, etc.)
  * vlc.peek( <int> ): return the first <int> characters from the playlist file.
+ * vlc.read( <int> ): read <int> characters from the playlist file.
+                      THIS FUNCTION SHOULD NOT BE USED IN peek().
  * vlc.readline(): return a new line of playlist data on each call.
                    THIS FUNCTION SHOULD NOT BE USED IN peek().
  * vlc.decode_uri( <string> ): decode %xy characters in a string.
@@ -46,20 +65,20 @@ function parse()
     local p = {}
     if string.match( vlc.path, "watch%?v=" )
     then -- This is the HTML page's URL
-        p[1] = { url = string.gsub( vlc.path, "^(.*)watch%?v=([^&]*).*$", "http://%1v/%2" ) }
+        p[1] = { path = string.gsub( vlc.path, "^(.*)watch%?v=([^&]*).*$", "http://%1v/%2" ) }
         while true do
             -- Try to find the video's title
             line = vlc.readline()
             if not line then break end
             if string.match( line, "<meta name=\"title\"" ) then
-                p[1].title = string.gsub( line, "^.*content=\"([^\"]*).*$", "%1" )
+                p[1].name = string.gsub( line, "^.*content=\"([^\"]*).*$", "%1" )
                 break
             end
         end
     else -- This is the flash player's URL
-        p[1] = { url = "http://www.youtube.com/get_video.php?video_id="..get_url_param( vlc.path, "video_id" ).."&t="..get_url_param( vlc.patch, "t" ) }
+        p[1] = { path = "http://www.youtube.com/get_video.php?video_id="..get_url_param( vlc.path, "video_id" ).."&t="..get_url_param( vlc.patch, "t" ) }
         if string.match( vlc.path, "title=" ) then
-            p[1].title = get_url_param( vlc.path, "title" )
+            p[1].name = get_url_param( vlc.path, "title" )
         end
     end
     return p