Interaction: remove (buggy and useless) dialog IDs
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Sat, 31 Jan 2009 22:04:40 +0000 (00:04 +0200)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Sat, 31 Jan 2009 22:04:40 +0000 (00:04 +0200)
include/vlc_interface.h
modules/access/dvb/scan.c
modules/access/dvb/scan.h
modules/demux/avi/avi.c
src/interface/interaction.c
src/misc/update.c

index ee09b2d..6f0be41 100644 (file)
@@ -200,7 +200,6 @@ typedef enum vlc_dialog {
  */
 struct interaction_dialog_t
 {
-    int             i_id;               ///< Unique ID
     int             i_type;             ///< Type identifier
     char           *psz_title;          ///< Title
     char           *psz_description;    ///< Descriptor string
@@ -294,13 +293,13 @@ VLC_EXPORT( int, __intf_UserStringInput,(vlc_object_t*, const char*, const char*
 
 #define intf_IntfProgress( a, b, c ) __intf_Progress( VLC_OBJECT(a), NULL, b,c, -1 )
 #define intf_UserProgress( a, b, c, d, e ) __intf_Progress( VLC_OBJECT(a),b,c,d,e )
-VLC_EXPORT( int, __intf_Progress,( vlc_object_t*, const char*, const char*, float, int) );
+VLC_EXPORT( interaction_dialog_t *, __intf_Progress,( vlc_object_t*, const char*, const char*, float, int) );
 #define intf_ProgressUpdate( a, b, c, d, e ) __intf_ProgressUpdate( VLC_OBJECT(a),b,c,d,e )
-VLC_EXPORT( void, __intf_ProgressUpdate,( vlc_object_t*, int, const char*, float, int) );
+VLC_EXPORT( void, __intf_ProgressUpdate,( vlc_object_t*, interaction_dialog_t *, const char*, float, int) );
 #define intf_ProgressIsCancelled( a, b ) __intf_UserProgressIsCancelled( VLC_OBJECT(a),b )
-VLC_EXPORT( bool, __intf_UserProgressIsCancelled,( vlc_object_t*, int ) );
+VLC_EXPORT( bool, __intf_UserProgressIsCancelled,( vlc_object_t*, interaction_dialog_t * ) );
 #define intf_UserHide( a, b ) __intf_UserHide( VLC_OBJECT(a), b )
-VLC_EXPORT( void, __intf_UserHide,( vlc_object_t *, int ));
+VLC_EXPORT( void, __intf_UserHide,( vlc_object_t *, interaction_dialog_t * ));
 
 /** @} */
 /** @} */
index d8ec30e..0db0162 100644 (file)
@@ -126,7 +126,7 @@ int scan_Init( vlc_object_t *p_obj, scan_t *p_scan, const scan_parameter_t *p_pa
 
     p_scan->p_obj = VLC_OBJECT(p_obj);
     p_scan->i_index = 0;
-    p_scan->i_dialog_id = -1;
+    p_scan->p_dialog = NULL;
     TAB_INIT( p_scan->i_service, p_scan->pp_service );
     p_scan->parameter = *p_parameter;
     p_scan->i_time_start = mdate();
@@ -135,8 +135,8 @@ int scan_Init( vlc_object_t *p_obj, scan_t *p_scan, const scan_parameter_t *p_pa
 }
 void scan_Clean( scan_t *p_scan )
 {
-    if( p_scan->i_dialog_id >= 0 )
-        intf_UserHide( p_scan->p_obj, p_scan->i_dialog_id );
+    if( p_scan->p_dialog != NULL )
+        intf_UserHide( p_scan->p_obj, p_scan->p_dialog );
 
     for( int i = 0; i < p_scan->i_service; i++ )
         scan_service_Delete( p_scan->pp_service[i] );
@@ -317,10 +317,10 @@ int scan_Next( scan_t *p_scan, scan_configuration_t *p_cfg )
         if( i_eta >= 0 )
             msg_Info( p_scan->p_obj, "Scan ETA %s | %f", secstotimestr( psz_eta, i_eta/1000000 ), f_position * 100 );
 
-        if( p_scan->i_dialog_id < 0 )
-            p_scan->i_dialog_id = intf_UserProgress( p_scan->p_obj, _("Scanning DVB-T"), psz_text, 100.0 * f_position, -1 );
+        if( p_scan->p_dialog == NULL )
+            p_scan->p_dialog = intf_UserProgress( p_scan->p_obj, _("Scanning DVB-T"), psz_text, 100.0 * f_position, -1 );
         else
-            intf_ProgressUpdate( p_scan->p_obj, p_scan->i_dialog_id, psz_text, 100 * f_position, -1 );
+            intf_ProgressUpdate( p_scan->p_obj, p_scan->p_dialog, psz_text, 100 * f_position, -1 );
         free( psz_text );
     }
 
@@ -330,7 +330,7 @@ int scan_Next( scan_t *p_scan, scan_configuration_t *p_cfg )
 
 bool scan_IsCancelled( scan_t *p_scan )
 {
-    return p_scan->i_dialog_id >= 0 && intf_ProgressIsCancelled( p_scan->p_obj, p_scan->i_dialog_id );
+    return p_scan->p_dialog && intf_ProgressIsCancelled( p_scan->p_obj, p_scan->p_dialog );
 }
 
 static scan_service_t *ScanFindService( scan_t *p_scan, int i_service_start, int i_program )
index cd58042..8afc404 100644 (file)
@@ -127,8 +127,8 @@ typedef struct
 typedef struct
 {
     vlc_object_t *p_obj;
+    interaction_dialog_t *p_dialog;
     int64_t i_index;
-    int i_dialog_id;
     scan_parameter_t parameter;
     int64_t i_time_start;
 
index 5bb276f..99a2618 100644 (file)
@@ -2375,7 +2375,7 @@ static void AVI_IndexCreate( demux_t *p_demux )
     off_t i_movi_end;
 
     mtime_t i_dialog_update;
-    int     i_dialog_id;
+    interaction_dialog_t *p_dialog = NULL;
 
     p_riff = AVI_ChunkFind( &p_sys->ck_root, AVIFOURCC_RIFF, 0);
     p_movi = AVI_ChunkFind( p_riff, AVIFOURCC_movi, 0);
@@ -2400,10 +2400,9 @@ static void AVI_IndexCreate( demux_t *p_demux )
 
 
     /* Only show dialog if AVI is > 10MB */
-    i_dialog_id = -1;
     i_dialog_update = mdate();
     if( stream_Size( p_demux->s ) > 10000000 )
-        i_dialog_id = intf_IntfProgress( p_demux, _("Fixing AVI Index..."), 0.0 );
+        p_dialog = intf_IntfProgress( p_demux, _("Fixing AVI Index..."), 0.0 );
 
     for( ;; )
     {
@@ -2413,14 +2412,14 @@ static void AVI_IndexCreate( demux_t *p_demux )
             break;
 
         /* Don't update/check dialog too often */
-        if( i_dialog_id > 0 && mdate() - i_dialog_update > 100000 )
+        if( p_dialog && mdate() - i_dialog_update > 100000 )
         {
-            if( intf_ProgressIsCancelled( p_demux, i_dialog_id ) )
+            if( intf_ProgressIsCancelled( p_demux, p_dialog ) )
                 break;
 
             double f_pos = 100.0 * stream_Tell( p_demux->s ) /
                            stream_Size( p_demux->s );
-            intf_ProgressUpdate( p_demux, i_dialog_id,
+            intf_ProgressUpdate( p_demux, p_dialog,
                                  _( "Fixing AVI Index..." ), f_pos, -1 );
 
             i_dialog_update = mdate();
@@ -2484,8 +2483,8 @@ static void AVI_IndexCreate( demux_t *p_demux )
     }
 
 print_stat:
-    if( i_dialog_id > 0 )
-        intf_UserHide( p_demux, i_dialog_id );
+    if( p_dialog != NULL )
+        intf_UserHide( p_demux, p_dialog );
 
     for( i_stream = 0; i_stream < p_sys->i_track; i_stream++ )
     {
index 82bd8ca..efa0939 100644 (file)
@@ -69,13 +69,12 @@ static intf_thread_t *          SearchInterface( interaction_t * );
 static void*                    InteractionLoop( void * );
 static void                     InteractionManage( interaction_t * );
 
-static interaction_dialog_t    *DialogGetById( interaction_t* , int );
 static void                     DialogDestroy( interaction_dialog_t * );
 static int DialogSend( vlc_object_t *, interaction_dialog_t * );
 
-#define DIALOG_INIT( type ) \
+#define DIALOG_INIT( type, err ) \
         interaction_dialog_t* p_new = calloc( 1, sizeof( interaction_dialog_t ) ); \
-        if( !p_new ) return VLC_EGENERIC;               \
+        if( !p_new ) return err;                        \
         p_new->b_cancelled = false;                     \
         p_new->i_status = NEW_DIALOG;                   \
         p_new->i_flags = 0;                             \
@@ -103,7 +102,7 @@ int __intf_UserFatal( vlc_object_t *p_this, bool b_blocking,
                        const char *psz_format, ... )
 {
     va_list args;
-    DIALOG_INIT( ONEWAY );
+    DIALOG_INIT( ONEWAY, VLC_EGENERIC );
 
     p_new->psz_title = strdup( psz_title );
     FORMAT_DESC;
@@ -129,7 +128,7 @@ int __intf_UserWarn( vlc_object_t *p_this,
                      const char *psz_format, ... )
 {
     va_list args;
-    DIALOG_INIT( ONEWAY );
+    DIALOG_INIT( ONEWAY, VLC_EGENERIC );
 
     p_new->psz_title = strdup( psz_title );
     FORMAT_DESC;
@@ -157,7 +156,7 @@ int __intf_UserYesNo( vlc_object_t *p_this,
                       const char *psz_alternate,
                       const char *psz_other )
 {
-    DIALOG_INIT( TWOWAY );
+    DIALOG_INIT( TWOWAY, VLC_EGENERIC );
 
     p_new->psz_title = strdup( psz_title );
     p_new->psz_description = strdup( psz_description );
@@ -178,12 +177,13 @@ int __intf_UserYesNo( vlc_object_t *p_this,
  * \param psz_status       Current status
  * \param f_position       Current position (0.0->100.0)
  * \param i_timeToGo       Time (in sec) to go until process is finished
- * \return                 Dialog id, to give to UserProgressUpdate
+ * \return                 Dialog, for use with UserProgressUpdate
  */
-int __intf_Progress( vlc_object_t *p_this, const char *psz_title,
+interaction_dialog_t *
+__intf_Progress( vlc_object_t *p_this, const char *psz_title,
                      const char *psz_status, float f_pos, int i_time )
 {
-    DIALOG_INIT( ONEWAY );
+    DIALOG_INIT( ONEWAY, NULL );
     p_new->psz_description = strdup( psz_status );
     p_new->val.f_float = f_pos;
     p_new->i_timeToGo = i_time;
@@ -198,37 +198,28 @@ int __intf_Progress( vlc_object_t *p_this, const char *psz_title,
         p_new->i_flags = DIALOG_INTF_PROGRESS;
 
     DialogSend( p_this, p_new );
-    return p_new->i_id;
+    return p_new;
 }
 
 /**
  * Update a progress bar in a dialogue
  *
  * \param p_this           Parent vlc_object
- * \param i_id             Identifier of the dialog
+ * \param p_dialog         Dialog
  * \param psz_status       New status
  * \param f_position       New position (0.0->100.0)
  * \param i_timeToGo       Time (in sec) to go until process is finished
  * \return                 nothing
  */
-void __intf_ProgressUpdate( vlc_object_t *p_this, int i_id,
+void __intf_ProgressUpdate( vlc_object_t *p_this,
+                            interaction_dialog_t *p_dialog,
                             const char *psz_status, float f_pos, int i_time )
 {
     interaction_t *p_interaction = InteractionGet( p_this );
-    interaction_dialog_t *p_dialog;
 
     if( !p_interaction ) return;
 
     vlc_object_lock( p_interaction );
-    p_dialog  =  DialogGetById( p_interaction, i_id );
-
-    if( !p_dialog )
-    {
-        vlc_object_unlock( p_interaction );
-        vlc_object_release( p_interaction );
-        return;
-    }
-
     free( p_dialog->psz_description );
     p_dialog->psz_description = strdup( psz_status );
 
@@ -247,26 +238,18 @@ void __intf_ProgressUpdate( vlc_object_t *p_this, int i_id,
  * interface module and the caller
  *
  * \param p_this           Parent vlc_object
- * \param i_id             Identifier of the dialogue
+ * \param p_dialog         Dialog
  * \return                 Either true or false
  */
-bool __intf_UserProgressIsCancelled( vlc_object_t *p_this, int i_id )
+bool __intf_UserProgressIsCancelled( vlc_object_t *p_this,
+                                     interaction_dialog_t *p_dialog )
 {
     interaction_t *p_interaction = InteractionGet( p_this );
-    interaction_dialog_t *p_dialog;
     bool b_cancel;
 
     if( !p_interaction ) return true;
 
     vlc_object_lock( p_interaction );
-    p_dialog  =  DialogGetById( p_interaction, i_id );
-    if( !p_dialog )
-    {
-        vlc_object_unlock( p_interaction ) ;
-        vlc_object_release( p_interaction );
-        return true;
-    }
-
     b_cancel = p_dialog->b_cancelled;
     vlc_object_unlock( p_interaction );
     vlc_object_release( p_interaction );
@@ -290,7 +273,7 @@ int __intf_UserLoginPassword( vlc_object_t *p_this,
         char **ppsz_password )
 {
     int i_ret;
-    DIALOG_INIT( TWOWAY );
+    DIALOG_INIT( TWOWAY, VLC_EGENERIC );
     p_new->i_type = INTERACT_DIALOG_TWOWAY;
     p_new->psz_title = strdup( psz_title );
     p_new->psz_description = strdup( psz_description );
@@ -326,7 +309,7 @@ int __intf_UserStringInput( vlc_object_t *p_this,
         char **ppsz_usersString )
 {
     int i_ret;
-    DIALOG_INIT( TWOWAY );
+    DIALOG_INIT( TWOWAY, VLC_EGENERIC );
     p_new->i_type = INTERACT_DIALOG_TWOWAY;
     p_new->psz_title = strdup( psz_title );
     p_new->psz_description = strdup( psz_description );
@@ -347,25 +330,18 @@ int __intf_UserStringInput( vlc_object_t *p_this,
  * Hide an interaction dialog
  *
  * \param p_this the parent vlc object
- * \param i_id the id of the item to hide
+ * \param p_dialog the dialog to hide
  * \return nothing
  */
-void __intf_UserHide( vlc_object_t *p_this, int i_id )
+void __intf_UserHide( vlc_object_t *p_this, interaction_dialog_t *p_dialog )
 {
     interaction_t *p_interaction = InteractionGet( p_this );
-    interaction_dialog_t *p_dialog;
 
     if( !p_interaction ) return;
 
     vlc_object_lock( p_interaction );
-    p_dialog = DialogGetById( p_interaction, i_id );
-
-    if( p_dialog )
-    {
-        p_dialog->i_status = ANSWERED_DIALOG;
-        vlc_cond_signal( &p_interaction->wait );
-    }
-
+    p_dialog->i_status = ANSWERED_DIALOG;
+    vlc_cond_signal( &p_interaction->wait );
     vlc_object_unlock( p_interaction );
     vlc_object_release( p_interaction );
 }
@@ -491,19 +467,6 @@ static intf_thread_t *SearchInterface( interaction_t *p_interaction )
     return intf;
 }
 
-/* Find an interaction dialog by its id */
-static interaction_dialog_t *DialogGetById( interaction_t *p_interaction,
-                                            int i_id )
-{
-    int i;
-    for( i = 0 ; i< p_interaction->i_dialogs; i++ )
-    {
-        if( p_interaction->pp_dialogs[i]->i_id == i_id )
-            return p_interaction->pp_dialogs[i];
-    }
-    return NULL;
-}
-
 /* Destroy a dialog */
 static void DialogDestroy( interaction_dialog_t *p_dialog )
 {
@@ -524,12 +487,6 @@ static int DialogSend( vlc_object_t *p_this, interaction_dialog_t *p_dialog )
     if( !p_interaction )
         return VLC_EGENERIC;
 
-    /* Get an id, if we don't already have one */
-    vlc_object_lock( p_interaction );
-    if( p_dialog->i_id == 0 )
-        p_dialog->i_id = ++p_interaction->i_last_id;
-    vlc_object_unlock( p_interaction );
-
     if( p_this->i_flags & OBJECT_FLAGS_NOINTERACT )
     {
         vlc_object_release( p_interaction );
@@ -549,7 +506,7 @@ static int DialogSend( vlc_object_t *p_this, interaction_dialog_t *p_dialog )
         vlc_object_lock( p_interaction );
         for( i = 0 ; i< p_interaction->i_dialogs; i++ )
         {
-            if( p_interaction->pp_dialogs[i]->i_id == p_dialog->i_id )
+            if( p_interaction->pp_dialogs[i] == p_dialog )
                 b_found = true;
         }
         /* Add it to the queue, the main loop will send the orders to the
index 7a0f51e..320b727 100644 (file)
@@ -1511,7 +1511,7 @@ void update_Download( update_t *p_update, const char *destination )
 static void* update_DownloadReal( vlc_object_t *p_this )
 {
     update_download_thread_t *p_udt = (update_download_thread_t *)p_this;
-    int i_progress = 0;
+    interaction_dialog_t *p_progress = 0;
     long int l_size;
     long int l_downloaded = 0;
     float f_progress;
@@ -1589,7 +1589,7 @@ static void* update_DownloadReal( vlc_object_t *p_this )
     if( asprintf( &psz_status, _("%s\nDownloading... %s/%s %.1f%% done"),
         p_update->release.psz_url, "0.0", psz_size, 0.0 ) != -1 )
     {
-        i_progress = intf_UserProgress( p_udt, _( "Downloading ..."),
+        p_progress = intf_UserProgress( p_udt, _( "Downloading ..."),
                                         psz_status, 0.0, 0 );
         free( psz_status );
     }
@@ -1597,7 +1597,7 @@ static void* update_DownloadReal( vlc_object_t *p_this )
     vlc_object_lock( p_udt );
     while( vlc_object_alive( p_udt ) &&
            ( i_read = stream_Read( p_stream, p_buffer, 1 << 10 ) ) &&
-           !intf_ProgressIsCancelled( p_udt, i_progress ) )
+           !intf_ProgressIsCancelled( p_udt, p_progress ) )
     {
         vlc_object_unlock( p_udt );
         if( fwrite( p_buffer, i_read, 1, p_file ) < 1 )
@@ -1614,7 +1614,7 @@ static void* update_DownloadReal( vlc_object_t *p_this )
                       p_update->release.psz_url, psz_downloaded, psz_size,
                       f_progress ) != -1 )
         {
-            intf_ProgressUpdate( p_udt, i_progress, psz_status, f_progress, 0 );
+            intf_ProgressUpdate( p_udt, p_progress, psz_status, f_progress, 0 );
             free( psz_status );
         }
         free( psz_downloaded );
@@ -1626,14 +1626,14 @@ static void* update_DownloadReal( vlc_object_t *p_this )
     p_file = NULL;
 
     if( vlc_object_alive( p_udt ) &&
-        !intf_ProgressIsCancelled( p_udt, i_progress ) )
+        !intf_ProgressIsCancelled( p_udt, p_progress ) )
     {
         vlc_object_unlock( p_udt );
         if( asprintf( &psz_status, _("%s\nDone %s (100.0%%)"),
             p_update->release.psz_url, psz_size ) != -1 )
         {
-            intf_ProgressUpdate( p_udt, i_progress, psz_status, 100.0, 0 );
-            i_progress = 0;
+            intf_ProgressUpdate( p_udt, p_progress, psz_status, 100.0, 0 );
+            p_progress = NULL
             free( psz_status );
         }
     }
@@ -1723,9 +1723,9 @@ static void* update_DownloadReal( vlc_object_t *p_this )
     free( p_hash );
 
 end:
-    if( i_progress )
+    if( p_progress )
     {
-        intf_ProgressUpdate( p_udt, i_progress, _("Cancelled"), 100.0, 0 );
+        intf_ProgressUpdate( p_udt, p_progress, _("Cancelled"), 100.0, 0 );
     }
     if( p_stream )
         stream_Delete( p_stream );