]> git.saurik.com Git - cydia.git/commitdiff
Timeouts, update cancel, update /bar/, webkit stability, url throttling.
authorJay Freeman (saurik) <saurik@saurik.com>
Mon, 1 Sep 2008 15:05:55 +0000 (15:05 +0000)
committerJay Freeman (saurik) <saurik@saurik.com>
Thu, 30 Sep 2010 07:08:28 +0000 (07:08 +0000)
30 files changed:
Cydia.app/Default.png
Cydia.app/Sections.plist
Cydia.app/Sections/Administration.png
Cydia.app/Sections/Archiving.png
Cydia.app/Sections/Communication.png [new file with mode: 0644]
Cydia.app/Sections/Data Storage.png
Cydia.app/Sections/Development.png
Cydia.app/Sections/Dictionaries.png [new file with mode: 0644]
Cydia.app/Sections/Games.png
Cydia.app/Sections/Java.png
Cydia.app/Sections/Localization.png
Cydia.app/Sections/Multimedia.png
Cydia.app/Sections/Networking.png
Cydia.app/Sections/Packaging.png
Cydia.app/Sections/Productivity.png
Cydia.app/Sections/Repositories.png
Cydia.app/Sections/Scripting.png
Cydia.app/Sections/Security.png
Cydia.app/Sections/System.png
Cydia.app/Sections/Terminal Support.png
Cydia.app/Sections/Text Editors.png
Cydia.app/Sections/Themes.png
Cydia.app/Sections/Toys.png
Cydia.app/Sections/Tweaks.png
Cydia.app/Sections/Utilities.png
Cydia.app/Sections/Wallpaper.png [new file with mode: 0644]
Cydia.app/Sections/X Window.png
Cydia.app/package.js
Cydia.mm
makefile

