]> git.sesse.net Git - vlc/commitdiff
* rpn.c: add "services_discovery_add", "services_discovery_remove" and "services_disc...
authorAntoine Cellerier <dionoea@videolan.org>
Sat, 18 Mar 2006 00:17:53 +0000 (00:17 +0000)
committerAntoine Cellerier <dionoea@videolan.org>
Sat, 18 Mar 2006 00:17:53 +0000 (00:17 +0000)
* macro.c, http.h, mvar.c: add new "object" param2 for foreach macro. It gives a list of all objects matching a capability.

modules/control/http/http.h
modules/control/http/macro.c
modules/control/http/mvar.c
modules/control/http/rpn.c

index bfafb2c33704c9bcb60af9e04db98316cb141073..72fc066586670ea274c180e05731203040fa1e4c 100644 (file)
@@ -204,6 +204,9 @@ void     E_(mvar_AppendNewVar)( mvar_t *vars, const char *name,
  * The arg parameter must be of the form "start[:stop[:step]]"  */
 mvar_t *E_(mvar_IntegerSetNew)( const char *name, const char *arg );
 
+/** This function creates a set variable with a list of VLC objects */
+mvar_t *E_(mvar_ObjectSetNew)( intf_thread_t *p_intf, char *name, char *arg );
+
 /** This function creates a set variable with the contents of the playlist */
 mvar_t *E_(mvar_PlaylistSetNew)( intf_thread_t *p_intf, char *name,
                                  playlist_t *p_pl );
index 0baad4460d7b791266ee0333c50e436969807054..d6743fd8d7ada1b53d983331db334a982e14a91d 100644 (file)
@@ -973,6 +973,12 @@ void E_(Execute)( httpd_file_sys_t *p_args,
                             index = E_(mvar_FileSetNew)( p_intf, m.param1, arg );
                             free( arg );
                         }
+                        else if( !strcmp( m.param2, "object" ) )
+                        {
+                            char *arg = E_(SSPop)( &p_args->stack );
+                            index = E_(mvar_ObjectSetNew)( p_intf, m.param1, arg );
+                            free( arg );
+                        }
                         else if( !strcmp( m.param2, "playlist" ) )
                         {
                             index = E_(mvar_PlaylistSetNew)( p_intf, m.param1,
index 1330b3171168444cf5117554f8911cbf33a770f4..b68418f068a50cbf820d03309fcc644050dc1bfe 100644 (file)
@@ -350,6 +350,34 @@ mvar_t *E_(mvar_InfoSetNew)( intf_thread_t *p_intf, char *name,
     return s;
 }
 
+mvar_t *E_(mvar_ObjectSetNew)( intf_thread_t *p_intf, char *psz_name,
+                               char *psz_capability )
+{
+    mvar_t *s = E_(mvar_New)( psz_name, "set" );
+    int i;
+
+    vlc_list_t *p_list = vlc_list_find( p_intf, VLC_OBJECT_MODULE,
+                                        FIND_ANYWHERE );
+
+    for( i = 0; i < p_list->i_count; i++ )
+    {
+        module_t *p_parser = (module_t *)p_list->p_values[i].p_object;
+        if( !strcmp( p_parser->psz_capability, psz_capability ) )
+        {
+            mvar_t *sd = E_(mvar_New)( "sd", p_parser->psz_object_name );
+            E_(mvar_AppendNewVar)( sd, "name",
+                p_parser->psz_longname ? p_parser->psz_longname
+                : ( p_parser->psz_shortname ? p_parser->psz_shortname
+                : p_parser->psz_object_name ) );
+            E_(mvar_AppendVar)( s, sd );
+        }
+    }
+
+    vlc_list_release( p_list );
+
+    return s;
+}
+
 mvar_t *E_(mvar_InputVarSetNew)( intf_thread_t *p_intf, char *name,
                                  input_thread_t *p_input,
                                  const char *psz_variable )
index 691e8e3b28ba358046c8d1dd991e8490ee661e22..a8f1a10aff22f17433a5d612369bc991430216b5 100644 (file)
@@ -887,17 +887,37 @@ void E_(EvaluateRPN)( intf_thread_t *p_intf, mvar_t  *vars,
             msg_Dbg( p_intf, "requested to move playlist item %d to %d",
                      i_pos, i_newpos);
         }
-       else if( !strcmp( s, "playlist_sort" ) )
-       {
-           int i_order = E_(SSPopN)( st, vars );
-           int i_sort = E_(SSPopN)( st, vars );
-           i_order = i_order % 2;
-           i_sort = i_sort % 9;
-           playlist_RecursiveNodeSort (  p_sys->p_playlist,
-                           p_sys->p_playlist->p_general,
-                           i_sort, i_order );
-           msg_Dbg( p_intf, "requested sort playlist by : %d in order : %d", i_sort, i_order );
-       }
+        else if( !strcmp( s, "playlist_sort" ) )
+        {
+            int i_order = E_(SSPopN)( st, vars );
+            int i_sort = E_(SSPopN)( st, vars );
+            i_order = i_order % 2;
+            i_sort = i_sort % 9;
+            playlist_RecursiveNodeSort(  p_sys->p_playlist,
+                                         p_sys->p_playlist->p_general,
+                                         i_sort, i_order );
+            msg_Dbg( p_intf, "requested sort playlist by : %d in order : %d",
+                     i_sort, i_order );
+        }
+        else if( !strcmp( s, "services_discovery_add" ) )
+        {
+            char *psz_sd = E_(SSPop)( st );
+            playlist_ServicesDiscoveryAdd( p_sys->p_playlist, psz_sd );
+            free( psz_sd );
+        }
+        else if( !strcmp( s, "services_discovery_remove" ) )
+        {
+            char *psz_sd = E_(SSPop)( st );
+            playlist_ServicesDiscoveryRemove( p_sys->p_playlist, psz_sd );
+            free( psz_sd );
+        }
+        else if( !strcmp( s, "services_discovery_is_loaded" ) )
+        {
+            char *psz_sd = E_(SSPop)( st );
+            E_(SSPushN)( st,
+            playlist_IsServicesDiscoveryLoaded( p_sys->p_playlist, psz_sd ) );
+            free( psz_sd );
+        }
         else if( !strcmp( s, "vlc_volume_set" ) )
         {
             char *psz_vol = E_(SSPop)( st );
@@ -935,6 +955,7 @@ void E_(EvaluateRPN)( intf_thread_t *p_intf, mvar_t  *vars,
                 aout_VolumeSet( p_intf, i_value );
             }
             aout_VolumeGet( p_intf, &i_volume );
+            free( psz_vol );
         }
         else if( !strcmp( s, "vlm_command" ) || !strcmp( s, "vlm_cmd" ) )
         {