X-Git-Url: https://git.saurik.com/cydia.git/blobdiff_plain/c2292b80989b35263615375eed64f10e1ad1e072..4304c998ad3ba110b222b71699443e66023acbc3:/MobileCydia.mm diff --git a/MobileCydia.mm b/MobileCydia.mm index 1772f17b..7223a99e 100644 --- a/MobileCydia.mm +++ b/MobileCydia.mm @@ -293,6 +293,7 @@ static _finline void UpdateExternalStatus(uint64_t newStatus) { @end /* }}} */ +/* Cydia Action Sheet {{{ */ @interface CYActionSheet : UIAlertView { unsigned button_; } @@ -339,6 +340,7 @@ static _finline void UpdateExternalStatus(uint64_t newStatus) { } @end +/* }}} */ /* NSForcedOrderingSearch doesn't work on the iPhone */ static const NSStringCompareOptions MatchCompareOptions_ = NSLiteralSearch | NSCaseInsensitiveSearch; @@ -1053,6 +1055,7 @@ static NSString *SerialNumber_ = nil; static NSString *ChipID_ = nil; static NSString *Token_ = nil; static NSString *UniqueID_ = nil; +static NSString *PLMN_ = nil; static NSString *Build_ = nil; static NSString *Product_ = nil; static NSString *Safari_ = nil; @@ -3997,10 +4000,13 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } } -- (id) invokeDefaultMethodWithArguments:(NSArray *)args { +- (void) _doContinue { [self dismissModalViewControllerAnimated:YES]; [delegate_ cancelAndClear:NO]; +} +- (id) invokeDefaultMethodWithArguments:(NSArray *)args { + [self performSelectorOnMainThread:@selector(_doContinue) withObject:nil waitUntilDone:NO]; return nil; } @@ -4281,7 +4287,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { CGRect prgrect = {{ (bounds.size.width - prgsize.width) / 2, - bounds.size.height - prgsize.height - 64 + bounds.size.height - prgsize.height - 20 }, prgsize}; float closewidth = bounds.size.width - 20; @@ -4290,7 +4296,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [progress_ setFrame:prgrect]; [status_ setFrame:CGRectMake( 10, - bounds.size.height - prgsize.height - 94, + bounds.size.height - prgsize.height - 50, bounds.size.width - 20, 24 )]; @@ -4298,11 +4304,11 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { 10, 20, bounds.size.width - 20, - bounds.size.height - 106 + bounds.size.height - 62 )]; [close_ setFrame:CGRectMake( (bounds.size.width - closewidth) / 2, - bounds.size.height - prgsize.height - 94, + bounds.size.height - prgsize.height - 50, closewidth, 32 + prgsize.height )]; @@ -4950,6 +4956,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } [self setAccessoryType:editing ? UITableViewCellAccessoryNone : UITableViewCellAccessoryDisclosureIndicator]; + [self setSelectionStyle:editing ? UITableViewCellSelectionStyleNone : UITableViewCellSelectionStyleBlue]; + [content_ setNeedsDisplay]; } @@ -6298,6 +6306,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [request setValue:ChipID_ forHTTPHeaderField:@"X-Chip-ID"]; if (UniqueID_ != nil) [request setValue:UniqueID_ forHTTPHeaderField:@"X-Unique-ID"]; + if (PLMN_ != nil) + [request setValue:PLMN_ forHTTPHeaderField:@"X-Carrier-ID"]; } - (void) aboutButtonClicked { @@ -6759,6 +6769,9 @@ freeing the view controllers on tab change */ } - (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + if (editing_) + return; + Section *section = [self sectionAtIndexPath:indexPath]; NSString *name = [section name]; NSString *title; @@ -7016,7 +7029,7 @@ freeing the view controllers on tab change */ - (void) refreshButtonClicked { [delegate_ beginUpdate]; - [[self navigationItem] setLeftBarButtonItem:nil]; + [[self navigationItem] setLeftBarButtonItem:nil animated:YES]; } - (void) upgradeButtonClicked { @@ -7068,7 +7081,7 @@ freeing the view controllers on tab change */ UIProgressHUD *hud([delegate_ addProgressHUD]); // XXX: localize [hud setText:@"Loading Changes"]; - NSLog(@"HUD:%@::%@", delegate_, hud); + //NSLog(@"HUD:%@::%@", delegate_, hud); [self yieldToSelector:@selector(_reloadPackages:) withObject:packages]; [delegate_ removeProgressHUD:hud]; @@ -7373,7 +7386,6 @@ freeing the view controllers on tab change */ @end /* }}} */ - /* Signature Controller {{{ */ @interface SignatureController : CYBrowserController { _transient Database *database_; @@ -7410,6 +7422,7 @@ freeing the view controllers on tab change */ @end /* }}} */ + /* Role Controller {{{ */ @interface RoleController : CYViewController < UITableViewDataSource, @@ -7578,6 +7591,68 @@ freeing the view controllers on tab change */ else return nil; } +@end +/* }}} */ +/* Stash Controller {{{ */ +@interface CYStashController : CYViewController { + UIActivityIndicatorView *spinner_; + UILabel *status_; + UILabel *caption_; +} +@end + +@implementation CYStashController +- (id) init { + if ((self = [super init])) { + [[self view] setBackgroundColor:[UIColor viewFlipsideBackgroundColor]]; + + spinner_ = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; + CGRect spinrect = [spinner_ frame]; + spinrect.origin.x = ([[self view] frame].size.width / 2) - (spinrect.size.width / 2); + spinrect.origin.y = [[self view] frame].size.height - 80.0f; + [spinner_ setFrame:spinrect]; + [spinner_ setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin]; + [[self view] addSubview:spinner_]; + [spinner_ release]; + [spinner_ startAnimating]; + + CGRect captrect; + captrect.size.width = [[self view] frame].size.width; + captrect.size.height = 40.0f; + captrect.origin.x = 0; + captrect.origin.y = ([[self view] frame].size.height / 2) - (captrect.size.height * 2); + caption_ = [[UILabel alloc] initWithFrame:captrect]; + [caption_ setText:@"Initializing Filesystem"]; + [caption_ setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin]; + [caption_ setFont:[UIFont boldSystemFontOfSize:28.0f]]; + [caption_ setTextColor:[UIColor whiteColor]]; + [caption_ setBackgroundColor:[UIColor clearColor]]; + [caption_ setShadowColor:[UIColor blackColor]]; + [caption_ setTextAlignment:UITextAlignmentCenter]; + [[self view] addSubview:caption_]; + [caption_ release]; + + CGRect statusrect; + statusrect.size.width = [[self view] frame].size.width; + statusrect.size.height = 30.0f; + statusrect.origin.x = 0; + statusrect.origin.y = ([[self view] frame].size.height / 2) - statusrect.size.height; + status_ = [[UILabel alloc] initWithFrame:statusrect]; + [status_ setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin]; + [status_ setText:@"(Cydia will exit when complete.)"]; + [status_ setFont:[UIFont systemFontOfSize:16.0f]]; + [status_ setTextColor:[UIColor whiteColor]]; + [status_ setBackgroundColor:[UIColor clearColor]]; + [status_ setShadowColor:[UIColor blackColor]]; + [status_ setTextAlignment:UITextAlignmentCenter]; + [[self view] addSubview:status_]; + [status_ release]; + } return self; +} + +- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation { + return IsWildcat_ || orientation == UIInterfaceOrientationPortrait; +} @end /* }}} */ @@ -7669,6 +7744,7 @@ freeing the view controllers on tab change */ } - (void) completeUpdate { + if (!updating_) return; updating_ = false; [self raiseBar:YES]; @@ -7677,8 +7753,10 @@ freeing the view controllers on tab change */ } - (void) cancelUpdate { - [refreshbar_ cancel]; - [self completeUpdate]; + updating_ = false; + [self raiseBar:YES]; + [refreshbar_ stop]; + [updatedelegate_ performSelector:@selector(updateData) withObject:nil afterDelay:0]; } - (void) cancelPressed { @@ -7854,7 +7932,6 @@ typedef enum { > { UIWindow *window_; CYContainer *container_; - id tabbar_; NSMutableArray *essential_; @@ -7875,6 +7952,8 @@ typedef enum { InstalledController *installed_; id queueDelegate_; + CYStashController *stash_; + bool loaded_; } @@ -7978,6 +8057,30 @@ static _finline void _setHomePage(Cydia *self) { - (void) _refreshIfPossible { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + bool recently = false; + NSDate *update([Metadata_ objectForKey:@"LastUpdate"]); + if (update != nil) { + NSTimeInterval interval([update timeIntervalSinceNow]); + if (interval <= 0 && interval > -(15*60)) + recently = true; + } + + // Don't automatic refresh if: + // - We already refreshed recently. + // - We already auto-refreshed this launch. + // - Auto-refresh is disabled. + if (recently || loaded_ || ManualRefresh) { + [self performSelectorOnMainThread:@selector(_loaded) withObject:nil waitUntilDone:NO]; + + // If we are cancelling due to ManualRefresh or a recent refresh + // we need to make sure it knows it's already loaded. + loaded_ = true; + return; + } else { + // We are going to load, so remember that. + loaded_ = true; + } + SCNetworkReachabilityFlags flags; { SCNetworkReachabilityRef reachability(SCNetworkReachabilityCreateWithName(NULL, "cydia.saurik.com")); SCNetworkReachabilityGetFlags(reachability, &flags); @@ -7996,21 +8099,9 @@ static _finline void _setHomePage(Cydia *self) { ) ); - if (loaded_ || ManualRefresh || !reachable) loaded: - [self performSelectorOnMainThread:@selector(_loaded) withObject:nil waitUntilDone:NO]; - else { - loaded_ = true; - - NSDate *update([Metadata_ objectForKey:@"LastUpdate"]); - - if (update != nil) { - NSTimeInterval interval([update timeIntervalSinceNow]); - if (interval <= 0 && interval > -(15*60)) - goto loaded; - } - + // If we can reach the server, auto-refresh! + if (reachable) [container_ performSelectorOnMainThread:@selector(setUpdate:) withObject:update waitUntilDone:NO]; - } [pool release]; } @@ -8020,13 +8111,13 @@ static _finline void _setHomePage(Cydia *self) { } - (void) _reloadData { - UIProgressHUD *hud([self addProgressHUD]); - [hud setText:(loaded_ ? UCLocalize("RELOADING_DATA") : UCLocalize("LOADING_DATA"))]; + UIProgressHUD *hud(loaded_ ? [self addProgressHUD] : nil); + [hud setText:UCLocalize("RELOADING_DATA")]; [database_ yieldToSelector:@selector(reloadData) withObject:nil]; _trace(); - [self removeProgressHUD:hud]; + if (hud) [self removeProgressHUD:hud]; size_t changes(0); @@ -8044,18 +8135,19 @@ static _finline void _setHomePage(Cydia *self) { } } + UITabBarItem *changesItem = [[[tabbar_ viewControllers] objectAtIndex:[self indexOfTabWithTag:kChangesTag]] tabBarItem]; if (changes != 0) { NSString *badge([[NSNumber numberWithInt:changes] stringValue]); - [[[[tabbar_ viewControllers] objectAtIndex:[self indexOfTabWithTag:kChangesTag]] tabBarItem] setBadgeValue:badge]; - [[[[tabbar_ viewControllers] objectAtIndex:[self indexOfTabWithTag:kChangesTag]] tabBarItem] setAnimatedBadge:YES]; + [changesItem setBadgeValue:badge]; + [changesItem setAnimatedBadge:([essential_ count] > 0)]; if ([self respondsToSelector:@selector(setApplicationBadge:)]) [self setApplicationBadge:badge]; else [self setApplicationBadgeString:badge]; } else { - [[[[tabbar_ viewControllers] objectAtIndex:[self indexOfTabWithTag:kChangesTag]] tabBarItem] setBadgeValue:nil]; - [[[[tabbar_ viewControllers] objectAtIndex:[self indexOfTabWithTag:kChangesTag]] tabBarItem] setAnimatedBadge:NO]; + [changesItem setBadgeValue:nil]; + [changesItem setAnimatedBadge:NO]; if ([self respondsToSelector:@selector(removeApplicationBadge)]) [self removeApplicationBadge]; @@ -8413,9 +8505,16 @@ static _finline void _setHomePage(Cydia *self) { } - (void) applicationSuspend:(__GSEvent *)event { - // FIXME: This needs to be fixed, but we no longer have a progress_. - // What's the best solution? - if (hud_ == nil)// && ![progress_ isRunning]) + // Use external process status API internally. + // This is probably a really bad idea. + uint64_t status = 0; + int notify_token; + if (notify_register_check("com.saurik.Cydia.status", ¬ify_token) == NOTIFY_STATUS_OK) { + notify_get_state(notify_token, &status); + notify_cancel(notify_token); + } + + if (hud_ == nil && status == 0) [super applicationSuspend:event]; } @@ -8435,7 +8534,11 @@ static _finline void _setHomePage(Cydia *self) { [window_ setUserInteractionEnabled:NO]; [hud show:YES]; - [[container_ view] addSubview:hud]; + + UIViewController *target = container_; + while ([target modalViewController] != nil) target = [target modalViewController]; + [[target view] addSubview:hud]; + return hud; } @@ -8524,6 +8627,66 @@ static _finline void _setHomePage(Cydia *self) { [super applicationWillResignActive:application]; } +- (void) addStashController { + stash_ = [[CYStashController alloc] init]; + [window_ addSubview:[stash_ view]]; +} + +- (void) removeStashController { + [[stash_ view] removeFromSuperview]; + [stash_ release]; +} + +- (void) stash { + [self setIdleTimerDisabled:YES]; + + [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque]; + [self setStatusBarShowsProgress:YES]; + UpdateExternalStatus(1); + + [self yieldToSelector:@selector(system:) withObject:@"/usr/libexec/cydia/free.sh"]; + + UpdateExternalStatus(0); + [self setStatusBarShowsProgress:NO]; + + [self removeStashController]; + + if (ExecFork() == 0) { + execlp("launchctl", "launchctl", "stop", "com.apple.SpringBoard", NULL); + perror("launchctl stop"); + } +} + +- (void) setupTabBarController { + tabbar_ = [[CYTabBarController alloc] initWithDatabase:database_]; + [tabbar_ setDelegate:self]; + + NSMutableArray *items([NSMutableArray arrayWithObjects: + [[[UITabBarItem alloc] initWithTitle:@"Cydia" image:[UIImage applicationImageNamed:@"home.png"] tag:kCydiaTag] autorelease], + [[[UITabBarItem alloc] initWithTitle:UCLocalize("SECTIONS") image:[UIImage applicationImageNamed:@"install.png"] tag:kSectionsTag] autorelease], + [[[UITabBarItem alloc] initWithTitle:UCLocalize("CHANGES") image:[UIImage applicationImageNamed:@"changes.png"] tag:kChangesTag] autorelease], + [[[UITabBarItem alloc] initWithTitle:UCLocalize("SEARCH") image:[UIImage applicationImageNamed:@"search.png"] tag:kSearchTag] autorelease], + nil]); + + if (IsWildcat_) { + [items insertObject:[[[UITabBarItem alloc] initWithTitle:UCLocalize("SOURCES") image:[UIImage applicationImageNamed:@"source.png"] tag:kSourcesTag] autorelease] atIndex:3]; + [items insertObject:[[[UITabBarItem alloc] initWithTitle:UCLocalize("INSTALLED") image:[UIImage applicationImageNamed:@"manage.png"] tag:kInstalledTag] autorelease] atIndex:3]; + } else { + [items insertObject:[[[UITabBarItem alloc] initWithTitle:UCLocalize("MANAGE") image:[UIImage applicationImageNamed:@"manage.png"] tag:kManageTag] autorelease] atIndex:3]; + } + + NSMutableArray *controllers([NSMutableArray array]); + + for (UITabBarItem *item in items) { + CYNavigationController *controller([[[CYNavigationController alloc] initWithDatabase:database_] autorelease]); + [controller setTabBarItem:item]; + [controllers addObject:controller]; + } + + [tabbar_ setViewControllers:controllers]; + [tabbar_ setSelectedIndex:0]; +} + - (void) applicationDidFinishLaunching:(id)unused { [CYBrowserController _initialize]; @@ -8547,8 +8710,6 @@ static _finline void _setHomePage(Cydia *self) { [window_ makeKey:self]; [window_ setHidden:NO]; - database_ = [Database sharedInstance]; - if ( readlink("/Applications", NULL, 0) == -1 && errno == EINVAL || readlink("/Library/Ringtones", NULL, 0) == -1 && errno == EINVAL || @@ -8561,60 +8722,23 @@ static _finline void _setHomePage(Cydia *self) { //readlink("/var/lib", NULL, 0) == -1 && errno == EINVAL || false ) { - [self setIdleTimerDisabled:YES]; - - hud_ = [self addProgressHUD]; - [hud_ setText:@"Reorganizing:\n\nWill Automatically\nClose When Done"]; - [self setStatusBarShowsProgress:YES]; - - [self yieldToSelector:@selector(system:) withObject:@"/usr/libexec/cydia/free.sh"]; - - [self setStatusBarShowsProgress:NO]; - [self removeProgressHUD:hud_]; - hud_ = nil; - - if (ExecFork() == 0) { - execlp("launchctl", "launchctl", "stop", "com.apple.SpringBoard", NULL); - perror("launchctl stop"); - } - + [self addStashController]; + [self performSelector:@selector(stash) withObject:nil afterDelay:0]; return; } - _trace(); - - NSMutableArray *items([NSMutableArray arrayWithObjects: - [[[UITabBarItem alloc] initWithTitle:@"Cydia" image:[UIImage applicationImageNamed:@"home.png"] tag:kCydiaTag] autorelease], - [[[UITabBarItem alloc] initWithTitle:UCLocalize("SECTIONS") image:[UIImage applicationImageNamed:@"install.png"] tag:kSectionsTag] autorelease], - [[[UITabBarItem alloc] initWithTitle:UCLocalize("CHANGES") image:[UIImage applicationImageNamed:@"changes.png"] tag:kChangesTag] autorelease], - [[[UITabBarItem alloc] initWithTitle:UCLocalize("SEARCH") image:[UIImage applicationImageNamed:@"search.png"] tag:kSearchTag] autorelease], - nil]); - - if (IsWildcat_) { - [items insertObject:[[[UITabBarItem alloc] initWithTitle:UCLocalize("SOURCES") image:[UIImage applicationImageNamed:@"source.png"] tag:kSourcesTag] autorelease] atIndex:3]; - [items insertObject:[[[UITabBarItem alloc] initWithTitle:UCLocalize("INSTALLED") image:[UIImage applicationImageNamed:@"manage.png"] tag:kInstalledTag] autorelease] atIndex:3]; - } else { - [items insertObject:[[[UITabBarItem alloc] initWithTitle:UCLocalize("MANAGE") image:[UIImage applicationImageNamed:@"manage.png"] tag:kManageTag] autorelease] atIndex:3]; - } - - NSMutableArray *controllers([NSMutableArray array]); - - for (UITabBarItem *item in items) { - CYNavigationController *controller([[[CYNavigationController alloc] initWithDatabase:database_] autorelease]); - [controller setTabBarItem:item]; - [controllers addObject:controller]; - } + database_ = [Database sharedInstance]; - tabbar_ = [[CYTabBarController alloc] initWithDatabase:database_]; - [tabbar_ setViewControllers:controllers]; - [tabbar_ setDelegate:self]; - [tabbar_ setSelectedIndex:0]; + [self setupTabBarController]; container_ = [[CYContainer alloc] initWithDatabase:database_]; [container_ setUpdateDelegate:self]; [container_ setTabBarController:tabbar_]; [window_ addSubview:[container_ view]]; + // Show pinstripes while loading data. + [[container_ view] setBackgroundColor:[UIColor performSelector:@selector(pinStripeColor)]]; + [self performSelector:@selector(loadData) withObject:nil afterDelay:0]; } @@ -8626,11 +8750,60 @@ static _finline void _setHomePage(Cydia *self) { [UIKeyboard initImplementationNow]; - [self reloadData]; + [window_ setUserInteractionEnabled:NO]; + + UIView *container = [[UIView alloc] init]; + [container setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin]; + + UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; + [spinner startAnimating]; + [container addSubview:spinner]; + [spinner release]; + + UILabel *label = [[UILabel alloc] init]; + [label setFont:[UIFont boldSystemFontOfSize:15.0f]]; + [label setBackgroundColor:[UIColor clearColor]]; + [label setTextColor:[UIColor blackColor]]; + [label setShadowColor:[UIColor whiteColor]]; + [label setShadowOffset:CGSizeMake(0, 1)]; + [label setText:UCLocalize("LOADING_DATA")]; + [container addSubview:label]; + [label release]; + + CGSize viewsize = [[tabbar_ view] frame].size; + CGSize spinnersize = [spinner bounds].size; + CGSize textsize = [[label text] sizeWithFont:[label font]]; + float bothwidth = spinnersize.width + textsize.width + 5.0f; + + CGRect containrect = { + CGPointMake(floorf((viewsize.width / 2) - (bothwidth / 2)), floorf((viewsize.height / 2) - (spinnersize.height / 2))), + CGSizeMake(bothwidth, spinnersize.height) + }; + CGRect textrect = { + CGPointMake(spinnersize.width + 5.0f, floorf((spinnersize.height / 2) - (textsize.height / 2))), + textsize + }; + CGRect spinrect = { + CGPointZero, + spinnersize + }; + + [container setFrame:containrect]; + [spinner setFrame:spinrect]; + [label setFrame:textrect]; + [[container_ view] addSubview:container]; + [container release]; + [self reloadData]; PrintTimes(); + // Show the home page _setHomePage(self); + [window_ setUserInteractionEnabled:YES]; + + // XXX: does this actually slow anything down? + [[container_ view] setBackgroundColor:[UIColor clearColor]]; + [container removeFromSuperview]; } - (void) showActionSheet:(UIActionSheet *)sheet fromItem:(UIBarButtonItem *)item { @@ -8826,6 +8999,22 @@ int main(int argc, char *argv[]) { _pooled UniqueID_ = [[UIDevice currentDevice] uniqueIdentifier]; + CFStringRef (*$CTSIMSupportCopyMobileSubscriberCountryCode)(CFAllocatorRef); + $CTSIMSupportCopyMobileSubscriberCountryCode = reinterpret_cast(dlsym(RTLD_DEFAULT, "CTSIMSupportCopyMobileSubscriberCountryCode")); + CFStringRef mcc($CTSIMSupportCopyMobileSubscriberCountryCode == NULL ? NULL : (*$CTSIMSupportCopyMobileSubscriberCountryCode)(kCFAllocatorDefault)); + + CFStringRef (*$CTSIMSupportCopyMobileSubscriberNetworkCode)(CFAllocatorRef); + $CTSIMSupportCopyMobileSubscriberNetworkCode = reinterpret_cast(dlsym(RTLD_DEFAULT, "CTSIMSupportCopyMobileSubscriberCountryCode")); + CFStringRef mnc($CTSIMSupportCopyMobileSubscriberNetworkCode == NULL ? NULL : (*$CTSIMSupportCopyMobileSubscriberNetworkCode)(kCFAllocatorDefault)); + + if (mcc != NULL && mnc != NULL) + PLMN_ = [NSString stringWithFormat:@"%@%@", mcc, mnc]; + + if (mnc != NULL) + CFRelease(mnc); + if (mcc != NULL) + CFRelease(mcc); + if (NSDictionary *system = [NSDictionary dictionaryWithContentsOfFile:@"/System/Library/CoreServices/SystemVersion.plist"]) Build_ = [system objectForKey:@"ProductBuildVersion"]; if (NSDictionary *info = [NSDictionary dictionaryWithContentsOfFile:@"/Applications/MobileSafari.app/Info.plist"]) { @@ -8912,7 +9101,10 @@ int main(int argc, char *argv[]) { _pooled if (lang != NULL) _config->Set("APT::Acquire::Translation", lang); - _config->Set("Acquire::http::Timeout", 15); + + // XXX: this timeout might be important :( + //_config->Set("Acquire::http::Timeout", 15); + _config->Set("Acquire::http::MaxParallel", 3); /* }}} */ /* Color Choices {{{ */