index b603d4e28655842c259851d1fa39f24cf8cd0315..3c7762cb38ef68692972a3ff7480eb583dd2ee15 100644 (file)
Binary files a/Cydia.app/Default.png and b/Cydia.app/Default.png differ
index 16c498f6ab9a0f0c5a77791f824c724d4a1b3af8..68a264de161fb0c6c9e35e581ad54c3dcacb74b2 100644 (file)
@@ -1,3 +1,31 @@
-Tweaks_2.0 Tweaks
-Themes_(SummerBoard) Themes_(WinterBoard)
-Network Networking
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+
+<dict>
+    <key>Tweaks_2.0</key>
+    <dict>
+        <key>Rename</key>
+        <string>Tweaks</string>
+    </dict>
+
+    <key>Themes_(SummerBoard)</key>
+    <dict>
+        <key>Rename</key>
+        <string>Themes_(SpringBoard)</string>
+    </dict>
+
+    <key>Intelliborn</key>
+    <dict>
+        <key>Rename</key>
+        <string>Utilities</string>
+    </dict>
+
+    <key>Network</key>
+    <dict>
+        <key>Rename</key>
+        <string>Networking</string>
+    </dict>
+</dict>
+
+</plist>
index 8b4b44f8019b9fc390b22137d939142f351e05b1..65efd3ec71ee8e954a734c3e4a47325b9ed1b7ec 100644 (file)
Binary files a/Cydia.app/Sections/Administration.png and b/Cydia.app/Sections/Administration.png differ
index 68b486a95f0aa815b1e595c28083cc239ce4f136..9efce5653c6b1f3db9386731079024658f022d75 100644 (file)
Binary files a/Cydia.app/Sections/Archiving.png and b/Cydia.app/Sections/Archiving.png differ
diff --git a/Cydia.app/Sections/Communication.png b/Cydia.app/Sections/Communication.png
new file mode 100644 (file)
index 0000000..00f36f7
Binary files /dev/null and b/Cydia.app/Sections/Communication.png differ
index e8a8449ffbba61e7d154f729a88b758b24232cb3..1bb23fedd0a071c80d29b6c9c8d4a1d1abcdbfbf 100644 (file)
Binary files a/Cydia.app/Sections/Data Storage.png and b/Cydia.app/Sections/Data Storage.png differ
index 25afa9f270a1e17cee247e37d3bb0a4fd598d2c8..806b44218d5a7d096631a08f7c21241a647ca380 100644 (file)
Binary files a/Cydia.app/Sections/Development.png and b/Cydia.app/Sections/Development.png differ
diff --git a/Cydia.app/Sections/Dictionaries.png b/Cydia.app/Sections/Dictionaries.png
new file mode 100644 (file)
index 0000000..e386e76
Binary files /dev/null and b/Cydia.app/Sections/Dictionaries.png differ
index 6e0efafd9fd6285faac2bc4b7b7f1170e42870ad..6e14c50958142f04f9a58078553d9a01a947037c 100644 (file)
Binary files a/Cydia.app/Sections/Games.png and b/Cydia.app/Sections/Games.png differ
index 4b543db91b471f1b39c3a10b25c7790e6869cbbe..e6bbc912b69019fef53967801b74898146f337c4 100644 (file)
Binary files a/Cydia.app/Sections/Java.png and b/Cydia.app/Sections/Java.png differ
index 2450175a24e5438bb4dbea29bc07a2732f3ca10d..80d41d3ebe5877973275b3d106703702c6e84278 100644 (file)
Binary files a/Cydia.app/Sections/Localization.png and b/Cydia.app/Sections/Localization.png differ
index 07f20b63709378f5737a76e9603dcd2121dc0f94..42d0b5e9b5353ee0dd166b350346e90ec648b1f6 100644 (file)
Binary files a/Cydia.app/Sections/Multimedia.png and b/Cydia.app/Sections/Multimedia.png differ
index ee1f0a1df1e009828de17e02e1ccefef0e9bae7a..a4f04e3210ee19603c5a57ebbd02b309da0f452d 100644 (file)
Binary files a/Cydia.app/Sections/Networking.png and b/Cydia.app/Sections/Networking.png differ
index c1b72a5b575122e9a40573a73a2c9b779f90a362..d7d914ec9fe506e0930e1145bf63b7c25964ad82 100644 (file)
Binary files a/Cydia.app/Sections/Packaging.png and b/Cydia.app/Sections/Packaging.png differ
index 943b8bd106bf656c833d69e45dec456f7470ff0c..c99c69d7a1ab5456202232bee97a2db219778ebc 100644 (file)
Binary files a/Cydia.app/Sections/Productivity.png and b/Cydia.app/Sections/Productivity.png differ
index bed4a4a10466335723384c0e902c9414b1b8eef5..d6fe2678d6ba85b7014829a42abbbf52a45471c7 100644 (file)
Binary files a/Cydia.app/Sections/Repositories.png and b/Cydia.app/Sections/Repositories.png differ
index d020f71adae7bf6ebb9377c6d43757f5501f821f..22285d25ffed21f7db1aa84c80359e4672138d6c 100644 (file)
Binary files a/Cydia.app/Sections/Scripting.png and b/Cydia.app/Sections/Scripting.png differ
index b091a84fcf416e98861737575e66e083421ea4f9..ae142eb3380605c88487ba2f519d6f3fc2b38069 100644 (file)
Binary files a/Cydia.app/Sections/Security.png and b/Cydia.app/Sections/Security.png differ
index f16c21675a22d1e4abdae99a79c8f5c1a7471a26..19d2c2249734021f718b832a914530fad057bc01 100644 (file)
Binary files a/Cydia.app/Sections/System.png and b/Cydia.app/Sections/System.png differ
index 864374cb159d21de0fef70c5c89872389d1b600c..d6646184373594277e8e43d871148f7241d6fb1c 100644 (file)
Binary files a/Cydia.app/Sections/Terminal Support.png and b/Cydia.app/Sections/Terminal Support.png differ
index 8176c27f992630365d962c62bb7d1a7bb46d0637..5e65d46d84cc0d005baac800383ab996e3c5f193 100644 (file)
Binary files a/Cydia.app/Sections/Text Editors.png and b/Cydia.app/Sections/Text Editors.png differ
index f5b44db572d610a498383a68b9bb6e805cf83630..e35b9481d1b0562d069cba1ad95f723eb2598bdf 100644 (file)
Binary files a/Cydia.app/Sections/Themes.png and b/Cydia.app/Sections/Themes.png differ
index 88df4ab8a1046eef34a597117fb91d981f2a5bd7..368eb4cd7381e2e1a4557a2dae15004fc5348bd3 100644 (file)
Binary files a/Cydia.app/Sections/Toys.png and b/Cydia.app/Sections/Toys.png differ
index 14d400b1f02665773d776a5c31fc4e24089366de..4f588c68a0f63dab2989151816c94c6f5dbbb2a9 100644 (file)
Binary files a/Cydia.app/Sections/Tweaks.png and b/Cydia.app/Sections/Tweaks.png differ
index 2d7c31d88cf28b289ecd7b44b2c5441453b5b6ac..fab5d329696f5498636cd79854a0825ae23f8738 100644 (file)
Binary files a/Cydia.app/Sections/Utilities.png and b/Cydia.app/Sections/Utilities.png differ
diff --git a/Cydia.app/Sections/Wallpaper.png b/Cydia.app/Sections/Wallpaper.png
new file mode 100644 (file)
index 0000000..1060fa0
Binary files /dev/null and b/Cydia.app/Sections/Wallpaper.png differ
index 5b1b7f5e3c9d1b044e919508b8e62718d3bb8287..eac01e9439ea912ea119c4eda1d9b2744e0a0144 100644 (file)
Binary files a/Cydia.app/Sections/X Window.png and b/Cydia.app/Sections/X Window.png differ
index 6f9ccf110f4362f406dd82c1959865ed3e423387..480ec01dfb2ef1a04feb511a85a4990d7971c0ac 100644 (file)
@@ -39,7 +39,7 @@ $(function () {
         $("#author-href").href("mailto:" + author.address + "?subject=" + regarding);
     }
 
-    $("#notice-src").src("http://apt.saurik.com/notice/" + encodeURIComponent(id) + ".html");
+    //$("#notice-src").src("http://saurik.cachefly.net/notice/" + encodeURIComponent(id) + ".html");
 
     var depiction = package.depiction;
     if (depiction == null)
index 81d090fc398dc3fc874e7aeba6748c10dbd5ec1a..e70d9f3b953abc24e4033f54aa7c7c1102b97a45 100644 (file)
--- a/Cydia.mm
+++ b/Cydia.mm
 #include <WebCore/DOMHTML.h>
 #import <QuartzCore/CALayer.h>
 
-#import <UIKit/UIActionSheet.h>
-#import <UIKit/UIAnimator.h>
-#import <UIKit/UIApplication.h>
-#import <UIKit/UIColor.h>
-#import <UIKit/UIFieldEditor.h>
-#import <UIKit/UIFrameAnimation.h>
-#import <UIKit/UIHardware.h>
-#import <UIKit/UIImage.h>
-#import <UIKit/UIImageAndTextTableCell.h>
-#import <UIKit/UIImageView.h>
-#import <UIKit/UIKeyboard.h>
-#import <UIKit/UIKeyboardImpl.h>
-#import <UIKit/UINavigationBar.h>
-#import <UIKit/UINavigationItem.h>
-#import <UIKit/UIPreferencesTable.h>
-#import <UIKit/UIPreferencesTableCell.h>
-#import <UIKit/UIProgressBar.h>
-#import <UIKit/UIProgressHUD.h>
-#import <UIKit/UIProgressIndicator.h>
-#import <UIKit/UIPushButton.h>
-#import <UIKit/UISearchField.h>
-#import <UIKit/UISimpleTableCell.h>
-#import <UIKit/_UISwitchSlider.h>
-#import <UIKit/UITableCell.h>
-#import <UIKit/UITableColumn.h>
-#import <UIKit/UITextField.h>
-#import <UIKit/UITextInputTraits.h>
-#import <UIKit/UITextLabel.h>
-#import <UIKit/UITextView.h>
-#import <UIKit/UIToolbar.h>
-#import <UIKit/UITransitionView.h>
-#import <UIKit/UIWebDocumentView.h>
-#import <UIKit/UIWebView.h>
-#import <UIKit/UIWindow.h>
-
-#import <UIKit/UIView-Geometry.h>
-#import <UIKit/UIView-Gestures.h>
-#import <UIKit/UIView-Hierarchy.h>
-#import <UIKit/UIView-Rendering.h>
-
-#import <UIKit/UIWebDocumentView-Forms.h>
-
-#import <UIKit/NSString-UIStringDrawing.h>
+#import <UIKit/UIKit.h>
 
 // XXX: remove
 #import <UIKit/UIActionSheet-Private.h>
@@ -142,8 +100,6 @@ extern "C" {
 #include <errno.h>
 #include <pcre.h>
 
-#define UIWebView UIWebDocumentView
-
 #import "BrowserView.h"
 #import "ResetView.h"
 #import "UICaboodle.h"
@@ -163,14 +119,6 @@ static const NSStringCompareOptions CompareOptions_ = NSCaseInsensitiveSearch |
 - (id) initWithCGColor:(CGColorRef)color;
 @end
 
-@interface UIFont {
-}
-
-+ (id)systemFontOfSize:(float)fp8;
-+ (id)boldSystemFontOfSize:(float)fp8;
-- (UIFont *) fontWithSize:(CGFloat)size;
-@end
-
 @interface NSObject (iPhoneOS)
 - (CGColorRef) cgColor;
 - (CGColorRef) CGColor;
@@ -228,8 +176,10 @@ extern NSString *kUIButtonBarButtonType;
 typedef enum {
     kUIProgressIndicatorStyleLargeWhite = 0,
     kUIProgressIndicatorStyleMediumWhite = 1,
+    kUIProgressIndicatorStyleMediumBrown = 2,
     kUIProgressIndicatorStyleSmallWhite = 3,
-    kUIProgressIndicatorStyleSmallBlack = 4
+    kUIProgressIndicatorStyleSmallBlack = 4,
+    kUIProgressIndicatorStyleTinyWhite = 5,
 } UIProgressIndicatorStyle;
 
 typedef enum {
@@ -467,7 +417,7 @@ static const char * const SpringBoard_ = "/System/Library/LaunchDaemons/com.appl
 static CGColor Blue_;
 static CGColor Blueish_;
 static CGColor Black_;
-static CGColor Clear_;
+static CGColor Off_;
 static CGColor Red_;
 static CGColor White_;
 static CGColor Gray_;
@@ -512,6 +462,7 @@ static _transient NSString *Role_;
 static _transient NSMutableDictionary *Packages_;
 static _transient NSMutableDictionary *Sections_;
 static _transient NSMutableDictionary *Sources_;
+static _transient NSMutableArray *Documents_;
 static bool Changed_;
 static NSDate *now_;
 
@@ -565,7 +516,7 @@ UITextView *GetTextView(NSString *value, float left, bool html) {
         [text setText:value];
     [text setEnabled:NO];
 
-    [text setBackgroundColor:[UIColor colorWithCGColor:Clear_]];
+    [text setBackgroundColor:[UIColor clearColor]];
 
     CGRect frame = [text frame];
     [text setFrame:frame];
@@ -624,7 +575,9 @@ bool isSectionVisible(NSString *section) {
 - (void) setProgressError:(NSString *)error forPackage:(NSString *)id;
 - (void) setProgressTitle:(NSString *)title;
 - (void) setProgressPercent:(float)percent;
+- (void) startProgress;
 - (void) addProgressOutput:(NSString *)output;
+- (bool) isCancelling:(size_t)received;
 @end
 
 @protocol ConfigurationDelegate
@@ -697,10 +650,11 @@ class Status :
         );
 
         [delegate_ setProgressPercent:percent];
-        return value;
+        return [delegate_ isCancelling:CurrentBytes] ? false : value;
     }
 
     virtual void Start() {
+        [delegate_ startProgress];
     }
 
     virtual void Stop() {
@@ -1475,7 +1429,7 @@ NSString *Scour(const char *field, const char *begin, const char *end) {
 
     NSRange range;
 
-    range = [[self id] rangeOfString:text options:NSCaseInsentiveSearch];
+    range = [[self id] rangeOfString:text options:NSCaseInsensitiveSearch];
     if (range.location != NSNotFound)
         return YES;
 
@@ -2427,7 +2381,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
             0, navsize.height, bounds.size.width, bounds.size.height - navsize.height
         )];
 
-        [table_ setReusesTableCells:YES];
         [table_ setDataSource:self];
         [table_ reloadData];
 
@@ -2503,6 +2456,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     id delegate_;
     BOOL running_;
     SHA1SumValue springlist_;
+    size_t received_;
+    NSTimeInterval last_;
 }
 
 - (void) transitionViewDidComplete:(UITransitionView*)view fromView:(UIView*)from toView:(UIView*)to;
@@ -2558,10 +2513,10 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         overlay_ = [[UIView alloc] initWithFrame:[transition_ bounds]];
 
         if (bootstrap_)
-            [overlay_ setBackgroundColor:[UIColor colorWithCGColor:Black_]];
+            [overlay_ setBackgroundColor:[UIColor blackColor]];
         else {
             background_ = [[UIView alloc] initWithFrame:[self bounds]];
-            [background_ setBackgroundColor:[UIColor colorWithCGColor:Black_]];
+            [background_ setBackgroundColor:[UIColor blackColor]];
             [self addSubview:background_];
         }
 
@@ -2597,8 +2552,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
             24
         )];
 
