]> git.sesse.net Git - vlc/blobdiff - modules/control/rc.c
More cleanup
[vlc] / modules / control / rc.c
index e420b6c635b897cca82346079921b4c2935a0f67..7d419d2589c949aca4085c9fee4204428dd35ea2 100644 (file)
 #include <ctype.h>
 #include <signal.h>
 
-#include <vlc/intf.h>
-#include <vlc/aout.h>
-#include <vlc/vout.h>
-#include <vlc_video.h>
+#include <vlc_interface.h>
+#include <vlc_aout.h>
+#include <vlc_vout.h>
 #include <vlc_osd.h>
+#include <vlc_playlist.h>
 #include <vlc_update.h>
 
 #ifdef HAVE_UNISTD_H
 #endif
 #include <sys/types.h>
 
-#include "vlc_error.h"
-#include "network.h"
+#include <vlc_network.h>
 #include "vlc_url.h"
 
-#include "charset.h"
+#include <vlc_charset.h>
 
 #if defined(AF_UNIX) && !defined(AF_LOCAL)
 #    define AF_LOCAL AF_UNIX
@@ -223,8 +222,7 @@ static int Activate( vlc_object_t *p_this )
     {
         int i_socket, i_overwrite;
 
-       i_overwrite = config_GetInt( p_intf, "rc-overwrite" );
-
+        i_overwrite = config_GetInt( p_intf, "rc-overwrite" );
 
 #if !defined(AF_LOCAL) || defined(WIN32)
         msg_Warn( p_intf, "your OS doesn't support filesystem sockets" );
@@ -366,158 +364,94 @@ static void Deactivate( vlc_object_t *p_this )
 static void RegisterCallbacks( intf_thread_t *p_intf )
 {
     /* Register commands that will be cleaned up upon object destruction */
-    var_Create( p_intf, "quit", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "quit", Quit, NULL );
-    var_Create( p_intf, "intf", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "intf", Intf, NULL );
-
-    var_Create( p_intf, "add", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "add", Playlist, NULL );
-    var_Create( p_intf, "repeat", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "repeat", Playlist, NULL );
-    var_Create( p_intf, "loop", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "loop", Playlist, NULL );
-    var_Create( p_intf, "enqueue", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "enqueue", Playlist, NULL );
-    var_Create( p_intf, "playlist", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "playlist", Playlist, NULL );
-    var_Create( p_intf, "sort", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "sort", Playlist, NULL );
-    var_Create( p_intf, "play", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "play", Playlist, NULL );
-    var_Create( p_intf, "stop", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "stop", Playlist, NULL );
-    var_Create( p_intf, "clear", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "clear", Playlist, NULL );
-    var_Create( p_intf, "prev", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "prev", Playlist, NULL );
-    var_Create( p_intf, "next", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "next", Playlist, NULL );
-    var_Create( p_intf, "goto", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "goto", Playlist, NULL );
-    var_Create( p_intf, "status", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "status", Playlist, NULL );
+#define ADD( name, type, target )                                   \
+    var_Create( p_intf, name, VLC_VAR_ ## type | VLC_VAR_ISCOMMAND ); \
+    var_AddCallback( p_intf, name, target, NULL );
+    ADD( "quit", VOID, Quit )
+    ADD( "intf", STRING, Intf )
+
+    ADD( "add", STRING, Playlist )
+    ADD( "repeat", STRING, Playlist )
+    ADD( "loop", STRING, Playlist )
+    ADD( "enqueue", STRING, Playlist )
+    ADD( "playlist", VOID, Playlist )
+    ADD( "sort", VOID, Playlist )
+    ADD( "play", VOID, Playlist )
+    ADD( "stop", VOID, Playlist )
+    ADD( "clear", VOID, Playlist )
+    ADD( "prev", VOID, Playlist )
+    ADD( "next", VOID, Playlist )
+    ADD( "goto", INTEGER, Playlist )
+    ADD( "status", INTEGER, Playlist )
 
     /* marquee on the fly items */
-    var_Create( p_intf, "marq-marquee", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "marq-marquee", Other, NULL );
-    var_Create( p_intf, "marq-x", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "marq-x", Other, NULL );
-    var_Create( p_intf, "marq-y", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "marq-y", Other, NULL );
-    var_Create( p_intf, "marq-position", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "marq-position", Other, NULL );
-    var_Create( p_intf, "marq-color", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "marq-color", Other, NULL );
-    var_Create( p_intf, "marq-opacity", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "marq-opacity", Other, NULL );
-    var_Create( p_intf, "marq-timeout", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "marq-timeout", Other, NULL );
-    var_Create( p_intf, "marq-size", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "marq-size", Other, NULL );
-
-    var_Create( p_intf, "mosaic-alpha", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "mosaic-alpha", Other, NULL );
-    var_Create( p_intf, "mosaic-height", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "mosaic-height", Other, NULL );
-    var_Create( p_intf, "mosaic-width", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "mosaic-width", Other, NULL );
-    var_Create( p_intf, "mosaic-xoffset", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "mosaic-xoffset", Other, NULL );
-    var_Create( p_intf, "mosaic-yoffset", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "mosaic-yoffset", Other, NULL );
-    var_Create( p_intf, "mosaic-offsets", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "mosaic-offsets", Other, NULL );
-    var_Create( p_intf, "mosaic-align", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "mosaic-align", Other, NULL );
-    var_Create( p_intf, "mosaic-vborder", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "mosaic-vborder", Other, NULL );
-    var_Create( p_intf, "mosaic-hborder", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "mosaic-hborder", Other, NULL );
-    var_Create( p_intf, "mosaic-position",
-                     VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "mosaic-position", Other, NULL );
-    var_Create( p_intf, "mosaic-rows", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "mosaic-rows", Other, NULL );
-    var_Create( p_intf, "mosaic-cols", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "mosaic-cols", Other, NULL );
-    var_Create( p_intf, "mosaic-order", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "mosaic-order", Other, NULL );
-    var_Create( p_intf, "mosaic-keep-aspect-ratio",
-                     VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "mosaic-keep-aspect-ratio", Other, NULL );
+    ADD( "marq-marquee", STRING, Other )
+    ADD( "marq-x", INTEGER, Other )
+    ADD( "marq-y", INTEGER, Other )
+    ADD( "marq-position", INTEGER, Other )
+    ADD( "marq-color", INTEGER, Other )
+    ADD( "marq-opacity", INTEGER, Other )
+    ADD( "marq-timeout", INTEGER, Other )
+    ADD( "marq-size", INTEGER, Other )
+
+    ADD( "mosaic-alpha", INTEGER, Other )
+    ADD( "mosaic-height", INTEGER, Other )
+    ADD( "mosaic-width", INTEGER, Other )
+    ADD( "mosaic-xoffset", INTEGER, Other )
+    ADD( "mosaic-yoffset", INTEGER, Other )
+    ADD( "mosaic-offsets", STRING, Other )
+    ADD( "mosaic-align", INTEGER, Other )
+    ADD( "mosaic-vborder", INTEGER, Other )
+    ADD( "mosaic-hborder", INTEGER, Other )
+    ADD( "mosaic-position", INTEGER, Other )
+    ADD( "mosaic-rows", INTEGER, Other )
+    ADD( "mosaic-cols", INTEGER, Other )
+    ADD( "mosaic-order", STRING, Other )
+    ADD( "mosaic-keep-aspect-ratio", INTEGER, Other )
 
     /* logo on the fly items */
-    var_Create( p_intf, "logo-file", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "logo-file", Other, NULL );
-    var_Create( p_intf, "logo-x", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "logo-x", Other, NULL );
-    var_Create( p_intf, "logo-y", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "logo-y", Other, NULL );
-    var_Create( p_intf, "logo-position", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "logo-position", Other, NULL );
-    var_Create( p_intf, "logo-transparency", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "logo-transparency", Other, NULL );
+    ADD( "logo-file", STRING, Other )
+    ADD( "logo-x", INTEGER, Other )
+    ADD( "logo-y", INTEGER, Other )
+    ADD( "logo-position", INTEGER, Other )
+    ADD( "logo-transparency", INTEGER, Other )
 
     /* OSD menu commands */
-    var_Create( p_intf, "menu", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "menu", Menu, NULL );
+    ADD(  "menu", STRING, Menu )
 
     /* DVD commands */
-    var_Create( p_intf, "pause", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "pause", Input, NULL );
-    var_Create( p_intf, "seek", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "seek", Input, NULL );
-    var_Create( p_intf, "title", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "title", Input, NULL );
-    var_Create( p_intf, "title_n", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "title_n", Input, NULL );
-    var_Create( p_intf, "title_p", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "title_p", Input, NULL );
-    var_Create( p_intf, "chapter", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "chapter", Input, NULL );
-    var_Create( p_intf, "chapter_n", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "chapter_n", Input, NULL );
-    var_Create( p_intf, "chapter_p", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "chapter_p", Input, NULL );
-
-    var_Create( p_intf, "fastforward", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "fastforward", Input, NULL );
-    var_Create( p_intf, "rewind", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "rewind", Input, NULL );
-    var_Create( p_intf, "faster", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "faster", Input, NULL );
-    var_Create( p_intf, "slower", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "slower", Input, NULL );
-    var_Create( p_intf, "normal", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "normal", Input, NULL );
-
-    var_Create( p_intf, "atrack", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "atrack", Input, NULL );
-    var_Create( p_intf, "vtrack", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "vtrack", Input, NULL );
-    var_Create( p_intf, "strack", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "strack", Input, NULL );
+    ADD( "pause", VOID, Input )
+    ADD( "seek", INTEGER, Input )
+    ADD( "title", STRING, Input )
+    ADD( "title_n", VOID, Input )
+    ADD( "title_p", VOID, Input )
+    ADD( "chapter", STRING, Input )
+    ADD( "chapter_n", VOID, Input )
+    ADD( "chapter_p", VOID, Input )
+
+    ADD( "fastforward", VOID, Input )
+    ADD( "rewind", VOID, Input )
+    ADD( "faster", VOID, Input )
+    ADD( "slower", VOID, Input )
+    ADD( "normal", VOID, Input )
+
+    ADD( "atrack", STRING, Input )
+    ADD( "vtrack", STRING, Input )
+    ADD( "strack", STRING, Input )
 
     /* video commands */
-    var_Create( p_intf, "vratio", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "vratio", VideoConfig, NULL );
-    var_Create( p_intf, "vcrop", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "vcrop", VideoConfig, NULL );
-    var_Create( p_intf, "vzoom", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "vzoom", VideoConfig, NULL );
+    ADD( "vratio", STRING, VideoConfig )
+    ADD( "vcrop", STRING, VideoConfig )
+    ADD( "vzoom", STRING, VideoConfig )
 
     /* audio commands */
-    var_Create( p_intf, "volume", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "volume", Volume, NULL );
-    var_Create( p_intf, "volup", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "volup", VolumeMove, NULL );
-    var_Create( p_intf, "voldown", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "voldown", VolumeMove, NULL );
-    var_Create( p_intf, "adev", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "adev", AudioConfig, NULL );
-    var_Create( p_intf, "achan", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_intf, "achan", AudioConfig, NULL );
+    ADD( "volume", STRING, Volume )
+    ADD( "volup", STRING, VolumeMove )
+    ADD( "voldown", STRING, VolumeMove )
+    ADD( "adev", STRING, AudioConfig )
+    ADD( "achan", STRING, AudioConfig )
+
+#undef ADD
 }
 
 /*****************************************************************************
@@ -597,14 +531,17 @@ static void Run( intf_thread_t *p_intf )
             {
                 if( !p_input->b_dead || !p_input->b_die )
                 {
-                    msg_rc( STATUS_CHANGE "( new input: %s )", p_input->input.p_item->psz_uri );
-                    msg_rc( STATUS_CHANGE "( audio volume: %d )", config_GetInt( p_intf, "volume" ));
+                    msg_rc( STATUS_CHANGE "( new input: %s )",
+                            input_GetItem(p_input)->psz_uri );
+                    msg_rc( STATUS_CHANGE "( audio volume: %d )",
+                            config_GetInt( p_intf, "volume" ));
                 }
                 var_AddCallback( p_input, "state", StateChanged, p_intf );
                 var_AddCallback( p_input, "rate-faster", RateChanged, p_intf );
                 var_AddCallback( p_input, "rate-slower", RateChanged, p_intf );
                 var_AddCallback( p_input, "rate", RateChanged, p_intf );
-                var_AddCallback( p_input, "time-offset", TimeOffsetChanged, p_intf );
+                var_AddCallback( p_input, "time-offset", TimeOffsetChanged,
+                                 p_intf );
             }
         }
         else if( p_input->b_dead )
@@ -613,7 +550,8 @@ static void Run( intf_thread_t *p_intf )
             var_DelCallback( p_input, "rate-faster", RateChanged, p_intf );
             var_DelCallback( p_input, "rate-slower", RateChanged, p_intf );
             var_DelCallback( p_input, "rate", RateChanged, p_intf );
-            var_DelCallback( p_input, "time-offset", TimeOffsetChanged, p_intf );
+            var_DelCallback( p_input, "time-offset", TimeOffsetChanged,
+                             p_intf );
             vlc_object_release( p_input );
             p_input = NULL;
 
@@ -636,13 +574,15 @@ static void Run( intf_thread_t *p_intf )
                 p_intf->p_sys->i_last_state = PLAYLIST_STOPPED;
                 msg_rc( STATUS_CHANGE "( stop state: 0 )" );
             }
-            else if( (p_intf->p_sys->i_last_state != p_playlist->status.i_status) &&
+            else if(
+                (p_intf->p_sys->i_last_state != p_playlist->status.i_status) &&
                 (p_playlist->status.i_status == PLAYLIST_RUNNING) )
             {
                 p_intf->p_sys->i_last_state = p_playlist->status.i_status;
                 msg_rc( STATUS_CHANGE "( play state: 1 )" );
             }
-            else if( (p_intf->p_sys->i_last_state != p_playlist->status.i_status) &&
+            else if(
+                (p_intf->p_sys->i_last_state != p_playlist->status.i_status) &&
                 (p_playlist->status.i_status == PLAYLIST_PAUSED) )
             {
                 p_intf->p_sys->i_last_state = p_playlist->status.i_status;
@@ -729,11 +669,11 @@ static void Run( intf_thread_t *p_intf )
             if( p_input )
             {
                 int i, j;
-                vlc_mutex_lock( &p_input->input.p_item->lock );
-                for ( i = 0; i < p_input->input.p_item->i_categories; i++ )
+                vlc_mutex_lock( &input_GetItem(p_input)->lock );
+                for ( i = 0; i < input_GetItem(p_input)->i_categories; i++ )
                 {
-                    info_category_t *p_category =
-                        p_input->input.p_item->pp_categories[i];
+                    info_category_t *p_category = input_GetItem(p_input)
+                                                        ->pp_categories[i];
 
                     msg_rc( "+----[ %s ]", p_category->psz_name );
                     msg_rc( "| " );
@@ -746,7 +686,7 @@ static void Run( intf_thread_t *p_intf )
                     msg_rc( "| " );
                 }
                 msg_rc( "+----[ end of stream info ]" );
-                vlc_mutex_unlock( &p_input->input.p_item->lock );
+                vlc_mutex_unlock( &input_GetItem(p_input)->lock );
             }
             else
             {
@@ -798,7 +738,7 @@ static void Run( intf_thread_t *p_intf )
             }
             else
             {
-                msg_rc( "%s", p_input->input.p_item->psz_name );
+                msg_rc( "%s", input_GetItem(p_input)->psz_name );
             }
         }
         else if( !strcmp( psz_cmd, "longhelp" ) || !strncmp( psz_cmd, "h", 1 )
@@ -830,17 +770,20 @@ static void Run( intf_thread_t *p_intf )
                     vlc_bool_t b_update = VLC_FALSE;
                     var_Get( p_vout, "fullscreen", &val );
                     val.b_bool = !val.b_bool;
-                    if( !strncmp(psz_arg, "on", 2) && (val.b_bool == VLC_TRUE) )
+                    if( !strncmp( psz_arg, "on", 2 )
+                        && ( val.b_bool == VLC_TRUE ) )
                     {
                         b_update = VLC_TRUE;
                         val.b_bool = VLC_TRUE;
                     }
-                    else if( !strncmp(psz_arg, "off", 3)  && (val.b_bool == VLC_FALSE) )
+                    else if( !strncmp( psz_arg, "off", 3 )
+                             && ( val.b_bool == VLC_FALSE ) )
                     {
                         b_update = VLC_TRUE;
                         val.b_bool = VLC_FALSE;
                     }
-                    else if( strncmp(psz_arg, "off", 3) && strncmp(psz_arg, "on", 2) )
+                    else if( strncmp( psz_arg, "off", 3 )
+                             && strncmp( psz_arg, "on", 2 ) )
                         b_update = VLC_TRUE;
                     if( b_update ) var_Set( p_vout, "fullscreen", val );
                     vlc_object_release( p_vout );
@@ -997,7 +940,8 @@ static int TimeOffsetChanged( vlc_object_t *p_this, char const *psz_cmd,
     p_input = vlc_object_find( p_intf, VLC_OBJECT_INPUT, FIND_ANYWHERE );
     if( p_input )
     {
-        msg_rc( STATUS_CHANGE "( time-offset: %d )", var_GetInteger( p_input, "time-offset" ) );
+        msg_rc( STATUS_CHANGE "( time-offset: %d )",
+                var_GetInteger( p_input, "time-offset" ) );
         vlc_object_release( p_input );
     }
     vlc_mutex_unlock( &p_intf->p_sys->status_lock );
@@ -1010,7 +954,8 @@ static int VolumeChanged( vlc_object_t *p_this, char const *psz_cmd,
     intf_thread_t *p_intf = (intf_thread_t*)p_data;
 
     vlc_mutex_lock( &p_intf->p_sys->status_lock );
-    msg_rc( STATUS_CHANGE "( audio volume: %d )", config_GetInt( p_this, "volume") );
+    msg_rc( STATUS_CHANGE "( audio volume: %d )",
+            config_GetInt( p_this, "volume") );
     vlc_mutex_unlock( &p_intf->p_sys->status_lock );
     return VLC_SUCCESS;
 }
@@ -1064,7 +1009,8 @@ static int RateChanged( vlc_object_t *p_this, char const *psz_cmd,
     p_input = vlc_object_find( p_intf, VLC_OBJECT_INPUT, FIND_ANYWHERE );
     if( p_input )
     {
-        msg_rc( STATUS_CHANGE "( new rate: %d )", var_GetInteger( p_input, "rate" ) );
+        msg_rc( STATUS_CHANGE "( new rate: %d )",
+                var_GetInteger( p_input, "rate" ) );
         vlc_object_release( p_input );
     }
     vlc_mutex_unlock( &p_intf->p_sys->status_lock );
@@ -1235,7 +1181,7 @@ static int Input( vlc_object_t *p_this, char const *psz_cmd,
              || !strcmp( psz_cmd, "vtrack" )
              || !strcmp( psz_cmd, "strack" ) )
     {
-        char *psz_variable;
+        const char *psz_variable;
         vlc_value_t val_name;
         int i_error;
 
@@ -1404,9 +1350,7 @@ static int Playlist( vlc_object_t *p_this, char const *psz_cmd,
     else if( !strcmp( psz_cmd, "clear" ) )
     {
         playlist_Stop( p_playlist );
-        vlc_mutex_lock( &p_playlist->object_lock );
-        playlist_Clear( p_playlist );
-        vlc_mutex_unlock( &p_playlist->object_lock );
+        playlist_Clear( p_playlist, VLC_FALSE );
     }
     else if( !strcmp( psz_cmd, "add" ) &&
              newval.psz_string && *newval.psz_string )
@@ -1416,8 +1360,8 @@ static int Playlist( vlc_object_t *p_this, char const *psz_cmd,
         if( p_item )
         {
             msg_rc( "Trying to add %s to playlist.", newval.psz_string );
-            playlist_PlaylistAddInput( p_playlist, p_item,
-                              PLAYLIST_GO|PLAYLIST_APPEND, PLAYLIST_END );
+            playlist_AddInput( p_playlist, p_item,
+                     PLAYLIST_GO|PLAYLIST_APPEND, PLAYLIST_END, VLC_TRUE );
         }
     }
     else if( !strcmp( psz_cmd, "enqueue" ) &&
@@ -1428,8 +1372,8 @@ static int Playlist( vlc_object_t *p_this, char const *psz_cmd,
         if( p_item )
         {
             msg_rc( "trying to enqueue %s to playlist", newval.psz_string );
-            playlist_PlaylistAddInput( p_playlist, p_item,
-                              PLAYLIST_APPEND, PLAYLIST_END );
+            playlist_AddInput( p_playlist, p_item,
+                               PLAYLIST_APPEND, PLAYLIST_END, VLC_TRUE );
         }
     }
     else if( !strcmp( psz_cmd, "playlist" ) )
@@ -1441,7 +1385,7 @@ static int Playlist( vlc_object_t *p_this, char const *psz_cmd,
     }
     else if( !strcmp( psz_cmd, "sort" ))
     {
-        playlist_RecursiveNodeSort( p_playlist, p_playlist->p_root_onelevel, 
+        playlist_RecursiveNodeSort( p_playlist, p_playlist->p_root_onelevel,
                                     SORT_ARTIST, ORDER_NORMAL );
     }
     else if( !strcmp( psz_cmd, "status" ) )
@@ -1449,8 +1393,10 @@ static int Playlist( vlc_object_t *p_this, char const *psz_cmd,
         if( p_playlist->p_input )
         {
             /* Replay the current state of the system. */
-            msg_rc( STATUS_CHANGE "( new input: %s )", p_playlist->p_input->input.p_item->psz_uri );
-            msg_rc( STATUS_CHANGE "( audio volume: %d )", config_GetInt( p_intf, "volume" ));
+            msg_rc( STATUS_CHANGE "( new input: %s )",
+                    input_GetItem(p_playlist->p_input)->psz_uri );
+            msg_rc( STATUS_CHANGE "( audio volume: %d )",
+                    config_GetInt( p_intf, "volume" ));
 
             vlc_mutex_lock( &p_playlist->object_lock );
             switch( p_playlist->status.i_status )
@@ -1518,16 +1464,6 @@ static int Other( vlc_object_t *p_this, char const *psz_cmd,
     }
 
     /* Parse miscellaneous commands */
-    if( !strcmp( psz_cmd, "marq-marquee" ) )
-    {
-        var_SetString( p_input->p_libvlc_global, "marq-marquee", newval.psz_string );
-    }
-    else
-    if( strlen( newval.psz_string ) == 0)
-    {
-        /* All the variable above expects strlen > 0 */
-    }
-    else
     {
         static const char vars[] =
             "marq-x\0" "marq-y\0" "marq-position\0" "marq-color\0"
@@ -1539,19 +1475,31 @@ static int Other( vlc_object_t *p_this, char const *psz_cmd,
             "mosaic-offsets\0" "mosaic-keep-aspect-ratio\0"
             "logo-file\0" "logo-x\0" "logo-y\0" "logo-position\0"
             "logo-transparency\0";
-        const char *name;
+        const char *psz_name = NULL;
 
-        for (name = vars; *name; name += strlen (name) + 1)
+        if( newval.psz_string )
+        for( psz_name = vars; *psz_name; psz_name += strlen( psz_name ) + 1 )
         {
-            if (strcmp (name, psz_cmd) == 0)
+            if( strcmp( psz_name, psz_cmd ) == 0 )
             {
-                val.i_int = atoi (newval.psz_string);
-                var_Set (p_input->p_libvlc_global, name, val);
-                break;
+                int i_type = var_Type( p_input->p_libvlc_global, psz_name );
+
+                if( i_type & VLC_VAR_INTEGER )
+                {
+                    var_SetInteger( p_input->p_libvlc_global, psz_name,
+                                    atoi( newval.psz_string ) );
+                    break;
+                }
+                else if( i_type & VLC_VAR_STRING )
+                {
+                    var_SetString( p_input->p_libvlc_global, psz_name,
+                                   newval.psz_string );
+                    break;
+                }
             }
         }
 
-        if (*name == '\0')
+        if( *psz_name == '\0' )
             msg_rc( "Unknown command!" );
     }