]> git.saurik.com Git - cydia.git/blobdiff - Cydia.mm
We don't want a compile-time flag for RotationEnabled: we want it to work that way...
[cydia.git] / Cydia.mm
index ee8c7d6cab0ec3e513af4dcf4f29f3962786feab..c8e2c1bc239f71050aa0acbf55cf11c2951ccfd9 100644 (file)
--- a/Cydia.mm
+++ b/Cydia.mm
@@ -375,7 +375,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)
@@ -1209,6 +1209,7 @@ bool isSectionVisible(NSString *section) {
 - (void) beginUpdate;
 - (BOOL) updating;
 - (void) distUpgrade;
+- (void) loadData;
 - (void) updateData;
 - (void) syncData;
 - (void) showSettings;
@@ -2481,11 +2482,13 @@ struct PackageNameOrdering :
     UIImage *icon(nil);
     if (!icon_.empty())
         if ([icon_ hasPrefix:@"file:///"])
+            // XXX: correct escaping
             icon = [UIImage imageAtPath:[icon_ substringFromIndex:7]];
     if (icon == nil) if (section != nil)
         icon = [UIImage imageAtPath:[NSString stringWithFormat:@"%@/Sections/%@.png", App_, section]];
     if (icon == nil) if (source_ != nil) if (NSString *dicon = [source_ defaultIcon])
         if ([dicon hasPrefix:@"file:///"])
+            // XXX: correct escaping
             icon = [UIImage imageAtPath:[dicon substringFromIndex:7]];
     if (icon == nil)
         icon = [UIImage applicationImageNamed:@"unknown.png"];
@@ -3868,7 +3871,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 @implementation CYViewController
 @end
 /* }}} */
-
+/* Cydia Browser Controller {{{ */
 @interface CYBrowserController : BrowserController {
     CydiaObject *cydia_;
 }
@@ -3958,7 +3961,9 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 }
 
 @end
+/* }}} */
 
+/* Confirmation {{{ */
 @protocol ConfirmationControllerDelegate
 - (void) cancelAndClear:(bool)clear;
 - (void) confirmWithNavigationController:(UINavigationController *)navigation;
@@ -5226,9 +5231,12 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     }
 }
 
+// We don't want to allow non-commercial packages to do custom things to the install button,
+// so it must call customButtonClicked with a custom commercial_ == 1 fallthrough.
 - (void) customButtonClicked {
-    // Wait until it's done loading.
-    if (![self isLoading])
+    if (commercial_)
+        [super customButtonClicked];
+    else
         [self _customButtonClicked];
 }
 
@@ -5239,6 +5247,16 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 - (void) applyLoadingTitle {
     // Don't show "Loading" as the title. Ever.
 }
+
+- (UIBarButtonItem *) rightButton {
+    int count = [buttons_ count];
+    return [[[UIBarButtonItem alloc]
+        initWithTitle:count == 0 ? nil : count != 1 ? UCLocalize("MODIFY") : [buttons_ objectAtIndex:0]
+        style:UIBarButtonItemStylePlain
+        target:self
+        action:@selector(customButtonClicked)
+    ] autorelease];
+}
 #endif
 
 - (id) initWithDatabase:(Database *)database {
@@ -5306,19 +5324,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     }
 }
 
-- (void) applyRightButton {
-    int count = [buttons_ count];
-    UIBarButtonItem *actionItem = [[UIBarButtonItem alloc]
-        initWithTitle:count == 0 ? nil : count != 1 ? UCLocalize("MODIFY") : [buttons_ objectAtIndex:0]
-        style:UIBarButtonItemStylePlain
-        target:self
-        action:@selector(customButtonClicked)
-    ];
-    if (![self isLoading]) [[self navigationItem] setRightBarButtonItem:actionItem];
-    else [super applyRightButton];
-    [actionItem release];
-}
-
 - (bool) isLoading {
     return commercial_ ? [super isLoading] : false;
 }
@@ -6563,7 +6568,7 @@ freeing the view controllers on tab change */
     }
 }
 