-        [status_ setColor:[UIColor colorWithCGColor:White_]];
-        [status_ setBackgroundColor:[UIColor colorWithCGColor:Clear_]];
+        [status_ setColor:[UIColor whiteColor]];
+        [status_ setBackgroundColor:[UIColor clearColor]];
 
         [status_ setCentersHorizontally:YES];
         //[status_ setFont:font];
@@ -2613,8 +2568,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         //[output_ setTextFont:@"Courier New"];
         [output_ setTextSize:12];
 
-        [output_ setTextColor:[UIColor colorWithCGColor:White_]];
-        [output_ setBackgroundColor:[UIColor colorWithCGColor:Clear_]];
+        [output_ setTextColor:[UIColor whiteColor]];
+        [output_ setBackgroundColor:[UIColor clearColor]];
 
         [output_ setMarginTop:0];
         [output_ setAllowsRubberBanding:YES];
@@ -2751,6 +2706,9 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     [output_ setText:@""];
     [progress_ setProgress:0];
 
+    received_ = 0;
+    last_ = 0;//[NSDate timeIntervalSinceReferenceDate];
+
     [close_ removeFromSuperview];
     [overlay_ addSubview:progress_];
     [overlay_ addSubview:status_];
@@ -2784,7 +2742,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         detachNewThreadSelector:selector
         toTarget:database_
         withObject:nil
