]> git.sesse.net Git - vlc/commitdiff
update: Various fixes to make it work on Mac OS X.
authorPierre d'Herbemont <pdherbemont@videolan.org>
Sun, 10 Aug 2008 21:10:28 +0000 (23:10 +0200)
committerPierre d'Herbemont <pdherbemont@videolan.org>
Sun, 10 Aug 2008 21:10:28 +0000 (23:10 +0200)
include/vlc_update.h
modules/gui/macosx/update.m
src/libvlccore.sym
src/misc/update.c

index 4bc7fd308d5c9d766714a6b67b1402220bb7c8ae..c7795c98622e4631f1c9379e9b882689fb0ebd26 100644 (file)
@@ -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 * ) );
 
 /**
  * @}
index 4346af3b09893fa7658a21cb4cc80ca28122b53e..88ed6bd755596489bb4b6e9fc87f0e59d2bb239d 100644 (file)
@@ -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
index 839260f6233e3c10a21ffc9ebfc5662110fadbda..c2937f523a791a0aee53276ab6836d76c99933f5 100644 (file)
@@ -362,6 +362,7 @@ update_Download
 update_GetRelease
 update_NeedUpgrade
 __update_New
+update_WaitDownload
 us_atof
 us_strtod
 utf8_fopen
index d1620eb8483ad6b28a3857ed9d1ca5354058ff9d..96a3948992f7fdfe5aed37b0fe3d8565272d2237 100644 (file)
@@ -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;