]> git.sesse.net Git - vlc/blobdiff - modules/services_discovery/shout.c
- Fix TTL in SDP
[vlc] / modules / services_discovery / shout.c
index f9167d8a2a1bb39bd33760d94d13ee2f46908ea7..e8391748af75e35051a50c16319cba762424ea91 100644 (file)
 /*****************************************************************************
  * Includes
  *****************************************************************************/
-#include <stdlib.h>                                      /* malloc(), free() */
 
 #include <vlc/vlc.h>
-#include <vlc/intf.h>
-#include <vlc_interaction.h>
+#include <vlc_playlist.h>
+#include <vlc_interface.h>
 
-#include <vlc/input.h>
-
-#include "network.h"
+#include <vlc_network.h>
 
 #include <errno.h>                                                 /* ENOMEM */
 
@@ -69,7 +66,7 @@ vlc_module_begin();
     set_category( CAT_PLAYLIST );
     set_subcategory( SUBCAT_PLAYLIST_SD );
 
-    add_suppressed_integer( "shoutcast-limit" );
+    add_obsolete_integer( "shoutcast-limit" );
 
     set_capability( "services_discovery", 0 );
     set_callbacks( OpenRadio, Close );
@@ -90,7 +87,6 @@ vlc_module_end();
 
 struct services_discovery_sys_t
 {
-    playlist_item_t *p_node_cat,*p_node_one;
     input_item_t *p_input;
     vlc_bool_t b_dialog;
 };
@@ -102,9 +98,9 @@ struct services_discovery_sys_t
  * Local prototypes
  *****************************************************************************/
 
-/* Main functions */
-    static void Run    ( services_discovery_t *p_intf );
+static void Run( services_discovery_t *p_sd );
 
+/* Main functions */
 static int OpenRadio( vlc_object_t *p_this )
 {
     return Open( p_this, RADIO );
@@ -121,110 +117,45 @@ static int OpenTV( vlc_object_t *p_this )
 static int Open( vlc_object_t *p_this, int i_type )
 {
     services_discovery_t *p_sd = ( services_discovery_t* )p_this;
-    services_discovery_sys_t *p_sys  = malloc(
-                                    sizeof( services_discovery_sys_t ) );
-
-    vlc_value_t         val;
-    playlist_t          *p_playlist;
-    playlist_view_t     *p_view;
-
-    p_sd->pf_run = Run;
+    DECMALLOC_ERR( p_sys, services_discovery_sys_t );
     p_sd->p_sys  = p_sys;
-
-    /* Create our playlist node */
-    p_playlist = (playlist_t *)vlc_object_find( p_sd, VLC_OBJECT_PLAYLIST,
-                                                FIND_ANYWHERE );
-    if( !p_playlist )
-    {
-        msg_Warn( p_sd, "unable to find playlist, cancelling");
-        return VLC_EGENERIC;
-    }
+    p_sd->pf_run = Run;
 
     switch( i_type )
     {
         case TV:
-            p_sys->p_input = input_ItemNewExt( p_playlist,
+            p_sys->p_input = input_ItemNewExt( p_sd,
                                 SHOUTCAST_TV_BASE_URL, _("Shoutcast TV"),
                                 0, NULL, -1 );
             break;
         case RADIO:
         default:
-            p_sys->p_input = input_ItemNewExt( p_playlist,
+            p_sys->p_input = input_ItemNewExt( p_sd,
                                 SHOUTCAST_BASE_URL, _("Shoutcast"),
                                 0, NULL, -1 );
             break;
     }
-    /* TODO FLAGS */
-    p_sys->p_node_cat = playlist_NodeAddInput( p_playlist, p_sys->p_input,
-                           p_playlist->p_root_category,
-                           PLAYLIST_APPEND, PLAYLIST_END );
-    p_sys->p_node_one = playlist_NodeAddInput( p_playlist, p_sys->p_input,
-                           p_playlist->p_root_onelevel,
-                           PLAYLIST_APPEND, PLAYLIST_END );
-    val.b_bool = VLC_TRUE;
-    var_Set( p_playlist, "intf-change", val );
-
-    vlc_object_release( p_playlist );
-
+    input_ItemAddOption( p_sys->p_input, "no-playlist-autostart" );
     return VLC_SUCCESS;
 }
 
 /*****************************************************************************
- * Close:
+ * Run:
  *****************************************************************************/
-static void Close( vlc_object_t *p_this )
+static void Run( services_discovery_t *p_sd )
 {
-    services_discovery_t *p_sd = ( services_discovery_t* )p_this;
-    services_discovery_sys_t *p_sys  = p_sd->p_sys;
-    playlist_t *p_playlist =  (playlist_t *) vlc_object_find( p_sd,
-                                 VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
-    if( p_playlist )
-    {
-        playlist_NodeDelete( p_playlist, p_sys->p_node_cat, VLC_TRUE, VLC_TRUE );
-        playlist_NodeDelete( p_playlist, p_sys->p_node_one, VLC_TRUE, VLC_TRUE );
-        vlc_object_release( p_playlist );
-    }
-    free( p_sys );
+    services_discovery_AddItem( p_sd, p_sd->p_sys->p_input, NULL /* no category */ );
+
+    input_Read( pl_Yield(p_sd), p_sd->p_sys->p_input, VLC_FALSE );
 }
 
 /*****************************************************************************
- * Run: main thread
+ * Close:
  *****************************************************************************/
-static void Run( services_discovery_t *p_sd )
+static void Close( vlc_object_t *p_this )
 {
+    services_discovery_t *p_sd = ( services_discovery_t* )p_this;
     services_discovery_sys_t *p_sys  = p_sd->p_sys;
-    int i_id = input_Read( p_sd, p_sys->p_input, VLC_FALSE );
-    int i_dialog_id;
-
-    i_dialog_id = intf_UserProgress( p_sd, "Shoutcast" , 
-                                     _("Connecting...") , 0.0, 0 );
-
-    p_sys->b_dialog = VLC_TRUE;
-    while( !p_sd->b_die )
-    {
-        input_thread_t *p_input = (input_thread_t *)vlc_object_get( p_sd,
-                                                                    i_id );
-
-        /* The Shoutcast server does not return a content-length so we
-         * can't know where we are. Use the number of inserted items
-         * as a hint */
-        if( p_input != NULL )
-        {
-            int i_state = var_GetInteger( p_input, "state" );
-            if( i_state == PLAYING_S )
-            {
-                float f_pos = (float)(p_sys->p_node_cat->i_children)* 2 *100.0 /
-                              260 /* gruiiik FIXME */;
-                intf_ProgressUpdate( p_sd, i_dialog_id, "Downloading",
-                                     f_pos, 0 );
-            }
-            vlc_object_release( p_input );
-        }
-        else if( p_sys->b_dialog )
-        {
-            p_sys->b_dialog  = VLC_FALSE;
-            intf_UserHide( p_sd, i_dialog_id );
-        }
-        msleep( 10000 );
-    }
+    services_discovery_RemoveItem( p_sd, p_sys->p_input );
+    free( p_sys );
 }