-        title:@"Repairing..."
+        title:@"Repairing"
     ];
 }
 
@@ -2827,6 +2785,10 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     ];
 }
 
+- (void) startProgress {
+    last_ = [NSDate timeIntervalSinceReferenceDate];
+}
+
 - (void) addProgressOutput:(NSString *)output {
     [self
         performSelectorOnMainThread:@selector(_addProgressOutput:)
@@ -2835,6 +2797,19 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     ];
 }
 
+- (bool) isCancelling:(size_t)received {
+    if (last_ != 0) {
+        NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate];
+        if (received_ != received) {
+            received_ = received;
+            last_ = now;
+        } else if (now - last_ > 30)
+            return true;
+    }
+
+    return false;
+}
+
 - (void) _setConfigurationData:(NSString *)data {
     static Pcre conffile_r("^'(.*)' '(.*)' ([01]) ([01])$");
 
@@ -2863,7 +2838,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 }
 
 - (void) _setProgressTitle:(NSString *)title {
-    [status_ setText:[title stringByAppendingString:@"..."]];
+    [status_ setText:title];
 }
 
 - (void) _setProgressPercent:(NSNumber *)percent {
@@ -2944,7 +2919,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         badge_ = [[UIImageView alloc] initWithFrame:CGRectMake(17, 70, 16, 16)];
 
         status_ = [[UITextLabel alloc] initWithFrame:CGRectMake(48, 68, 280, 20)];
-        [status_ setBackgroundColor:Clear_];
+        [status_ setBackgroundColor:[UIColor clearColor]];
         [status_ setFont:small];
 #endif
     } return self;
@@ -3003,7 +2978,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     } else if ([package half]) {
         [badge_ setImage:[UIImage applicationImageNamed:@"damaged.png"]];
         [status_ setText:@"Package Damaged"];
-        [status_ setColor:Red_];
+        [status_ setColor:[UIColor redColor]];
     } else {
         [badge_ setImage:nil];
         [status_ setText:nil];
@@ -3017,8 +2992,18 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 }
 
 - (void) drawContentInRect:(CGRect)rect selected:(BOOL)selected {
-    if (icon_ != nil)
-        [icon_ drawInRect:CGRectMake(10, 10, 30, 30)];
+    if (icon_ != nil) {
+        CGRect rect;
+        rect.size = [icon_ size];
+
+        rect.size.width /= 2;
+        rect.size.height /= 2;
+
+        rect.origin.x = 25 - rect.size.width / 2;
+        rect.origin.y = 25 - rect.size.height / 2;
+
+        [icon_ drawInRect:rect];
+    }
 
     if (selected)
         UISetColor(White_);
@@ -3542,6 +3527,9 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 
         [self addSubview:list_];
         [self reloadData];
+
+        [self setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
+        [list_ setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
     } return self;
 }
 
@@ -3983,6 +3971,9 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         [table setDelegate:self];
 
         [self reloadData];
+
+        [self setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
+        [list_ setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
     } return self;
 }
 
@@ -4055,8 +4046,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     return [[list_ table] isRowDeletionEnabled] ? @"Done" : @"Edit";
 }
 
-- (RVUINavBarButtonStyle) rightButtonStyle {
-    return [[list_ table] isRowDeletionEnabled] ? RVUINavBarButtonStyleHighlighted : RVUINavBarButtonStyleNormal;
+- (UINavigationButtonStyle) rightButtonStyle {
+    return [[list_ table] isRowDeletionEnabled] ? UINavigationButtonStyleHighlighted : UINavigationButtonStyleNormal;
 }
 
 @end
@@ -4093,6 +4084,9 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         ];
 
         [self addSubview:packages_];
