]> git.sesse.net Git - vlc/blobdiff - modules/misc/audioscrobbler.c
Removes trailing spaces. Removes tabs.
[vlc] / modules / misc / audioscrobbler.c
index d55d936e8389fa0336b709a61b300628401f20b6..15213061c9cc7959f523c30109de844712c3ee55 100644 (file)
@@ -22,7 +22,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
-/* audioscrobbler protocol version: 1.1 
+/* audioscrobbler protocol version: 1.1
  * http://audioscrobbler.net/wiki/Protocol1.1
  * */
 
@@ -30,8 +30,6 @@
  * Preamble
  *****************************************************************************/
 
-#define _GNU_SOURCE
-#include <string.h>
 
 #if defined( WIN32 )
 #include <time.h>
@@ -102,6 +100,7 @@ intf_sys_t *p_sys_global;     /* to retrieve p_sys in Run() thread */
 static int  Open        ( vlc_object_t * );
 static void Close       ( vlc_object_t * );
 static void Run         ( intf_thread_t * );
+static void Main        ( intf_thread_t * );
 static int ItemChange   ( vlc_object_t *, const char *, vlc_value_t,
                                 vlc_value_t, void * );
 static int PlayingChange( vlc_object_t *, const char *, vlc_value_t,
@@ -151,7 +150,7 @@ vlc_module_begin();
     set_description( N_("Audioscrobbler submission Plugin") );
     add_string( "lastfm-username", "", NULL,
                 USERNAME_TEXT, USERNAME_LONGTEXT, VLC_FALSE );
-    add_string( "lastfm-password", "", NULL,
+    add_password( "lastfm-password", "", NULL,
                 PASSWORD_TEXT, PASSWORD_LONGTEXT, VLC_FALSE );
     set_capability( "interface", 0 );
     set_callbacks( Open, Close );
@@ -174,7 +173,6 @@ static int Open( vlc_object_t *p_this )
     free( p_sys ); \
     return VLC_ENOMEM;
 
-
     if( !p_sys )
     {
         MEM_ERROR
@@ -283,10 +281,19 @@ static void Close( vlc_object_t *p_this )
     free( p_sys );
 }
 
+/****************************************************************************
+ * Run : create Main() thread
+ * **************************************************************************/
+static void Run( intf_thread_t *p_intf )
+{
+    if( vlc_thread_create( p_intf, "Audioscrobbler", Main, 0, VLC_TRUE ) )
+        msg_Err( p_intf, "failed to create Audioscrobbler thread" );
+}
+
 /*****************************************************************************
- * Run : call Handshake() then submit songs
+ * Main : call Handshake() then submit songs
  *****************************************************************************/
-static void Run( intf_thread_t *p_this )
+static void Main( intf_thread_t *p_this )
 {
     char                    *psz_submit         = NULL;
     char                    *psz_submit_song    = NULL;
@@ -299,6 +306,8 @@ static void Run( intf_thread_t *p_this )
     int                     i_post_socket;
     time_t                  played_time;
 
+    vlc_thread_ready( p_this );
+
     p_this->p_sys = p_sys_global;
     intf_sys_t *p_sys = p_this->p_sys;
 
@@ -321,7 +330,7 @@ static void Run( intf_thread_t *p_this )
     /* main loop */
     while( !p_this->b_die )
     {
-        /* verify if there is data to submit 
+        /* verify if there is data to submit
          * and if waiting interval is elapsed */
         if ( ( p_sys->p_first_queue->i_songs_nb > 0 ) &&
             ( time( NULL ) >= p_sys->time_next_exchange ) )
@@ -330,7 +339,7 @@ static void Run( intf_thread_t *p_this )
             if( p_sys->b_handshaked == VLC_FALSE )
             {
                 msg_Dbg( p_this, "Handshaking with last.fm ..." );
+
                 switch( Handshake( p_this ) )
                 {
                     case VLC_ENOMEM:
@@ -368,6 +377,10 @@ static void Run( intf_thread_t *p_this )
                         vlc_mutex_unlock ( &p_sys->lock );
                         break;
                 }
+                /* handshake is done or failed, lets start from
+                 * beginning to check it out and wait INTERVAL if needed
+                 */
+                continue;
             }
 
             msg_Dbg( p_this, "Going to submit some data..." );
@@ -631,8 +644,10 @@ static int ItemChange( vlc_object_t *p_this, const char *psz_var,
     p_sys->p_current_song->psz_i = encode_URI_component( psz_date );
     p_sys->p_current_song->time_playing = epoch;
 
-    p_sys->b_paused = ( p_input->b_dead || !input_GetItem(p_input)->psz_name )
+    char *psz_name = input_item_GetName( input_GetItem( p_input ) );
+    p_sys->b_paused = ( p_input->b_dead || !psz_name )
                       ? VLC_TRUE : VLC_FALSE;
+    free( psz_name );
 
     vlc_mutex_unlock( &p_sys->lock );
 
@@ -744,7 +759,7 @@ static int Handshake( intf_thread_t *p_this )
     stream_t            *p_stream;
     char                *psz_handshake_url      = NULL;
     uint8_t             *p_buffer               = NULL;
-    char                *p_buffer_pos           = NULL; 
+    char                *p_buffer_pos           = NULL;
     char                *psz_url_parser         = NULL;
     char                *psz_buffer_substring;
     int                 i_url_pos, i;
@@ -1004,7 +1019,7 @@ static int ReadMetaData( intf_thread_t *p_this )
 
     var_Change( p_input, "video-es", VLC_VAR_CHOICESCOUNT, &video_val, NULL );
     if( ( video_val.i_int > 0 ) || \
-        ( input_GetItem(p_input)->i_type == ITEM_TYPE_NET ) )
+        ( input_GetItem( p_input )->i_type == ITEM_TYPE_NET ) )
     {
         msg_Dbg( p_this, "Not an audio only local file -> no submission");
         vlc_object_release( p_input );
@@ -1039,55 +1054,62 @@ static int ReadMetaData( intf_thread_t *p_this )
             return VLC_SUCCESS; \
         }
 
+    char *psz_meta;
     #define ALLOC_ITEM_META( a, b ) \
-        if ( input_GetItem(p_input)->b ) \
+        psz_meta = input_item_Get##b( input_GetItem( p_input ) ); \
+        if( psz_meta ) \
         { \
-            a = encode_URI_component( \
-                input_GetItem(p_input)->b ); \
+            a = encode_URI_component( psz_meta ); \
             if( !a ) \
             { \
+                free( psz_meta ); \
                 FREE_INPUT_AND_CHARS \
                 return VLC_ENOMEM; \
             } \
+            free( psz_meta ); \
         }
 
     i_status = input_GetItem(p_input)->p_meta->i_status;
 
-    b_waiting = VLC_TRUE;
-/*  TODO: meta data fetching doesn't work atm
     vlc_mutex_lock( &p_sys->lock );
     b_waiting = p_sys->b_waiting_meta;
     vlc_mutex_unlock( &p_sys->lock );
-*/
 
-    /* TODO: item preparsing is buggy on drag&drop and command line arguments
     if( i_status & ( !b_waiting ? ITEM_PREPARSED : ITEM_META_FETCHED ) )
-    */
-    if( 1 )
     {
-        ALLOC_ITEM_META( psz_artist, p_meta->psz_artist )
+        ALLOC_ITEM_META( psz_artist, Artist )
         else
         {
             msg_Dbg( p_this, "No artist.." );
             WAIT_METADATA_FETCHING( psz_artist )
         }
-
-        ALLOC_ITEM_META( psz_title, psz_name )
+        psz_meta = input_item_GetTitle( input_GetItem( p_input ) );
+        if( psz_meta )
+        {
+            psz_title = encode_URI_component( psz_meta );
+            if( !psz_title )
+            {
+                free( psz_meta );
+                FREE_INPUT_AND_CHARS
+                return VLC_ENOMEM;
+            }
+            free( psz_meta );
+        }
         else
         {
             msg_Dbg( p_this, "No track name.." );
             WAIT_METADATA_FETCHING( psz_title );
         }
 
-        ALLOC_ITEM_META( psz_album, p_meta->psz_album )
+        ALLOC_ITEM_META( psz_album, Album )
         else
             psz_album = calloc( 1, 1 );
 
-        ALLOC_ITEM_META( psz_trackid, p_meta->psz_trackid )
+        ALLOC_ITEM_META( psz_trackid, TrackID )
         else
             psz_trackid = calloc( 1, 1 );
 
-        i_length = input_GetItem(p_input)->i_duration / 1000000;
+        i_length = input_item_GetDuration( input_GetItem( p_input ) ) / 1000000;
 
         vlc_mutex_lock ( &p_sys->lock );
 
@@ -1103,8 +1125,8 @@ static int ReadMetaData( intf_thread_t *p_this )
 
         msg_Dbg( p_this, "Meta data registered, waiting to be queued" );
     }
-   
-    FREE_INPUT_AND_CHARS 
+    FREE_INPUT_AND_CHARS
     return VLC_SUCCESS;
 #undef FREE_INPUT_AND_CHARS
 #undef ALLOC_ITEM_META