-- (id) initWithDatabase: (Database *)database {
+- (id) initWithDatabase:(Database *)database {
     if ((self = [super init]) != nil) {
         database_ = database;
     } return self;
@@ -7516,7 +7521,7 @@ freeing the view controllers on tab change */
 }
 
 - (void) save {
-    NSString *role = nil;
+    NSString *role(nil);
 
     switch ([segment_ selectedSegmentIndex]) {
         case 0: role = @"User"; break;
@@ -7527,6 +7532,7 @@ freeing the view controllers on tab change */
     }
 
     if (![role isEqualToString:Role_]) {
+        bool rolling(Role_ == nil);
         Role_ = role;
 
         Settings_ = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@@ -7537,7 +7543,10 @@ freeing the view controllers on tab change */
 
         Changed_ = true;
 
-        [roledelegate_ updateData];
+        if (rolling)
+            [roledelegate_ loadData];
+        else
+            [roledelegate_ updateData];
     }
 }
 
@@ -7645,7 +7654,7 @@ freeing the view controllers on tab change */
 }
 
 - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation {
-    return YES; /* XXX: return YES; */
+    return IsWildcat_;
 }
 
 - (void) setTabBarController:(UITabBarController *)controller {
@@ -7762,8 +7771,8 @@ freeing the view controllers on tab change */
     if (animated) [UIView beginAnimations:nil context:NULL];
     CGRect barframe = [refreshbar_ frame];
     CGRect viewframe = [[root_ view] frame];
-    viewframe.origin.y += barframe.size.height + 20.0f;
-    viewframe.size.height -= barframe.size.height + 20.0f;
+    viewframe.origin.y += barframe.size.height;
+    viewframe.size.height -= barframe.size.height;
     [[root_ view] setFrame:viewframe];
     if (animated) [UIView commitAnimations];
 
@@ -7784,8 +7793,8 @@ freeing the view controllers on tab change */
     if (animated) [UIView beginAnimations:nil context:NULL];
     CGRect barframe = [refreshbar_ frame];
     CGRect viewframe = [[root_ view] frame];
-    viewframe.origin.y -= barframe.size.height + 20.0f;
-    viewframe.size.height += barframe.size.height + 20.0f;
+    viewframe.origin.y -= barframe.size.height;
+    viewframe.size.height += barframe.size.height;
     [[root_ view] setFrame:viewframe];
     if (animated) [UIView commitAnimations];
 
@@ -7873,6 +7882,7 @@ typedef enum {
 
 - (UCViewController *) _pageForURL:(NSURL *)url withClass:(Class)_class;
 - (void) setPage:(UCViewController *)page;
+- (void) loadData;
 
 @end
 
@@ -7997,8 +8007,6 @@ static _finline void _setHomePage(Cydia *self) {
 }
 
 - (void) _reloadData {
-    UIView *block();
-
     UIProgressHUD *hud([self addProgressHUD]);
     [hud setText:(loaded_ ? UCLocalize("RELOADING_DATA") : UCLocalize("LOADING_DATA"))];
 
@@ -8571,26 +8579,14 @@ static _finline void _setHomePage(Cydia *self) {
         return;
     }
 
-    if (Role_ == nil)
-        [self showSettings];
-
     _trace();
 
-    NSMutableArray *controllers = [NSMutableArray array];
-    [controllers addObject:[[CYNavigationController alloc] initWithDatabase:database_]];
-    [controllers addObject:[[CYNavigationController alloc] initWithDatabase:database_]];
-    [controllers addObject:[[CYNavigationController alloc] initWithDatabase:database_]];
-    if (IsWildcat_) [controllers addObject:[[CYNavigationController alloc] initWithDatabase:database_]];
-    [controllers addObject:[[CYNavigationController alloc] initWithDatabase:database_]];
-    [controllers addObject:[[CYNavigationController alloc] initWithDatabase:database_]];
-
-    NSMutableArray *items = [NSMutableArray arrayWithObjects:
+    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
-    ];
+    nil]);
 
     if (IsWildcat_) {
         [items insertObject:[[[UITabBarItem alloc] initWithTitle:UCLocalize("SOURCES") image:[UIImage applicationImageNamed:@"source.png"] tag:kSourcesTag] autorelease] atIndex:3];
@@ -8599,8 +8595,13 @@ static _finline void _setHomePage(Cydia *self) {
         [items insertObject:[[[UITabBarItem alloc] initWithTitle:UCLocalize("MANAGE") image:[UIImage applicationImageNamed:@"manage.png"] tag:kManageTag] autorelease] atIndex:3];
     }
 
-    for (size_t i(0); i != [items count]; i++)
-        [[controllers objectAtIndex:i] setTabBarItem:[items objectAtIndex:i]];
+    NSMutableArray *controllers([NSMutableArray array]);
+
+    for (UITabBarItem *item in items) {
+        CYNavigationController *controller([[[CYNavigationController alloc] initWithDatabase:database_] autorelease]);
+        [controller setTabBarItem:item];
+        [controllers addObject:controller];
+    }
 
     tabbar_ = [[CYTabBarController alloc] initWithDatabase:database_];
     [tabbar_ setViewControllers:controllers];
@@ -8612,6 +8613,15 @@ static _finline void _setHomePage(Cydia *self) {
     [container_ setTabBarController:tabbar_];
     [window_ addSubview:[container_ view]];
 
+    [self performSelector:@selector(loadData) withObject:nil afterDelay:0];
+}
+
+- (void) loadData {
+    if (Role_ == nil) {
+        [self showSettings];
+        return;
+    }
+
     [UIKeyboard initImplementationNow];
 
     [self reloadData];
@@ -8944,7 +8954,7 @@ int main(int argc, char *argv[]) { _pooled
     Warning_ = UCLocalize("WARNING");
 
     _trace();
-    int value = UIApplicationMain(argc, argv, @"Cydia", @"Cydia");
+    int value(UIApplicationMain(argc, argv, @"Cydia", @"Cydia"));
 
     CGColorSpaceRelease(space_);
     CFRelease(Locale_);