+ msg_child = vlm_MessageAdd( msg_media,
+ vlm_MessageNew( "instances", NULL ) );
+
+ for( i = 0; i < media->i_instance; i++ )
+ {
+ vlm_media_instance_t *p_instance = media->instance[i];
+ vlc_value_t val;
+ vlm_message_t *msg_instance;
+ char *psz_tmp;
+
+ if( !p_instance->p_input ) val.i_int = END_S;
+ else var_Get( p_instance->p_input, "state", &val );
+
+ msg_instance = vlm_MessageNew( "instance" , NULL );
+ vlm_MessageAdd( msg_instance, vlm_MessageNew( "name" , p_instance->psz_name ? p_instance->psz_name : "default" ) );
+ vlm_MessageAdd( msg_instance, vlm_MessageNew( "state",
+ val.i_int == PLAYING_S ? "playing" :
+ val.i_int == PAUSE_S ? "paused" :
+ "stopped" ) );
+#define APPEND_INPUT_INFO( a, format, type ) \
+ asprintf( &psz_tmp, format, \
+ var_Get ## type( p_instance->p_input, a ) ); \
+ vlm_MessageAdd( msg_instance, vlm_MessageNew( a, psz_tmp ) ); \
+ free( psz_tmp );
+ APPEND_INPUT_INFO( "position", "%f", Float );
+ APPEND_INPUT_INFO( "time", "%d", Integer );
+ APPEND_INPUT_INFO( "length", "%d", Integer );
+ APPEND_INPUT_INFO( "rate", "%d", Integer );
+ APPEND_INPUT_INFO( "title", "%d", Integer );
+ APPEND_INPUT_INFO( "chapter", "%d", Integer );
+ APPEND_INPUT_INFO( "seekable", "%d", Bool );
+#undef APPEND_INPUT_INFO
+ asprintf( &psz_tmp, "%d", p_instance->i_index + 1 );
+ vlm_MessageAdd( msg_instance, vlm_MessageNew( "playlistindex", psz_tmp ) );
+ free( psz_tmp );
+ vlm_MessageAdd( msg_child, msg_instance );
+ }
+
+ return msg;
+
+ }
+
+ else if( schedule != NULL )
+ {
+ int i;
+ vlm_message_t *msg;
+ vlm_message_t *msg_schedule;
+ vlm_message_t *msg_child;
+ char buffer[100];
+
+ msg = vlm_MessageNew( "show", NULL );
+ msg_schedule =
+ vlm_MessageAdd( msg, vlm_MessageNew( schedule->psz_name, 0 ) );
+
+ vlm_MessageAdd( msg_schedule, vlm_MessageNew("type", "schedule") );
+
+ vlm_MessageAdd( msg_schedule,
+ vlm_MessageNew( "enabled", schedule->b_enabled ?
+ "yes" : "no" ) );
+
+#if !defined( UNDER_CE )