From: Pierre d'Herbemont Date: Sun, 10 Aug 2008 21:10:28 +0000 (+0200) Subject: update: Various fixes to make it work on Mac OS X. X-Git-Tag: 0.9.0~473 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=45c3c5f4c0d8413799253968f4210cc6f5cc776c;p=vlc update: Various fixes to make it work on Mac OS X. --- diff --git a/include/vlc_update.h b/include/vlc_update.h index 4bc7fd308d..c7795c9862 100644 --- a/include/vlc_update.h +++ b/include/vlc_update.h @@ -59,6 +59,7 @@ VLC_EXPORT( void, update_Check, ( update_t *, void (*callback)( void*, bool ), v VLC_EXPORT( bool, update_NeedUpgrade, ( update_t * ) ); VLC_EXPORT( void, update_Download, ( update_t *, const char* ) ); VLC_EXPORT( update_release_t*, update_GetRelease, ( update_t * ) ); +VLC_EXPORT( void, update_WaitDownload, ( update_t * ) ); /** * @} diff --git a/modules/gui/macosx/update.m b/modules/gui/macosx/update.m index 4346af3b09..88ed6bd755 100644 --- a/modules/gui/macosx/update.m +++ b/modules/gui/macosx/update.m @@ -151,7 +151,7 @@ static VLCUpdate *_o_sharedInstance = nil; if( returnCode == NSOKButton ) { /* perform download and pass the selected path */ - [self performDownload: [sheet filename]]; + [NSThread detachNewThreadSelector:@selector(performDownload:) toTarget:self withObject:[sheet filename]]; } [sheet release]; } @@ -215,11 +215,14 @@ static void updateCallback( void * p_data, bool b_success ) - (void)performDownload:(NSString *)path { + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; update_Download( p_u, [path UTF8String] ); [o_btn_DownloadNow setEnabled: NO]; [o_update_window orderOut: self]; + update_WaitDownload( p_u ); update_Delete( p_u ); p_u = nil; + [pool release]; } @end diff --git a/src/libvlccore.sym b/src/libvlccore.sym index 839260f623..c2937f523a 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -362,6 +362,7 @@ update_Download update_GetRelease update_NeedUpgrade __update_New +update_WaitDownload us_atof us_strtod utf8_fopen diff --git a/src/misc/update.c b/src/misc/update.c index d1620eb848..96a3948992 100644 --- a/src/misc/update.c +++ b/src/misc/update.c @@ -1456,6 +1456,14 @@ static char *size_str( long int l_size ) return i_retval == -1 ? NULL : psz_tmp; } +void update_WaitDownload( update_t *p_update ) +{ + if(p_update->p_download) + vlc_thread_join( p_update->p_download ); + vlc_object_release( p_update->p_download ); + p_update->p_download = NULL; +} + static void* update_DownloadReal( vlc_object_t *p_this ); /** @@ -1504,6 +1512,8 @@ static void* update_DownloadReal( vlc_object_t *p_this ) update_t *p_update = p_udt->p_update; char *psz_destdir = p_udt->psz_destdir; + msg_Dbg( p_udt, "Opening Stream '%s'", p_update->release.psz_url ); + /* Open the stream */ p_stream = stream_UrlNew( p_udt, p_update->release.psz_url ); if( !p_stream ) @@ -1536,7 +1546,12 @@ static void* update_DownloadReal( vlc_object_t *p_this ) /* Create a buffer and fill it with the downloaded file */ p_buffer = (void *)malloc( 1 << 10 ); if( !p_buffer ) + { + msg_Err( p_udt, "Can't malloc (1 << 10) bytes! download cancelled." ); goto end; + } + + msg_Dbg( p_udt, "Downloading Stream '%s'", p_update->release.psz_url ); psz_size = size_str( l_size ); if( asprintf( &psz_status, "%s\nDownloading... O.O/%s %.1f%% done", @@ -1585,6 +1600,7 @@ static void* update_DownloadReal( vlc_object_t *p_this ) p_update->release.psz_url, psz_size ) != -1 ) { intf_ProgressUpdate( p_udt, i_progress, psz_status, 100.0, 0 ); + i_progress = 0; free( psz_status ); } } @@ -1674,6 +1690,10 @@ static void* update_DownloadReal( vlc_object_t *p_this ) free( p_hash ); end: + if( i_progress ) + { + intf_ProgressUpdate( p_udt, i_progress, "Cancelled", 100.0, 0 ); + } if( p_stream ) stream_Delete( p_stream ); if( p_file ) @@ -1715,6 +1735,11 @@ bool update_NeedUpgrade( update_t *p_update ) return false; } +void update_WaitDownload( update_t *p_update ) +{ + (void)p_update; +} + void update_Download( update_t *p_update, const char *psz_destdir ) { (void)p_update; (void)psz_destdir;