+
+        [self setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
+        [packages_ setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
     } return self;
 }
 
@@ -4123,8 +4117,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     return Role_ != nil && [Role_ isEqualToString:@"Developer"] ? nil : expert_ ? @"Expert" : @"Simple";
 }
 
-- (RVUINavBarButtonStyle) rightButtonStyle {
-    return expert_ ? RVUINavBarButtonStyleHighlighted : RVUINavBarButtonStyleNormal;
+- (UINavigationButtonStyle) rightButtonStyle {
+    return expert_ ? UINavigationButtonStyleHighlighted : UINavigationButtonStyleNormal;
 }
 
 - (void) setDelegate:(id)delegate {
@@ -4207,6 +4201,41 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 @end
 /* }}} */
 
+/* Indirect Delegate {{{ */
+@interface IndirectDelegate : NSProxy {
+    _transient id delegate_;
+}
+
+- (void) setDelegate:(id)delegate;
+- (id) initWithDelegate:(id)delegate;
+@end
+
+@implementation IndirectDelegate
+
+- (void) setDelegate:(id)delegate {
+    delegate_ = delegate;
+}
+
+- (id) initWithDelegate:(id)delegate {
+    delegate_ = delegate;
+    return self;
+}
+
+- (NSMethodSignature*) methodSignatureForSelector:(SEL)sel {
+    if (delegate_ != nil)
+        if (NSMethodSignature *sig = [delegate_ methodSignatureForSelector:sel])
+            return sig;
+    return nil;
+}
+
+- (void) forwardInvocation:(NSInvocation*)inv {
+    SEL sel = [inv selector];
+    if (delegate_ != nil && [delegate_ respondsToSelector:sel])
+        [inv invokeWithTarget:delegate_];
+}
+
+@end
+/* }}} */
 /* Browser Implementation {{{ */
 @implementation BrowserView
 
@@ -4216,11 +4245,22 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     [webview setResourceLoadDelegate:nil];
     [webview setUIDelegate:nil];
 
-    [scroller_ setDelegate:nil];
     [webview_ setDelegate:nil];
+    [webview_ setGestureDelegate:nil];
 
-    [scroller_ release];
+    /*WebFrame *frame = [webview mainFrame];
+    [frame loadHTMLString:@"" baseURL:[NSURL URLWithString:@"http://cydia.saurik.com/"]];*/
+
+    //[webview_ removeFromSuperview];
+    //[Documents_ addObject:[webview_ autorelease]];
     [webview_ release];
+
+    [indirect_ setDelegate:nil];
+    [indirect_ release];
+
+    [scroller_ setDelegate:nil];
+
+    [scroller_ release];
     [urls_ release];
     [indicator_ release];
     if (title_ != nil)
@@ -4309,8 +4349,11 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     RVPage *page = nil;
 
     if (
+        [href hasPrefix:@"http://ax.phobos.apple.com/"] ||
         [href hasPrefix:@"http://phobos.apple.com/"] ||
-        [href hasPrefix:@"mailto:"]
+        [href hasPrefix:@"http://www.youtube.com/watch?"] ||
+        [href hasPrefix:@"mailto:"] ||
+        [href hasPrefix:@"tel:"]
     )
         [delegate_ openURL:[NSURL URLWithString:href]];
     else if ([href isEqualToString:@"cydia://add-source"])
@@ -4354,7 +4397,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 
 - (NSURLRequest *) webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)dataSource {
     NSURL *url = [request URL];
-    NSLog(@"Cydia:%@", url);
     if ([self getSpecial:[url absoluteString]])
         return nil;
 
@@ -4370,14 +4412,21 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     return
         [scheme isEqualToString:@"apptapp"] ||
         [scheme isEqualToString:@"cydia"] ||
-        [scheme isEqualToString:@"mailto"];
+        [scheme isEqualToString:@"mailto"] ||
+        [scheme isEqualToString:@"tel"];
 }
 
 - (WebView *) webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request {
     if (request != nil) {
         NSURL *url = [request URL];
         NSString *scheme = [url scheme];
-        if ([self isSpecialScheme:scheme] || [[url absoluteString] hasPrefix:@"http://phobos.apple.com/"])
+        NSString *absolute = [url absoluteString];
+        if (
+            [self isSpecialScheme:scheme] ||
+            [absolute hasPrefix:@"http://ax.phobos.apple.com/"] ||
+            [absolute hasPrefix:@"http://phobos.apple.com/"] ||
+            [absolute hasPrefix:@"http://www.yahoo.com/watch?"]
+        )
             return nil;
     }
 
@@ -4416,7 +4465,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         title_ = nil;
     }
 
-    [self setTitle:@"Loading..."];
+    [self setTitle:@"Loading"];
 
     WebView *webview = [webview_ webView];
     NSString *href = [webview mainFrameURL];
@@ -4499,32 +4548,40 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         CGRect webrect = [scroller_ bounds];
         webrect.size.height = 0;
 
-        webview_ = [[UIWebView alloc] initWithFrame:webrect];
-        [scroller_ addSubview:webview_];
+        webview_ = [Documents_ lastObject];
+        if (webview_ != nil) {
+            webview_ = [webview_ retain];
+            [Documents_ removeLastObject];
+            [webview_ setFrame:webrect];
+        } else {
+            webview_ = [[UIWebDocumentView alloc] initWithFrame:webrect];
+
+            [webview_ setTileSize:CGSizeMake(webrect.size.width, 500)];
 
-        [webview_ setTileSize:CGSizeMake(webrect.size.width, 500)];
+            [webview_ setTilingEnabled:YES];
+            [webview_ setTileMinificationFilter:kCAFilterNearest];
+            [webview_ setAutoresizes:YES];
 
-        [webview_ setTilingEnabled:YES];
-        [webview_ setTileMinificationFilter:kCAFilterNearest];
-        [webview_ setAutoresizes:YES];
+            [webview_ setViewportSize:CGSizeMake(980, -1) forDocumentTypes:0x10];
+            [webview_ setViewportSize:CGSizeMake(320, -1) forDocumentTypes:0x2];
+            [webview_ setViewportSize:CGSizeMake(320, -1) forDocumentTypes:0x8];
 
-        [webview_ setViewportSize:CGSizeMake(980, -1) forDocumentTypes:0x10];
-        [webview_ setViewportSize:CGSizeMake(320, -1) forDocumentTypes:0x2];
-        [webview_ setViewportSize:CGSizeMake(320, -1) forDocumentTypes:0x8];
+            [webview_ _setDocumentType:0x4];
 
-        [webview_ _setDocumentType:0x4];
+            [webview_ setZoomsFocusedFormControl:YES];
+            [webview_ setContentsPosition:7];
+            [webview_ setEnabledGestures:0xa];
+            [webview_ setValue:[NSNumber numberWithBool:YES] forGestureAttribute:0x4];
+            [webview_ setValue:[NSNumber numberWithBool:YES] forGestureAttribute:0x7];
+            [webview_ setSmoothsFonts:YES];
+        }
 
-        [webview_ setZoomsFocusedFormControl:YES];
-        [webview_ setContentsPosition:7];
-        [webview_ setEnabledGestures:0xa];
-        [webview_ setValue:[NSNumber numberWithBool:YES] forGestureAttribute:0x4];
-        [webview_ setValue:[NSNumber numberWithBool:YES] forGestureAttribute:0x7];
         [webview_ setDelegate:self];
         [webview_ setGestureDelegate:self];
-        [webview_ setSmoothsFonts:YES];
+        [scroller_ addSubview:webview_];
 
         CGSize indsize = [UIProgressIndicator defaultSizeForStyle:kUIProgressIndicatorStyleMediumWhite];
-        indicator_ = [[UIProgressIndicator alloc] initWithFrame:CGRectMake(281, 42, indsize.width, indsize.height)];
+        indicator_ = [[UIProgressIndicator alloc] initWithFrame:CGRectMake(281, 12, indsize.width, indsize.height)];
         [indicator_ setStyle:kUIProgressIndicatorStyleMediumWhite];
 
         Package *package([database_ packageWithName:@"cydia"]);
@@ -4533,15 +4590,21 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
             [package installed]
         ];
 
+        indirect_ = [[IndirectDelegate alloc] initWithDelegate:self];
+
         WebView *webview = [webview_ webView];
         [webview setApplicationNameForUserAgent:application];
         [webview setFrameLoadDelegate:self];
-        [webview setResourceLoadDelegate:self];
+        [webview setResourceLoadDelegate:indirect_];
         [webview setUIDelegate:self];
 
         //[webview _setLayoutInterval:0.5];
 
         urls_ = [[NSMutableArray alloc] initWithCapacity:16];
+
+        [self setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
+        [scroller_ setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
+        [pinstripe setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
     } return self;
 }
 
@@ -4571,10 +4634,10 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 }
 
 - (void) setPageActive:(BOOL)active {
-    if (active)
-        [book_ addSubview:indicator_];
-    else
+    if (!active)
         [indicator_ removeFromSuperview];
+    else
+        [[book_ navigationBar] addSubview:indicator_];
 }
 
 - (void) resetViewAnimated:(BOOL)animated {
@@ -4591,11 +4654,14 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     ProgressDelegate
 > {
     _transient Database *database_;
-    UIView *overlay_;
+    UINavigationBar *overlay_;
     UIProgressIndicator *indicator_;
     UITextLabel *prompt_;
     UIProgressBar *progress_;
+    UINavigationButton *cancel_;
     bool updating_;
+    size_t received_;
+    NSTimeInterval last_;
 }
 
 - (id) initWithFrame:(CGRect)frame database:(Database *)database;
@@ -4725,6 +4791,9 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         [list_ setReusesTableCells:YES];
 
         [self reloadData];
+
+        [self setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
+        [list_ setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
     } return self;
 }
 
@@ -4808,6 +4877,10 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     return [sections_ count] == 0 ? nil : editing_ ? @"Done" : @"Edit";
 }
 
+- (UINavigationButtonStyle) rightButtonStyle {
+    return editing_ ? UINavigationButtonStyleHighlighted : UINavigationButtonStyleNormal;
+}
+
 - (UIView *) accessoryView {
     return accessory_;
 }
@@ -4918,6 +4991,9 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         [table setReusesTableCells:YES];
 
         [self reloadData];
+
+        [self setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
+        [list_ setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
     } return self;
 }
 
@@ -5177,7 +5253,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 
         CGRect area;
         area.origin.x = /*cnfrect.origin.x + cnfrect.size.width + 4 +*/ 10;
-        area.origin.y = 30;
+        area.origin.y = 1;
 
         area.size.width =
 #ifdef __OBJC2__
@@ -5202,7 +5278,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         [traits setAutocorrectionType:1];
         [traits setReturnKeyType:6];
 
-        CGRect accrect = {{0, 6}, {6 + cnfrect.size.width + 6 + area.size.width + 6, area.size.height + 30}};
+        CGRect accrect = {{0, 6}, {6 + cnfrect.size.width + 6 + area.size.width + 6, area.size.height}};
 
         accessory_ = [[UIView alloc] initWithFrame:accrect];
         [accessory_ addSubview:field_];
@@ -5212,6 +5288,9 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         [configure setImage:[UIImage applicationImageNamed:@"advanced.png"]];
         [configure addTarget:self action:@selector(configurePushed) forEvents:1];
         [accessory_ addSubview:configure];*/
+
+        [self setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
+        [table_ setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
     } return self;
 }
 
@@ -5277,6 +5356,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     [indicator_ release];
     [prompt_ release];
     [progress_ release];
+    [cancel_ release];
     [super dealloc];
 }
 
@@ -5289,13 +5369,31 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 }
 
 - (void) update {
-    [navbar_ setPrompt:@""];
-    [navbar_ addSubview:overlay_];
+    [UIView beginAnimations:nil context:NULL];
+
+    CGRect ovrframe = [overlay_ frame];
+    ovrframe.origin.y = 0;
+    [overlay_ setFrame:ovrframe];
+
+    CGRect barframe = [navbar_ frame];
+    barframe.origin.y += ovrframe.size.height;
+    [navbar_ setFrame:barframe];
+
+    CGRect trnframe = [transition_ frame];
+    trnframe.origin.y += ovrframe.size.height;
+    trnframe.size.height -= ovrframe.size.height;
+    [transition_ setFrame:trnframe];
+
+    [UIView endAnimations];
+
     [indicator_ startAnimation];
-    [prompt_ setText:@"Updating Database..."];
+    [prompt_ setText:@"Updating Database"];
     [progress_ setProgress:0];
 
+    received_ = 0;
+    last_ = [NSDate timeIntervalSinceReferenceDate];
     updating_ = true;
+    [overlay_ addSubview:cancel_];
 
     [NSThread
         detachNewThreadSelector:@selector(_update)
@@ -5307,11 +5405,26 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 - (void) _update_ {
     updating_ = false;
 
-    [overlay_ removeFromSuperview];
     [indicator_ stopAnimation];
-    [delegate_ reloadData];
 
-    [self setPrompt:[NSString stringWithFormat:@"Last Updated: %@", GetLastUpdate()]];
+    [UIView beginAnimations:nil context:NULL];
+
+    CGRect ovrframe = [overlay_ frame];
+    ovrframe.origin.y = -ovrframe.size.height;
+    [overlay_ setFrame:ovrframe];
+
+    CGRect barframe = [navbar_ frame];
+    barframe.origin.y -= ovrframe.size.height;
+    [navbar_ setFrame:barframe];
+
+    CGRect trnframe = [transition_ frame];
+    trnframe.origin.y -= ovrframe.size.height;
+    trnframe.size.height += ovrframe.size.height;
+    [transition_ setFrame:trnframe];
+
+    [UIView commitAnimations];
+
+    [delegate_ performSelector:@selector(reloadData) withObject:nil afterDelay:0];
 }
 
 - (id) initWithFrame:(CGRect)frame database:(Database *)database {
@@ -5319,15 +5432,19 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         database_ = database;
 
         CGRect ovrrect = [navbar_ bounds];
-        ovrrect.size.height = ([UINavigationBar defaultSizeWithPrompt].height - [UINavigationBar defaultSize].height);
+        ovrrect.size.height = [UINavigationBar defaultSize].height;
+        ovrrect.origin.y = -ovrrect.size.height;
 
-        overlay_ = [[UIView alloc] initWithFrame:ovrrect];
+        overlay_ = [[UINavigationBar alloc] initWithFrame:ovrrect];
+        [self addSubview:overlay_];
 
-        bool ugly = [navbar_ _barStyle:NO] == 0;
+        [overlay_ setBarStyle:1];
+        int barstyle = [overlay_ _barStyle:NO];
+        bool ugly = barstyle == 0;
 
         UIProgressIndicatorStyle style = ugly ?
-            kUIProgressIndicatorStyleSmallBlack :
-            kUIProgressIndicatorStyleSmallWhite;
+            kUIProgressIndicatorStyleMediumBrown :
+            kUIProgressIndicatorStyleMediumWhite;
 
         CGSize indsize = [UIProgressIndicator defaultSizeForStyle:style];
         unsigned indoffset = (ovrrect.size.height - indsize.height) / 2;
@@ -5337,22 +5454,22 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         [indicator_ setStyle:style];
         [overlay_ addSubview:indicator_];
 
-        CGSize prmsize = {200, indsize.width + 4};
+        CGSize prmsize = {215, indsize.height + 4};
 
         CGRect prmrect = {{
             indoffset * 2 + indsize.width,
 #ifdef __OBJC2__
             -1 +
 #endif
-            (ovrrect.size.height - prmsize.height) / 2
+            unsigned(ovrrect.size.height - prmsize.height) / 2
         }, prmsize};
 
-        UIFont *font = [UIFont systemFontOfSize:12];
+        UIFont *font = [UIFont systemFontOfSize:15];
 
         prompt_ = [[UITextLabel alloc] initWithFrame:prmrect];
 
-        [prompt_ setColor:[UIColor colorWithCGColor:(ugly ? Blueish_ : White_)]];
-        [prompt_ setBackgroundColor:[UIColor colorWithCGColor:Clear_]];
+        [prompt_ setColor:[UIColor colorWithCGColor:(ugly ? Blueish_ : Off_)]];
+        [prompt_ setBackgroundColor:[UIColor clearColor]];
         [prompt_ setFont:font];
 
         [overlay_ addSubview:prompt_];
@@ -5367,9 +5484,25 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         progress_ = [[UIProgressBar alloc] initWithFrame:prgrect];
         [progress_ setStyle:0];
         [overlay_ addSubview:progress_];
+
+        cancel_ = [[UINavigationButton alloc] initWithTitle:@"Cancel" style:UINavigationButtonStyleHighlighted];
+        [cancel_ addTarget:self action:@selector(_onCancel) forControlEvents:UIControlEventTouchUpInside];
+
+        CGRect frame = [cancel_ frame];
+        frame.size.width = 65;
+        frame.origin.x = ovrrect.size.width - frame.size.width - 5;
+        frame.origin.y = (ovrrect.size.height - frame.size.height) / 2;
+        [cancel_ setFrame:frame];
+
+        [cancel_ setBarStyle:barstyle];
     } return self;
 }
 
+- (void) _onCancel {
+    updating_ = false;
+    [cancel_ removeFromSuperview];
+}
+
 - (void) _update {
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 
@@ -5400,6 +5533,14 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 }
 
 - (void) setProgressPercent:(float)percent {
+    [self
+        performSelectorOnMainThread:@selector(_setProgressPercent:)
+        withObject:[NSNumber numberWithFloat:percent]
+        waitUntilDone:YES
+    ];
+}
+
+- (void) startProgress {
 }
 
 - (void) addProgressOutput:(NSString *)output {
@@ -5410,12 +5551,26 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     ];
 }
 
