Fix a bunch of warnings and errors
[vlc.git] / modules / misc / growl.c
index 5e128e0..194a295 100644 (file)
@@ -51,26 +51,26 @@ static int CheckAndSend( vlc_object_t *p_this, uint8_t* p_data, int i_offset );
 
 /*****************************************************************************
  * Module descriptor
- *****************************************************************************
- * This module should be used on windows with MSN (i think that you need to
- * have MSN 7 or newer) to "advertise" what you are playing in VLC.
- * You need to enable the "What I'm Listening To" option in MSN.
- *****************************************************************************/
+ ****************************************************************************/
+
+/// \bug [String] REmove all "Growl" in short desc
+
 #define SERVER_DEFAULT "127.0.0.1"
 #define SERVER_TEXT N_("Growl server")
-#define SERVER_LONGTEXT N_("Growl server receiving notifications.")
+#define SERVER_LONGTEXT N_("This is the host to which Growl notifications " \
+   "will be sent. By default, notifications are sent locally." )
 #define PASS_DEFAULT ""
 #define PASS_TEXT N_("Growl password")
+/// \bug [String] Password on the Growl server.
 #define PASS_LONGTEXT N_("Growl password on the server.")
 #define PORT_TEXT N_("Growl UDP port")
-#define PORT_LONGTEXT N_("Growl UPD port on the server.")
-#define TTL_TEXT N_("Growl TTL")
-#define TTL_LONGTEXT N_("Growl TTL.")
+/// \bug [String] UDP port on the Growl server
+#define PORT_LONGTEXT N_("Growl UDP port on the server.")
 
 vlc_module_begin();
     set_category( CAT_INTERFACE );
     set_subcategory( SUBCAT_INTERFACE_CONTROL );
-    set_shortname( N_( "growl" ) );
+    set_shortname( N_( "Growl" ) );
     set_description( _("Growl Notification Plugin") );
 
     add_string( "growl-server", SERVER_DEFAULT, NULL,
@@ -79,8 +79,6 @@ vlc_module_begin();
                 PASS_TEXT, PASS_LONGTEXT, VLC_FALSE );
     add_integer( "growl-port", 9887, NULL,
                 PORT_TEXT, PORT_LONGTEXT, VLC_TRUE );
-    add_integer( "growl-ttl", 12, NULL,
-                TTL_TEXT, TTL_LONGTEXT, VLC_TRUE );
 
     set_capability( "interface", 0 );
     set_callbacks( Open, Close );
@@ -99,7 +97,7 @@ static int Open( vlc_object_t *p_this )
     if( !p_playlist )
     {
         msg_Err( p_intf, "could not find playlist object" );
-        return -1;
+        return VLC_ENOOBJ;
     }
 
     var_AddCallback( p_playlist, "playlist-current", ItemChange, p_intf );
@@ -108,7 +106,7 @@ static int Open( vlc_object_t *p_this )
     RegisterToGrowl( p_this );
     p_intf->pf_run = Run;
 
-    return 0;
+    return VLC_SUCCESS;
 }
 
 /*****************************************************************************
@@ -116,6 +114,14 @@ static int Open( vlc_object_t *p_this )
  *****************************************************************************/
 static void Close( vlc_object_t *p_this )
 {
+    playlist_t *p_playlist = (playlist_t *)vlc_object_find(
+        p_this, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
+
+    if( p_playlist )
+    {
+        var_DelCallback( p_playlist, "playlist-current", ItemChange, p_this );
+        vlc_object_release( p_playlist );
+    }
 }
 
 /*****************************************************************************
@@ -133,26 +139,35 @@ static int ItemChange( vlc_object_t *p_this, const char *psz_var,
                        vlc_value_t oldval, vlc_value_t newval, void *param )
 {
     char psz_tmp[GROWL_MAX_LENGTH];
+    playlist_t *p_playlist;
     char *psz_title = NULL;
     char *psz_artist = NULL;
     char *psz_album = NULL;
+    input_thread_t *p_input;
+
+    p_playlist = (playlist_t *)vlc_object_find( p_this, VLC_OBJECT_PLAYLIST,
+                                                FIND_ANYWHERE );
+    if( !p_playlist ) return VLC_EGENERIC;
+
+    p_input = p_playlist->p_input;
+    vlc_object_release( p_playlist );
+    if( !p_input ) return VLC_SUCCESS;
+    vlc_object_yield( p_input );
 
-    input_thread_t *p_input =
-        (input_thread_t *)vlc_object_find( p_this, VLC_OBJECT_INPUT,
-                                           FIND_ANYWHERE );
-    if( !p_input || p_input->b_dead || !p_input->input.p_item->psz_name )
+    if( p_input->b_dead || !p_input->input.p_item->psz_name )
     {
         /* Not playing anything ... */
+        vlc_object_release( p_input );
         return VLC_SUCCESS;
     }
 
     /* Playing something ... */
-    psz_artist = vlc_input_item_GetInfo( p_input->input.p_item,
-                                         _("Meta-information"),
-                                         VLC_META_ARTIST);
-    psz_album = vlc_input_item_GetInfo( p_input->input.p_item,
-                                         _("Meta-information"),
-                                         _("Album/movie/show title" ) );
+    psz_artist = p_input->input.p_item->p_meta->psz_artist ?
+                  strdup( p_input->input.p_item->p_meta->psz_artist ) :
+                  strdup( "" );
+    psz_album = p_input->input.p_item->p_meta->psz_album ?
+                  strdup( p_input->input.p_item->p_meta->psz_album ) :
+                  strdup( "" );
     psz_title = strdup( p_input->input.p_item->psz_name );
     if( psz_title == NULL ) psz_title = strdup( N_("(no title)") );
     if( psz_artist == NULL ) psz_artist = strdup( N_("(no artist)") );
@@ -264,7 +279,6 @@ static int CheckAndSend( vlc_object_t *p_this, uint8_t* p_data, int i_offset )
     char *psz_password = config_GetPsz( p_intf, "growl-password" );
     char *psz_server = config_GetPsz( p_intf, "growl-server" );
     int i_port = config_GetInt( p_intf, "growl-port" );
-    int i_ttl = config_GetInt( p_intf, "growl-ttl" );
     strcpy( (char*)(p_data+i_offset), psz_password );
     i = i_offset + strlen(psz_password);
 
@@ -281,7 +295,7 @@ static int CheckAndSend( vlc_object_t *p_this, uint8_t* p_data, int i_offset )
         p_data[i_offset++] = (md5.p_digest[i]>>24)&0xFF;
     }
 
-    i_handle = net_ConnectUDP( p_this, psz_server, i_port, i_ttl );
+    i_handle = net_ConnectUDP( p_this, psz_server, i_port, 0 );
     if( i_handle == -1 )
     {
          msg_Err( p_this, "failed to open a connection (udp)" );