⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 update.m

📁 VLC Player Source Code
💻 M
字号:
/***************************************************************************** * update.m: MacOS X Check-For-Update window ***************************************************************************** * Copyright © 2005-2008 the VideoLAN team * $Id: 88ed6bd755596489bb4b6e9fc87f0e59d2bb239d $ * * Authors: Felix Kühne <fkuehne@users.sf.net> *          Rafaël Carré <funman@videolanorg> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA. *****************************************************************************/#import "update.h"#ifdef UPDATE_CHECK#include <assert.h>/***************************************************************************** * Preamble *****************************************************************************/static NSString * kPrefUpdateOnStartup = @"UpdateOnStartup";static NSString * kPrefUpdateLastTimeChecked = @"UpdateLastTimeChecked";/***************************************************************************** * VLCExtended implementation *****************************************************************************/@implementation VLCUpdatestatic VLCUpdate *_o_sharedInstance = nil;+ (VLCUpdate *)sharedInstance{    return _o_sharedInstance ? _o_sharedInstance : [[self alloc] init];}- (id)init{    if( _o_sharedInstance ) {        [self dealloc];    } else {        _o_sharedInstance = [super init];        b_checked = false;        /* clean the interface */        [o_fld_releaseNote setString: @""];        [o_fld_currentVersion setString: @""];        /* translate strings to the user's language */        [o_update_window setTitle: _NS("Check for Updates")];        [o_btn_DownloadNow setTitle: _NS("Download now")];        [o_btn_okay setTitle: _NS("OK")];        [o_chk_updateOnStartup setTitle: _NS("Automatically check for updates")];    }    return _o_sharedInstance;}- (void)awakeFromNib{    /* we don't use - (BOOL)shouldCheckUpdateOnStartup because we don't want     * the Alert panel to pop up at this time */    [o_chk_updateOnStartup setState: [[NSUserDefaults standardUserDefaults] boolForKey: kPrefUpdateOnStartup]];}- (void)setShouldCheckUpdate: (BOOL)check{    [[NSUserDefaults standardUserDefaults] setBool: check forKey: kPrefUpdateOnStartup];    [o_chk_updateOnStartup setState: check];}- (BOOL)shouldCheckForUpdate{    NSDate *o_last_update;    NSDate *o_next_update;     if( ![[NSUserDefaults standardUserDefaults] objectForKey: kPrefUpdateOnStartup] )    {        /* We don't have any preferences stored, ask the user. */        int res = NSRunInformationalAlertPanel( _NS("Do you want VLC to check for updates automatically?"),              _NS("You can change this option in VLC's update window later on."), _NS("Yes"), _NS("No"), nil );        [self setShouldCheckUpdate: res];    }    if( ![[NSUserDefaults standardUserDefaults] boolForKey: kPrefUpdateOnStartup] )        return NO;    o_last_update = [[NSUserDefaults standardUserDefaults] objectForKey: kPrefUpdateLastTimeChecked];    if( !o_last_update )        return YES;    o_next_update = [[[NSDate alloc] initWithTimeInterval: 60*60*24*2 /* every two days */ sinceDate: o_last_update] autorelease];    if( !o_next_update )        return YES;    return [o_next_update compare: [NSDate date]] == NSOrderedAscending;}- (void)showUpdateWindow{    /* show the window and check for a potential update */    [o_update_window center];    [o_update_window displayIfNeeded];    [o_update_window makeKeyAndOrderFront:nil];    if( !b_checked )    {        [o_bar_checking startAnimation: self];        [self checkForUpdate];        b_checked = true;        [o_bar_checking stopAnimation: self];    }}- (IBAction)download:(id)sender{    /* provide a save dialogue */    SEL sel = @selector(getLocationForSaving:returnCode:contextInfo:);    NSSavePanel * saveFilePanel = [[NSSavePanel alloc] init];    [saveFilePanel setRequiredFileType: @"dmg"];    [saveFilePanel setCanSelectHiddenExtension: YES];    [saveFilePanel setCanCreateDirectories: YES];    update_release_t *p_release = update_GetRelease( p_u );    assert( p_release );    [saveFilePanel beginSheetForDirectory:nil file:        [[[NSString stringWithUTF8String: p_release->psz_url] componentsSeparatedByString:@"/"] lastObject]                           modalForWindow: o_update_window                             modalDelegate:self                           didEndSelector:sel                              contextInfo:nil];}- (void)getLocationForSaving: (NSSavePanel *)sheet                   returnCode: (int)returnCode                  contextInfo: (void *)contextInfo{    if( returnCode == NSOKButton )    {        /* perform download and pass the selected path */        [NSThread detachNewThreadSelector:@selector(performDownload:) toTarget:self withObject:[sheet filename]];    }    [sheet release];}- (IBAction)okay:(id)sender{    /* just hides the window */    [o_update_window orderOut: self];}- (IBAction)changeCheckUpdateOnStartup:(id)sender{    [self setShouldCheckUpdate: [sender state]];}- (void)setUpToDate:(NSNumber *)uptodate{    if( [uptodate boolValue] )    {        [o_fld_releaseNote setString: @""];        [o_fld_currentVersion setStringValue: @""];        [o_fld_status setStringValue: _NS("This version of VLC is the latest available.")];        [o_btn_DownloadNow setEnabled: NO];    }    else    {        update_release_t *p_release = update_GetRelease( p_u );        [o_fld_releaseNote setString: [NSString stringWithUTF8String: (p_release->psz_desc ? p_release->psz_desc : "" )]];        [o_fld_status setStringValue: _NS("This version of VLC is outdated.")];        [o_fld_currentVersion setStringValue: [NSString stringWithFormat:            _NS("The current release is %d.%d.%d%c."), p_release->i_major,            p_release->i_minor, p_release->i_revision, p_release->extra]];        [o_btn_DownloadNow setEnabled: YES];        /* Make sure the update window is showed in case we have something */        [o_update_window center];        [o_update_window displayIfNeeded];        [o_update_window makeKeyAndOrderFront: self];    }}static void updateCallback( void * p_data, bool b_success ){    VLCUpdate * update = p_data;    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];    NSNumber * state = [NSNumber numberWithBool:!b_success || !update_NeedUpgrade( update->p_u )];    [update performSelectorOnMainThread:@selector(setUpToDate:) withObject:state waitUntilDone:YES];    [pool release];}- (void)checkForUpdate{    p_u = update_New( VLCIntf );    if( !p_u )        return;    update_Check( p_u, updateCallback, self );    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];    [[NSUserDefaults standardUserDefaults] setObject: [NSDate date] forKey: kPrefUpdateLastTimeChecked];    [pool release];}- (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#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -