X-Git-Url: https://git.saurik.com/cydia.git/blobdiff_plain/5ec44e34139dc2c93a0b417c87f5f7233f48b657..5225a136086af71bee413d2190db0f9fe7136f15:/Cydia.mm?ds=inline diff --git a/Cydia.mm b/Cydia.mm index 952f0188..f4b4a8ed 100644 --- a/Cydia.mm +++ b/Cydia.mm @@ -1,5 +1,5 @@ /* Cydia - iPhone UIKit Front-End for Debian APT - * Copyright (C) 2008-2009 Jay Freeman (saurik) + * Copyright (C) 2008-2010 Jay Freeman (saurik) */ /* Modified BSD License {{{ */ @@ -194,6 +194,8 @@ void PrintTimes() { #define _pooled _H _pool([[NSAutoreleasePool alloc] init], true); +static const NSUInteger UIViewAutoresizingFlexibleBoth(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); + void NSLogPoint(const char *fix, const CGPoint &point) { NSLog(@"%s(%g,%g)", fix, point.x, point.y); } @@ -361,10 +363,14 @@ static const CFStringCompareFlags LaxCompareFlags_ = kCFCompareCaseInsensitive | - (void) popSubview:(UIView *)view { UITransitionView *transition([[[PopTransitionView alloc] initWithFrame:[self bounds]] autorelease]); - [transition setDelegate:transition]; + [transition setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; [self addSubview:transition]; - UIView *blank = [[[UIView alloc] initWithFrame:[transition bounds]] autorelease]; + [transition setDelegate:transition]; + + UIView *blank([[[UIView alloc] initWithFrame:[transition bounds]] autorelease]); + [blank setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; + [transition transition:UITransitionNone toView:blank]; [transition transition:UITransitionPushFromBottom toView:view]; } @@ -374,7 +380,7 @@ static const CFStringCompareFlags LaxCompareFlags_ = kCFCompareCaseInsensitive | #define lprintf(args...) fprintf(stderr, args) -#define ForRelease 0 +#define ForRelease 1 #define TraceLogging (1 && !ForRelease) #define HistogramInsertionSort (0 && !ForRelease) #define ProfileTimes (0 && !ForRelease) @@ -619,6 +625,19 @@ void CFArrayInsertionSortValues(CFMutableArrayRef array, CFRange range, CFCompar @end /* }}} */ +NSUInteger WebScriptObject$countByEnumeratingWithState$objects$count$(WebScriptObject *self, SEL sel, NSFastEnumerationState *state, id *objects, NSUInteger count) { + size_t length([self count] - state->state); + if (length <= 0) + return 0; + else if (length > count) + length = count; + for (size_t i(0); i != length; ++i) + objects[i] = [self objectAtIndex:state->state++]; + state->itemsPtr = objects; + state->mutationsPtr = (unsigned long *) self; + return length; +} + NSUInteger DOMNodeList$countByEnumeratingWithState$objects$count$(DOMNodeList *self, SEL sel, NSFastEnumerationState *state, id *objects, NSUInteger count) { size_t length([self length] - state->state); if (length <= 0) @@ -694,11 +713,8 @@ NSUInteger DOMNodeList$countByEnumeratingWithState$objects$count$(DOMNodeList *s - (NSString *) stringByCachingURLWithCurrentCDN { return [self - stringByReplacingOccurrencesOfString:@"://" - withString:@"://ne.edgecastcdn.net/8003A4/" - options:0 - /* XXX: this is somewhat inaccurate */ - range:NSMakeRange(0, 10) + stringByReplacingOccurrencesOfString:@"://cydia.saurik.com/" + withString:@"://cache.cydia.saurik.com/" ]; } @@ -1197,6 +1213,7 @@ bool isSectionVisible(NSString *section) { - (void) setPackageView:(PackageView *)view; - (void) clearPackage:(Package *)package; - (void) installPackage:(Package *)package; +- (void) installPackages:(NSArray *)packages; - (void) removePackage:(Package *)package; - (void) slideUp:(UIActionSheet *)alert; - (void) distUpgrade; @@ -2097,7 +2114,7 @@ struct PackageNameOrdering : } - (void) setVisible { - visible_ = required_ && [self hasSupportingRole] && [self unfiltered]; + visible_ = required_ && [self unfiltered]; } - (Package *) initWithVersion:(pkgCache::VerIterator)version withZone:(NSZone *)zone inPool:(apr_pool_t *)pool database:(Database *)database { @@ -2398,7 +2415,7 @@ struct PackageNameOrdering : - (BOOL) unfiltered { NSString *section([self section]); - return !obsolete_ && (section == nil || isSectionVisible(section)); + return !obsolete_ && [self hasSupportingRole] && (section == nil || isSectionVisible(section)); } - (BOOL) visible { @@ -2781,6 +2798,9 @@ struct PackageNameOrdering : } - (bool) isUnfilteredAndSelectedForBy:(NSString *)search { + if ([search length] == 0) + return false; + _profile(Package$isUnfilteredAndSelectedForBy) bool value(true); @@ -3602,6 +3622,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { /* Web Scripting {{{ */ @interface CydiaObject : NSObject { id indirect_; + id delegate_; } - (id) initWithDelegate:(IndirectDelegate *)indirect; @@ -3620,6 +3641,10 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } return self; } +- (void) setDelegate:(id)delegate { + delegate_ = delegate; +} + + (NSArray *) _attributeKeys { return [NSArray arrayWithObjects:@"device", @"firewire", @"imei", @"mac", @"serial", nil]; } @@ -3665,6 +3690,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { return @"getInstalledPackages"; else if (selector == @selector(getPackageById:)) return @"getPackageById"; + else if (selector == @selector(installPackages:)) + return @"installPackages"; else if (selector == @selector(setAutoPopup:)) return @"setAutoPopup"; else if (selector == @selector(setButtonImage:withStyle:toFunction:)) @@ -3677,6 +3704,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { return @"setPopupHook"; else if (selector == @selector(setSpecial:)) return @"setSpecial"; + else if (selector == @selector(setToken:)) + return @"setToken"; else if (selector == @selector(setViewportWidth:)) return @"setViewportWidth"; else if (selector == @selector(supports:)) @@ -3704,7 +3733,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { - (NSArray *) getInstalledPackages { NSArray *packages([[Database sharedInstance] packages]); NSMutableArray *installed([NSMutableArray arrayWithCapacity:[packages count]]); - for (Package *package in installed) + for (Package *package in packages) if ([package installed] != nil) [installed addObject:package]; return installed; @@ -3777,6 +3806,10 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [indirect_ close]; } +- (void) installPackages:(NSArray *)packages { + [delegate_ performSelectorOnMainThread:@selector(installPackages:) withObject:packages waitUntilDone:NO]; +} + - (void) setAutoPopup:(BOOL)popup { [indirect_ setAutoPopup:popup]; } @@ -3793,6 +3826,15 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [indirect_ setSpecial:function]; } +- (void) setToken:(NSString *)token { + if (Token_ != nil) + [Token_ release]; + Token_ = [token retain]; + + [Metadata_ setObject:Token_ forKey:@"Token"]; + Changed_ = true; +} + - (void) setFinishHook:(id)function { [indirect_ setFinishHook:function]; } @@ -3859,7 +3901,12 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { NSString *host([url host]); [self setHeaders:headers forHost:host]; - [window setValue:cydia_ forKey:@"cydia"]; + if ( + [host isEqualToString:@"cydia.saurik.com"] || + [host hasSuffix:@".cydia.saurik.com"] || + [scheme isEqualToString:@"file"] + ) + [window setValue:cydia_ forKey:@"cydia"]; } - (void) _setMoreHeaders:(NSMutableURLRequest *)request { @@ -3879,6 +3926,11 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { return copy; } +- (void) setDelegate:(id)delegate { + [super setDelegate:delegate]; + [cydia_ setDelegate:delegate]; +} + - (id) initWithBook:(RVBook *)book forWidth:(float)width { if ((self = [super initWithBook:book forWidth:width ofClass:[CydiaBrowserView class]]) != nil) { cydia_ = [[CydiaObject alloc] initWithDelegate:indirect_]; @@ -4028,6 +4080,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { context:@"remove" ]; + [essential_ setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; + [essential_ setDestructiveButtonIndex:1]; [essential_ setBodyText:UCLocalize("REMOVING_ESSENTIALS_EX")]; } else { @@ -4039,6 +4093,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { context:@"unable" ]; + [essential_ setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; + [essential_ setBodyText:UCLocalize("UNABLE_TO_COMPLY_EX")]; } @@ -4061,6 +4117,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { nil]; [self loadURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"confirm" ofType:@"html"]]]; + + [self setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; } return self; } @@ -4209,9 +4267,11 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { delegate_ = delegate; transition_ = [[UITransitionView alloc] initWithFrame:[self bounds]]; + [transition_ setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; [transition_ setDelegate:self]; overlay_ = [[UIView alloc] initWithFrame:[transition_ bounds]]; + [overlay_ setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; background_ = [[UIView alloc] initWithFrame:[self bounds]]; [background_ setBackgroundColor:[UIColor blackColor]]; @@ -4223,6 +4283,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { CGRect navrect = {{0, 0}, navsize}; navbar_ = [[UINavigationBar alloc] initWithFrame:navrect]; + [navbar_ setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; [overlay_ addSubview:navbar_]; [navbar_ setBarStyle:1]; @@ -4240,6 +4301,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { }, prgsize}; progress_ = [[UIProgressBar alloc] initWithFrame:prgrect]; + [progress_ setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin)]; [progress_ setStyle:0]; status_ = [[UITextLabel alloc] initWithFrame:CGRectMake( @@ -4249,6 +4311,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { 24 )]; + [status_ setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin)]; + [status_ setColor:[UIColor whiteColor]]; [status_ setBackgroundColor:[UIColor clearColor]]; @@ -4262,6 +4326,9 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { bounds.size.height - navsize.height - 62 - navrect.size.height )]; + [output_ setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; + [overlay_ addSubview:output_]; + //[output_ setTextFont:@"Courier New"]; [output_ setFont:[[output_ font] fontWithSize:12]]; @@ -4272,8 +4339,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [output_ setAllowsRubberBanding:YES]; [output_ setEditable:NO]; - [overlay_ addSubview:output_]; - close_ = [[UIPushButton alloc] initWithFrame:CGRectMake( 10, bounds.size.height - prgsize.height - 50, @@ -4281,6 +4346,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { 32 + prgsize.height )]; + [close_ setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin)]; + [close_ setAutosizesToFit:NO]; [close_ setDrawsShadow:YES]; [close_ setStretchBackground:YES]; @@ -4554,6 +4621,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { context:@"conffile" ] autorelease]; + [sheet setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; + [sheet setBodyText:[NSString stringWithFormat:@"%@\n\n%@", UCLocalize("CONFIGURATION_UPGRADE_EX"), ofile]]; [sheet popupAlertAnimated:YES]; } @@ -4688,13 +4757,17 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { if ((self = [super initWithFrame:frame reuseIdentifier:@"Package"]) != nil) { UIView *content([self contentView]); CGRect bounds([content bounds]); + content_ = [[ContentView alloc] initWithFrame:bounds]; + [content_ setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; + [content addSubview:content_]; + [content_ setDelegate:self]; - [content_ setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; [content_ setOpaque:YES]; - [content addSubview:content_]; if ([self respondsToSelector:@selector(selectionPercent)]) faded_ = YES; + + [self setNeedsDisplayOnBoundsChange:YES]; } return self; } @@ -4718,7 +4791,14 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { icon_ = [[package icon] retain]; name_ = [[package name] retain]; - description_ = [IsWildcat_ ? [package shortDescription] : [package longDescription] retain]; + + if (IsWildcat_) + description_ = [package longDescription]; + if (description_ == nil) + description_ = [package shortDescription]; + if (description_ != nil) + description_ = [description_ retain]; + commercial_ = [package isCommercial]; package_ = [package retain]; @@ -4759,7 +4839,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { - (void) drawContentRect:(CGRect)rect { bool selected([self isSelected]); - float width(rect.size.width); + float width([self bounds].size.width); #if 0 CGContextRef context(UIGraphicsGetCurrentContext()); @@ -4914,6 +4994,12 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } } +- (void) setFrame:(CGRect)frame { + [super setFrame:frame]; + CGRect rect([switch_ frame]); + [switch_ setFrame:CGRectMake(frame.size.width - 102, 9, rect.size.width, rect.size.height)]; +} + - (void) drawContentInRect:(CGRect)rect selected:(BOOL)selected { [icon_ drawInRect:CGRectMake(8, 7, 32, 32)]; @@ -4925,7 +5011,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { float width(rect.size.width + 23); if (editing_) - width -= 86; + width -= 110; [name_ drawAtPoint:CGPointMake(48, 9) forWidth:(width - 70) withFont:Font22Bold_ ellipsis:2]; @@ -5374,13 +5460,13 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { sections_ = [[NSMutableArray arrayWithCapacity:16] retain]; list_ = [[UITableView alloc] initWithFrame:[self bounds] style:UITableViewStylePlain]; + [list_ setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; + [self addSubview:list_]; + [list_ setDataSource:self]; [list_ setDelegate:self]; - [self addSubview:list_]; - - [self setAutoresizingMask:UIViewAutoresizingFlexibleHeight]; - [list_ setAutoresizingMask:UIViewAutoresizingFlexibleHeight]; + [self setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; } return self; } @@ -5808,8 +5894,9 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { context:@"warning" ] autorelease]; - [sheet setNumberOfRows:1]; + [sheet setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; + [sheet setNumberOfRows:1]; [sheet setBodyText:warning]; [sheet popupAlertAnimated:YES]; } else @@ -5823,6 +5910,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { context:@"urlerror" ] autorelease]; + [sheet setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; + [sheet setBodyText:[error_ localizedDescription]]; [sheet popupAlertAnimated:YES]; } else { @@ -5834,6 +5923,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { context:@"trivial" ] autorelease]; + [sheet setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; + [sheet setBodyText:UCLocalize("NOT_REPOSITORY_EX")]; [sheet popupAlertAnimated:YES]; } @@ -5878,15 +5969,15 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:href] cachePolicy:NSURLRequestUseProtocolCachePolicy - timeoutInterval:20.0 + timeoutInterval:120.0 ]; [request setHTTPMethod:method]; if (Machine_ != NULL) [request setValue:[NSString stringWithUTF8String:Machine_] forHTTPHeaderField:@"X-Machine"]; - if (Token_ != nil) - [request setValue:Token_ forHTTPHeaderField:@"X-Cydia-Token"]; + if (UniqueID_ != nil) + [request setValue:UniqueID_ forHTTPHeaderField:@"X-Unique-ID"]; if (Role_ != nil) [request setValue:Role_ forHTTPHeaderField:@"X-Role"]; @@ -5957,9 +6048,10 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { //list_ = [[UITable alloc] initWithFrame:[self bounds]]; list_ = [[UISectionList alloc] initWithFrame:[self bounds] showSectionIndex:NO]; - [list_ setShouldHideHeaderInShortLists:NO]; - + [list_ setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; [self addSubview:list_]; + + [list_ setShouldHideHeaderInShortLists:NO]; [list_ setDataSource:self]; UITableColumn *column = [[UITableColumn alloc] @@ -5975,8 +6067,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [self reloadData]; - [self setAutoresizingMask:UIViewAutoresizingFlexibleHeight]; - [list_ setAutoresizingMask:UIViewAutoresizingFlexibleHeight]; + [self setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; } return self; } @@ -6019,8 +6110,9 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { context:@"source" ] autorelease]; - [sheet setNumberOfRows:1]; + [sheet setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; + [sheet setNumberOfRows:1]; [sheet addTextFieldWithValue:@"http://" label:@""]; UITextInputTraits *traits = [[sheet textField] textInputTraits]; @@ -6089,10 +6181,10 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { with:[NSNumber numberWithBool:YES] ]; + [packages_ setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; [self addSubview:packages_]; - [self setAutoresizingMask:UIViewAutoresizingFlexibleHeight]; - [packages_ setAutoresizingMask:UIViewAutoresizingFlexibleHeight]; + [self setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; } return self; } @@ -6143,14 +6235,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { @implementation HomeView -- (void) setHeaders:(NSDictionary *)headers forHost:(NSString *)host { - if (NSString *token = [headers objectForKey:@"X-Cydia-Token"]) { - if (Token_ != nil) - [Token_ release]; - Token_ = [token retain]; - } -} - - (void) alertSheet:(UIActionSheet *)sheet buttonClicked:(int)button { NSString *context([sheet context]); @@ -6169,30 +6253,19 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (void) _leftButtonClicked { - UIActionSheet *sheet = [[[UIActionSheet alloc] - initWithTitle:UCLocalize("ABOUT_CYDIA") - buttons:[NSArray arrayWithObjects:UCLocalize("CLOSE"), nil] - defaultButtonIndex:0 - delegate:self - context:@"about" - ] autorelease]; + UIAlertView *alert = [[[UIAlertView alloc] init] autorelease]; + [alert setTitle:UCLocalize("ABOUT_CYDIA")]; + [alert addButtonWithTitle:UCLocalize("CLOSE")]; + [alert setCancelButtonIndex:0]; - [sheet setBodyText: - @"Copyright (C) 2008-2009\n" + [alert setMessage: + @"Copyright (C) 2008-2010\n" "Jay Freeman (saurik)\n" "saurik@saurik.com\n" - "http://www.saurik.com/\n" - "\n" - "The Okori Group\n" - "http://www.theokorigroup.com/\n" - "\n" - "College of Creative Studies,\n" - "University of California,\n" - "Santa Barbara\n" - "http://www.ccs.ucsb.edu/" + "http://www.saurik.com/" ]; - [sheet popupAlertAnimated:YES]; + [alert show]; } - (NSString *) leftButtonTitle { @@ -6377,13 +6450,16 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { ovrrect.origin.y = -ovrrect.size.height; overlay_ = [[UINavigationBar alloc] initWithFrame:ovrrect]; + [overlay_ setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; [self addSubview:overlay_]; ovrrect.origin.y = frame.size.height; underlay_ = [[UINavigationBar alloc] initWithFrame:ovrrect]; - [underlay_ setTintColor:[UIColor colorWithRed:0.23 green:0.23 blue:0.23 alpha:1]]; + [underlay_ setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; [self addSubview:underlay_]; + [underlay_ setTintColor:[UIColor colorWithRed:0.23 green:0.23 blue:0.23 alpha:1]]; + [overlay_ setBarStyle:1]; [underlay_ setBarStyle:1]; @@ -6427,10 +6503,13 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } , prgsize}; progress_ = [[UIProgressBar alloc] initWithFrame:prgrect]; - [progress_ setStyle:0]; + [progress_ setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; [overlay_ addSubview:progress_]; + [progress_ setStyle:0]; + cancel_ = [[UINavigationButton alloc] initWithTitle:UCLocalize("CANCEL") style:UINavigationButtonStyleHighlighted]; + [progress_ setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin]; [cancel_ addTarget:self action:@selector(_onCancel) forControlEvents:UIControlEventTouchUpInside]; CGRect frame = [cancel_ frame]; @@ -6474,6 +6553,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { context:@"refresh" ] autorelease]; + [sheet setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; + [sheet setBodyText:error]; [sheet popupAlertAnimated:YES]; @@ -6630,7 +6711,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { _transient Database *database_; NSMutableArray *sections_; NSMutableArray *filtered_; - UITransitionView *transition_; UITable *list_; UIView *accessory_; BOOL editing_; @@ -6650,7 +6730,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [sections_ release]; [filtered_ release]; - [transition_ release]; [list_ release]; [accessory_ release]; [super dealloc]; @@ -6728,11 +6807,9 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { sections_ = [[NSMutableArray arrayWithCapacity:16] retain]; filtered_ = [[NSMutableArray arrayWithCapacity:16] retain]; - transition_ = [[UITransitionView alloc] initWithFrame:[self bounds]]; - [self addSubview:transition_]; - - list_ = [[UITable alloc] initWithFrame:[transition_ bounds]]; - [transition_ transition:0 toView:list_]; + list_ = [[UITable alloc] initWithFrame:[self bounds]]; + [list_ setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; + [self addSubview:list_]; UITableColumn *column = [[[UITableColumn alloc] initWithTitle:UCLocalize("NAME") @@ -6748,8 +6825,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [self reloadData]; - [self setAutoresizingMask:UIViewAutoresizingFlexibleHeight]; - [list_ setAutoresizingMask:UIViewAutoresizingFlexibleHeight]; + [self setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; } return self; } @@ -6889,7 +6965,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { unsigned upgrades_; } -- (id) initWithBook:(RVBook *)book database:(Database *)database; +- (id) initWithBook:(RVBook *)book database:(Database *)database delegate:(id)delegate; - (void) reloadData; @end @@ -6960,7 +7036,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [delegate_ distUpgrade]; } -- (id) initWithBook:(RVBook *)book database:(Database *)database { +- (id) initWithBook:(RVBook *)book database:(Database *)database delegate:(id)delegate { if ((self = [super initWithBook:book]) != nil) { database_ = database; @@ -6968,6 +7044,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { sections_ = [[NSMutableArray arrayWithCapacity:16] retain]; list_ = [[UITableView alloc] initWithFrame:[self bounds] style:UITableViewStylePlain]; + [list_ setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; [self addSubview:list_]; //XXX:[list_ setShouldHideHeaderInShortLists:NO]; @@ -6975,19 +7052,14 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [list_ setDelegate:self]; //[list_ setSectionListStyle:1]; + delegate_ = delegate; [self reloadData]; - [self setAutoresizingMask:UIViewAutoresizingFlexibleHeight]; - [list_ setAutoresizingMask:UIViewAutoresizingFlexibleHeight]; + [self setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; } return self; } -- (void) reloadData { - NSArray *packages = [database_ packages]; - - [packages_ removeAllObjects]; - [sections_ removeAllObjects]; - +- (void) _reloadPackages:(NSArray *)packages { _trace(); for (Package *package in packages) if ( @@ -6999,6 +7071,20 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { _trace(); [packages_ radixSortUsingFunction:reinterpret_cast(&PackageChangesRadix) withContext:NULL]; _trace(); +} + +- (void) reloadData { + NSArray *packages = [database_ packages]; + + [packages_ removeAllObjects]; + [sections_ removeAllObjects]; + + UIProgressHUD *hud([delegate_ addProgressHUD]); + // XXX: localize + [hud setText:@"Loading Changes"]; + NSLog(@"HUD:%@::%@", delegate_, hud); + [self yieldToSelector:@selector(_reloadPackages:) withObject:packages]; + [delegate_ removeProgressHUD:hud]; Section *upgradable = [[[Section alloc] initWithName:UCLocalize("AVAILABLE_UPGRADES") localize:NO] autorelease]; Section *ignored = [[[Section alloc] initWithName:UCLocalize("IGNORED_UPGRADES") localize:NO] autorelease]; @@ -7096,7 +7182,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { UIView *accessory_; UISearchField *field_; FilteredPackageTable *table_; - UIView *dimmed_; bool reload_; } @@ -7113,7 +7198,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [accessory_ release]; [field_ release]; [table_ release]; - [dimmed_ release]; [super dealloc]; } @@ -7194,10 +7278,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { if ((self = [super initWithBook:book]) != nil) { CGRect pageBounds = [book_ pageBounds]; - dimmed_ = [[UIView alloc] initWithFrame:pageBounds]; - CGColor dimmed(space_, 0, 0, 0, 0.5); - [dimmed_ setBackgroundColor:[UIColor colorWithCGColor:dimmed]]; - table_ = [[FilteredPackageTable alloc] initWithBook:book database:database @@ -7206,9 +7286,11 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { with:nil ]; - [table_ setShouldHideHeaderInShortLists:NO]; + [table_ setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; [self addSubview:table_]; + [table_ setShouldHideHeaderInShortLists:NO]; + CGRect cnfrect = {{7, 38}, {17, 18}}; CGRect area; @@ -7220,6 +7302,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { area.size.height = [UISearchField defaultHeight]; field_ = [[UISearchField alloc] initWithFrame:area]; + [field_ setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; UIFont *font = [UIFont systemFontOfSize:16]; [field_ setFont:font]; @@ -7237,10 +7320,10 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { CGRect accrect = {{0, 6}, {6 + cnfrect.size.width + 6 + area.size.width + 6, area.size.height}}; accessory_ = [[UIView alloc] initWithFrame:accrect]; + [accessory_ setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; [accessory_ addSubview:field_]; - [self setAutoresizingMask:UIViewAutoresizingFlexibleHeight]; - [table_ setAutoresizingMask:UIViewAutoresizingFlexibleHeight]; + [self setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; } return self; } @@ -7511,6 +7594,19 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { @end /* }}} */ +@interface CydiaViewController : UIViewController { +} + +@end + +@implementation CydiaViewController + +- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation { + return NO; // XXX: return YES; +} + +@end + @interface Cydia : UIApplication < ConfirmationViewDelegate, ProgressViewDelegate, @@ -7518,6 +7614,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { CydiaDelegate > { UIWindow *window_; + CydiaViewController *root_; UIView *underlay_; UIView *overlay_; @@ -7577,6 +7674,8 @@ static _finline void _setHomePage(Cydia *self) { context:@"fixhalf" ] autorelease]; + [sheet setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; + [sheet setBodyText:UCLocalize("HALFINSTALLED_PACKAGE_EX")]; [sheet popupAlertAnimated:YES]; } else if (!Ignored_ && [essential_ count] != 0) { @@ -7594,6 +7693,8 @@ static _finline void _setHomePage(Cydia *self) { context:@"upgrade" ] autorelease]; + [sheet setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; + [sheet setBodyText:UCLocalize("ESSENTIAL_UPGRADE_EX")]; [sheet popupAlertAnimated:YES]; } @@ -7764,6 +7865,7 @@ static _finline void _setHomePage(Cydia *self) { return false; confirm_ = [[RVBook alloc] initWithFrame:[self popUpBounds]]; + [confirm_ setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; [confirm_ setDelegate:self]; ConfirmationView *page([[[ConfirmationView alloc] initWithBook:confirm_ database:database_] autorelease]); @@ -7789,6 +7891,15 @@ static _finline void _setHomePage(Cydia *self) { } } +- (void) installPackages:(NSArray *)packages { + @synchronized (self) { + for (Package *package in packages) + [package install]; + [self resolve]; + [self perform]; + } +} + - (void) installPackage:(Package *)package { @synchronized (self) { [package install]; @@ -7875,7 +7986,7 @@ static _finline void _setHomePage(Cydia *self) { - (ChangesView *) changesView { if (changes_ == nil) - changes_ = [[ChangesView alloc] initWithBook:book_ database:database_]; + changes_ = [[ChangesView alloc] initWithBook:book_ database:database_ delegate:self]; return changes_; } @@ -8105,6 +8216,8 @@ static _finline void _setHomePage(Cydia *self) { - (UIProgressHUD *) addProgressHUD { UIProgressHUD *hud([[[UIProgressHUD alloc] initWithWindow:window_] autorelease]); + [hud setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; + [window_ setUserInteractionEnabled:NO]; [hud show:YES]; [progress_ addSubview:hud]; @@ -8204,20 +8317,26 @@ static _finline void _setHomePage(Cydia *self) { essential_ = [[NSMutableArray alloc] initWithCapacity:4]; broken_ = [[NSMutableArray alloc] initWithCapacity:4]; - window_ = [[UIWindow alloc] initWithContentRect:[UIHardware fullScreenApplicationContentRect]]; + UIScreen *screen([UIScreen mainScreen]); + + window_ = [[UIWindow alloc] initWithFrame:[screen bounds]]; [window_ orderFront:self]; [window_ makeKey:self]; [window_ setHidden:NO]; - //[window_ setAutorotates:YES]; - //[window_ setDelegate:self]; + + root_ = [[CydiaViewController alloc] init]; + [window_ addSubview:[root_ view]]; database_ = [Database sharedInstance]; - progress_ = [[ProgressView alloc] initWithFrame:[window_ bounds] database:database_ delegate:self]; + progress_ = [[ProgressView alloc] initWithFrame:[[root_ view] bounds] database:database_ delegate:self]; + [progress_ setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; + [[root_ view] addSubview:progress_]; + [database_ setDelegate:progress_]; - [window_ setContentView:progress_]; underlay_ = [[UIView alloc] initWithFrame:[progress_ bounds]]; + [underlay_ setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; [progress_ setContentView:underlay_]; [progress_ resetView]; @@ -8259,16 +8378,19 @@ static _finline void _setHomePage(Cydia *self) { _trace(); overlay_ = [[UIView alloc] initWithFrame:[underlay_ bounds]]; + [overlay_ setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; CGRect screenrect = [UIHardware fullScreenApplicationContentRect]; + book_ = [[CYBook alloc] initWithFrame:CGRectMake( 0, 0, screenrect.size.width, screenrect.size.height - 48 ) database:database_]; - [book_ setDelegate:self]; - + [book_ setAutoresizingMask:UIViewAutoresizingFlexibleBoth]; [overlay_ addSubview:book_]; + [book_ setDelegate:self]; + NSArray *buttonitems = [NSArray arrayWithObjects: [NSDictionary dictionaryWithObjectsAndKeys: @"buttonBarItemTapped:", kUIButtonBarButtonAction, @@ -8330,6 +8452,9 @@ static _finline void _setHomePage(Cydia *self) { withItemList:buttonitems ]; + [toolbar_ setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin)]; + [overlay_ addSubview:toolbar_]; + [toolbar_ setDelegate:self]; [toolbar_ setBarStyle:1]; [toolbar_ setButtonBarTrackingMode:2]; @@ -8338,14 +8463,18 @@ static _finline void _setHomePage(Cydia *self) { [toolbar_ registerButtonGroup:0 withButtons:buttons withCount:5]; [toolbar_ showButtonGroup:0 withDuration:0]; - for (int i = 0; i != 5; ++i) - [[toolbar_ viewWithTag:(i + 1)] setFrame:CGRectMake( + for (int i = 0; i != 5; ++i) { + UIView *button([toolbar_ viewWithTag:(i + 1)]); + + [button setFrame:CGRectMake( i * (screenrect.size.width / 5) + (screenrect.size.width / 5 - ButtonBarWidth_) / 2, 1, ButtonBarWidth_, ButtonBarHeight_ )]; + [button setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin]; + } + [toolbar_ showSelectionForButton:1]; - [overlay_ addSubview:toolbar_]; [UIKeyboard initImplementationNow]; /*CGSize keysize = [UIKeyboard defaultSize]; @@ -8395,6 +8524,7 @@ static _finline void _setHomePage(Cydia *self) { } - (void) slideUp:(UIActionSheet *)alert { + [alert setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; [alert presentSheetInView:overlay_]; } @@ -8434,6 +8564,7 @@ int main(int argc, char *argv[]) { _pooled PackageName = reinterpret_cast(method_getImplementation(class_getInstanceMethod([Package class], @selector(cyname)))); /* Library Hacks {{{ */ + class_addMethod(objc_getClass("WebScriptObject"), @selector(countByEnumeratingWithState:objects:count:), (IMP) &WebScriptObject$countByEnumeratingWithState$objects$count$, "I20@0:4^{NSFastEnumerationState}8^@12I16"); class_addMethod(objc_getClass("DOMNodeList"), @selector(countByEnumeratingWithState:objects:count:), (IMP) &DOMNodeList$countByEnumeratingWithState$objects$count$, "I20@0:4^{NSFastEnumerationState}8^@12I16"); $WebDefaultUIKitDelegate = objc_getClass("WebDefaultUIKitDelegate"); @@ -8577,6 +8708,8 @@ int main(int argc, char *argv[]) { _pooled Packages_ = [Metadata_ objectForKey:@"Packages"]; Sections_ = [Metadata_ objectForKey:@"Sections"]; Sources_ = [Metadata_ objectForKey:@"Sources"]; + + Token_ = [Metadata_ objectForKey:@"Token"]; } if (Settings_ != nil) @@ -8616,7 +8749,7 @@ int main(int argc, char *argv[]) { _pooled if (access("/tmp/.cydia.fw", F_OK) == 0) { unlink("/tmp/.cydia.fw"); goto firmware; - } else if (access("/User", F_OK) != 0 || version < 1) { + } else if (access("/User", F_OK) != 0 || version < 2) { firmware: _trace(); system("/usr/libexec/cydia/firmware.sh");