+- (bool) isCancelling:(size_t)received {
+    NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate];
+    if (received_ != received) {
+        received_ = received;
+        last_ = now;
+    } else if (now - last_ > 15)
+        return true;
+    return !updating_;
+}
+
 - (void) alertSheet:(UIActionSheet *)sheet buttonClicked:(int)button {
     [sheet dismiss];
 }
 
 - (void) _setProgressTitle:(NSString *)title {
-    [prompt_ setText:[title stringByAppendingString:@"..."]];
+    [prompt_ setText:title];
+}
+
+- (void) _setProgressPercent:(NSNumber *)percent {
+    [progress_ setProgress:[percent floatValue]];
 }
 
 - (void) _addProgressOutput:(NSString *)output {
@@ -5594,7 +5749,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         detachNewThreadSelector:@selector(update_)
         toTarget:self
         withObject:nil
-        title:@"Updating Sources..."
+        title:@"Updating Sources"
     ];
 }
 
@@ -5682,7 +5837,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         detachNewThreadSelector:@selector(perform)
         toTarget:database_
         withObject:nil
-        title:@"Running..."
+        title:@"Running"
     ];
 }
 
@@ -5698,7 +5853,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         detachNewThreadSelector:@selector(bootstrap_)
         toTarget:self
         withObject:nil
-        title:@"Bootstrap Install..."
+        title:@"Bootstrap Install"
     ];
 }
 
@@ -6285,6 +6440,8 @@ int main(int argc, char *argv[]) {
         [Metadata_ setObject:Sources_ forKey:@"Sources"];
     }
 
+    Documents_ = [[[NSMutableArray alloc] initWithCapacity:4] autorelease];
+
     if (access("/Library/MobileSubstrate/MobileSubstrate.dylib", F_OK) == 0)
         dlopen("/Library/MobileSubstrate/MobileSubstrate.dylib", RTLD_LAZY | RTLD_GLOBAL);
 
@@ -6297,7 +6454,7 @@ int main(int argc, char *argv[]) {
     Blue_.Set(space_, 0.2, 0.2, 1.0, 1.0);
     Blueish_.Set(space_, 0x19/255.f, 0x32/255.f, 0x50/255.f, 1.0);
     Black_.Set(space_, 0.0, 0.0, 0.0, 1.0);
-    Clear_.Set(space_, 0.0, 0.0, 0.0, 0.0);
+    Off_.Set(space_, 0.9, 0.9, 0.9, 1.0);
     Red_.Set(space_, 1.0, 0.0, 0.0, 1.0);
     White_.Set(space_, 1.0, 1.0, 1.0, 1.0);
     Gray_.Set(space_, 0.4, 0.4, 0.4, 1.0);
index 6763d1d5931cb10a1a08a07da3f447ddca80975a..840ce38b4ec5427c4f43c85e77359593fbcbe50d 100644 (file)
--- a/makefile
+++ b/makefile
@@ -23,7 +23,7 @@ exec: exec.mm makefile
        $(target)g++ -Wall -Werror -o $@ $< -framework Foundation -framework CoreFoundation -lobjc
 
 Cydia: Cydia.mm ../uicaboodle.m/*.mm *.h makefile
-       $(target)g++ -march=armv6 -mcpu=arm1176jzf-s -I../uicaboodle.m -fobjc-call-cxx-cdtors -g0 -O2 -Wall -Werror -o $@ $(filter %.mm,$^) -framework UIKit -framework IOKit -framework CoreFoundation -framework Foundation -framework CoreGraphics -framework GraphicsServices $(frameworks) -lobjc -lapt-pkg -lpcre -fobjc-exceptions -I/apl/inc/iPhoneOS-2.0 -F"$${PKG_ROOT}"/System/Library/PrivateFrameworks
+       $(target)g++ -march=armv6 -mcpu=arm1176jzf-s -I../uicaboodle.m -fobjc-call-cxx-cdtors -g0 -O2 -Wall -Werror -o $@ $(filter %.mm,$^) -framework UIKit -framework IOKit -framework CoreFoundation -framework Foundation -framework CoreGraphics -framework GraphicsServices $(frameworks) -lobjc -lapt-pkg -lpcre -fobjc-exceptions -F"$${PKG_ROOT}"/System/Library/PrivateFrameworks
 
 sign: Cydia
        CODESIGN_ALLOCATE=$$(which "$(target)codesign_allocate") /apl/tel/util/ldid -S Cydia