From 61b13caefc3d60ef39eb3a572dc6a090d6424b2b Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Tue, 16 Jun 2009 07:06:48 +0000 Subject: [PATCH] We prefer this factoring. --- Cydia.app/English.lproj/Localizable.strings | 2 + Cydia.mm | 624 ++++++++++++------- UICaboodle/BrowserView.h | 14 +- UICaboodle/{BrowserView.m => BrowserView.mm} | 346 +++------- UICaboodle/UCLocalize.h | 12 + control | 2 +- makefile | 2 +- 7 files changed, 516 insertions(+), 486 deletions(-) rename UICaboodle/{BrowserView.m => BrowserView.mm} (82%) create mode 100644 UICaboodle/UCLocalize.h diff --git a/Cydia.app/English.lproj/Localizable.strings b/Cydia.app/English.lproj/Localizable.strings index 3ccfa62f..421b6c6e 100644 --- a/Cydia.app/English.lproj/Localizable.strings +++ b/Cydia.app/English.lproj/Localizable.strings @@ -105,6 +105,7 @@ "NEW" = "New"; "NEW_AT" = "New at %@"; "NEW_INSTALL" = "New Install"; +"NO" = "No"; "NO_SECTION" = "(No Section)"; "NOT_RATED" = "Not Rated"; "NODE" = "Note"; @@ -195,3 +196,4 @@ "VERSION" = "Version"; "WELCOME_TO_CYDIA" = "Welcome to Cydia™"; "WHO_ARE_YOU" = "Who Are You?"; +"YES" = "Yes"; diff --git a/Cydia.mm b/Cydia.mm index e069dd7f..7863dc85 100644 --- a/Cydia.mm +++ b/Cydia.mm @@ -40,6 +40,7 @@ /* #include Directives {{{ */ #import "UICaboodle.h" +#import "UCLocalize.h" #include #include @@ -58,7 +59,6 @@ #include #include -#import #import #include @@ -344,8 +344,6 @@ static const CFStringCompareFlags LaxCompareFlags_ = kCFCompareCaseInsensitive | #endif /* }}} */ -extern NSString * const kCAFilterNearest; - /* Information Dictionaries {{{ */ @interface NSMutableArray (Cydia) - (void) addInfoDictionary:(NSDictionary *)info; @@ -756,12 +754,6 @@ NSUInteger DOMNodeList$countByEnumeratingWithState$objects$count$(DOMNodeList *s @end -static inline NSString *CYLocalizeEx(NSString *key, NSString *value = nil) { - return [[NSBundle mainBundle] localizedStringForKey:key value:value table:nil]; -} - -#define CYLocalize(key) CYLocalizeEx(@ key) - class CYString { private: char *data_; @@ -1113,7 +1105,7 @@ NSString *GetLastUpdate() { NSDate *update = [Metadata_ objectForKey:@"LastUpdate"]; if (update == nil) - return CYLocalize("NEVER_OR_UNKNOWN"); + return UCLocalize("NEVER_OR_UNKNOWN"); CFDateFormatterRef formatter = CFDateFormatterCreate(NULL, Locale_, kCFDateFormatterMediumStyle, kCFDateFormatterMediumStyle); CFStringRef formatted = CFDateFormatterCreateStringWithDate(NULL, formatter, (CFDateRef) update); @@ -1171,7 +1163,7 @@ NSString *LocalizeSection(NSString *section) { NSString *parent(title_r[1]); NSString *child(title_r[2]); - return [NSString stringWithFormat:CYLocalize("PARENTHETICAL"), + return [NSString stringWithFormat:UCLocalize("PARENTHETICAL"), LocalizeSection(parent), LocalizeSection(child) ]; @@ -1252,10 +1244,7 @@ bool isSectionVisible(NSString *section) { - (void) askForSettings; - (UIProgressHUD *) addProgressHUD; - (void) removeProgressHUD:(UIProgressHUD *)hud; -- (RVPage *) pageForURL:(NSURL *)url hasTag:(int *)tag; - (RVPage *) pageForPackage:(NSString *)name; -- (void) openMailToURL:(NSURL *)url; -- (void) clearFirstResponder; - (PackageView *) packageView; @end /* }}} */ @@ -2503,7 +2492,7 @@ struct PackageNameOrdering : size_t length(strlen(name)); if (length < 2) invalid: - [warnings addObject:CYLocalize("ILLEGAL_PACKAGE_IDENTIFIER")]; + [warnings addObject:UCLocalize("ILLEGAL_PACKAGE_IDENTIFIER")]; else for (size_t i(0); i != length; ++i) if ( /* XXX: technically this is not allowed */ @@ -2531,11 +2520,11 @@ struct PackageNameOrdering : /* XXX: this is not sensitive enough. only some folders are valid. */ if (cydia && !repository) - [warnings addObject:[NSString stringWithFormat:CYLocalize("FILES_INSTALLED_TO"), @"Cydia.app"]]; + [warnings addObject:[NSString stringWithFormat:UCLocalize("FILES_INSTALLED_TO"), @"Cydia.app"]]; if (_private) - [warnings addObject:[NSString stringWithFormat:CYLocalize("FILES_INSTALLED_TO"), @"/private"]]; + [warnings addObject:[NSString stringWithFormat:UCLocalize("FILES_INSTALLED_TO"), @"/private"]]; if (stash) - [warnings addObject:[NSString stringWithFormat:CYLocalize("FILES_INSTALLED_TO"), @"/var/stash"]]; + [warnings addObject:[NSString stringWithFormat:UCLocalize("FILES_INSTALLED_TO"), @"/var/stash"]]; } return [warnings count] == 0 ? nil : warnings; @@ -3520,100 +3509,297 @@ static NSArray *Finishes_; @end /* }}} */ -#if 0 -/* Mail Composition {{{ */ -@interface MailToView : PopUpView { - MailComposeController *controller_; +/* Confirmation View {{{ */ +bool DepSubstrate(const pkgCache::VerIterator &iterator) { + if (!iterator.end()) + for (pkgCache::DepIterator dep(iterator.DependsList()); !dep.end(); ++dep) { + if (dep->Type != pkgCache::Dep::Depends && dep->Type != pkgCache::Dep::PreDepends) + continue; + pkgCache::PkgIterator package(dep.TargetPkg()); + if (package.end()) + continue; + if (strcmp(package.Name(), "mobilesubstrate") == 0) + return true; + } + + return false; } -- (id) initWithView:(UIView *)view delegate:(id)delegate url:(NSURL *)url; +/* Web Scripting {{{ */ +@interface CydiaObject : NSObject { + id indirect_; +} +- (id) initWithDelegate:(IndirectDelegate *)indirect; @end -@implementation MailToView +@implementation CydiaObject - (void) dealloc { - [controller_ release]; + [indirect_ release]; [super dealloc]; } -- (void) mailComposeControllerWillAttemptToSend:(MailComposeController *)controller { - NSLog(@"will"); +- (id) initWithDelegate:(IndirectDelegate *)indirect { + if ((self = [super init]) != nil) { + indirect_ = [indirect retain]; + } return self; +} + ++ (NSArray *) _attributeKeys { + return [NSArray arrayWithObjects:@"device", @"firewire", @"imei", @"mac", @"serial", nil]; +} + +- (NSArray *) attributeKeys { + return [[self class] _attributeKeys]; } -- (void) mailComposeControllerDidAttemptToSend:(MailComposeController *)controller mailDelivery:(id)delivery { - NSLog(@"did:%@", delivery); -// [UIApp setStatusBarShowsProgress:NO]; -if ([controller error]){ -NSArray *buttons = [NSArray arrayWithObjects:CYLocalize("OK"), nil]; -UIActionSheet *mailAlertSheet = [[UIActionSheet alloc] initWithTitle:CYLocalize("ERROR") buttons:buttons defaultButtonIndex:0 delegate:self context:self]; -[mailAlertSheet setBodyText:[controller error]]; -[mailAlertSheet popupAlertAnimated:YES]; ++ (BOOL) isKeyExcludedFromWebScript:(const char *)name { + return ![[self _attributeKeys] containsObject:[NSString stringWithUTF8String:name]] && [super isKeyExcludedFromWebScript:name]; } + +- (NSString *) device { + return [[UIDevice currentDevice] uniqueIdentifier]; } -- (void) showError { - NSLog(@"%@", [controller_ error]); - NSArray *buttons = [NSArray arrayWithObjects:CYLocalize("OK"), nil]; - UIActionSheet *mailAlertSheet = [[UIActionSheet alloc] initWithTitle:CYLocalize("ERROR") buttons:buttons defaultButtonIndex:0 delegate:self context:self]; - [mailAlertSheet setBodyText:[controller_ error]]; - [mailAlertSheet popupAlertAnimated:YES]; +#if 0 // XXX: implement! +- (NSString *) mac { + if (![indirect_ promptForSensitive:@"Mac Address"]) + return nil; } -- (void) deliverMessage { _pooled - setuid(501); - setgid(501); +- (NSString *) serial { + if (![indirect_ promptForSensitive:@"Serial #"]) + return nil; +} - if (![controller_ deliverMessage]) - [self performSelectorOnMainThread:@selector(showError) withObject:nil waitUntilDone:NO]; +- (NSString *) firewire { + if (![indirect_ promptForSensitive:@"Firewire GUID"]) + return nil; } -- (void) mailComposeControllerCompositionFinished:(MailComposeController *)controller { - if ([controller_ needsDelivery]) - [NSThread detachNewThreadSelector:@selector(deliverMessage) toTarget:self withObject:nil]; +- (NSString *) imei { + if (![indirect_ promptForSensitive:@"IMEI"]) + return nil; +} +#endif + ++ (NSString *) webScriptNameForSelector:(SEL)selector { + if (selector == @selector(close)) + return @"close"; + else if (selector == @selector(getPackageById:)) + return @"getPackageById"; + else if (selector == @selector(setAutoPopup:)) + return @"setAutoPopup"; + else if (selector == @selector(setButtonImage:withStyle:toFunction:)) + return @"setButtonImage"; + else if (selector == @selector(setButtonTitle:withStyle:toFunction:)) + return @"setButtonTitle"; + else if (selector == @selector(setFinishHook:)) + return @"setFinishHook"; + else if (selector == @selector(setPopupHook:)) + return @"setPopupHook"; + else if (selector == @selector(setSpecial:)) + return @"setSpecial"; + else if (selector == @selector(setViewportWidth:)) + return @"setViewportWidth"; + else if (selector == @selector(supports:)) + return @"supports"; + else if (selector == @selector(stringWithFormat:arguments:)) + return @"format"; + else if (selector == @selector(localizedStringForKey:value:table:)) + return @"localize"; + else if (selector == @selector(du:)) + return @"du"; + else if (selector == @selector(statfs:)) + return @"statfs"; else - [self cancel]; + return nil; +} + ++ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector { + return [self webScriptNameForSelector:selector] == nil; } -- (id) initWithView:(UIView *)view delegate:(id)delegate url:(NSURL *)url { - if ((self = [super initWithView:view delegate:delegate]) != nil) { - controller_ = [[MailComposeController alloc] initForContentSize:[overlay_ bounds].size]; - [controller_ setDelegate:self]; - [controller_ initializeUI]; - [controller_ setupForURL:url]; +- (BOOL) supports:(NSString *)feature { + return [feature isEqualToString:@"window.open"]; +} - UIView *view([controller_ view]); - [overlay_ addSubview:view]; - } return self; +- (Package *) getPackageById:(NSString *)id { + return [[Database sharedInstance] packageWithName:id]; +} + +- (NSArray *) statfs:(NSString *)path { + struct statfs stat; + + if (path == nil || statfs([path UTF8String], &stat) == -1) + return nil; + + return [NSArray arrayWithObjects: + [NSNumber numberWithUnsignedLong:stat.f_bsize], + [NSNumber numberWithUnsignedLong:stat.f_blocks], + [NSNumber numberWithUnsignedLong:stat.f_bfree], + nil]; +} + +- (NSNumber *) du:(NSString *)path { + NSNumber *value(nil); + + int fds[2]; + _assert(pipe(fds) != -1); + + pid_t pid(ExecFork()); + if (pid == 0) { + _assert(dup2(fds[1], 1) != -1); + _assert(close(fds[0]) != -1); + _assert(close(fds[1]) != -1); + /* XXX: this should probably not use du */ + execl("/usr/libexec/cydia/du", "du", "-s", [path UTF8String], NULL); + exit(1); + _assert(false); + } + + _assert(close(fds[1]) != -1); + + if (FILE *du = fdopen(fds[0], "r")) { + char line[1024]; + while (fgets(line, sizeof(line), du) != NULL) { + size_t length(strlen(line)); + while (length != 0 && line[length - 1] == '\n') + line[--length] = '\0'; + if (char *tab = strchr(line, '\t')) { + *tab = '\0'; + value = [NSNumber numberWithUnsignedLong:strtoul(line, NULL, 0)]; + } + } + + fclose(du); + } else _assert(close(fds[0])); + + int status; + wait: + if (waitpid(pid, &status, 0) == -1) + if (errno == EINTR) + goto wait; + else _assert(false); + + return value; +} + +- (void) close { + [indirect_ close]; +} + +- (void) setAutoPopup:(BOOL)popup { + [indirect_ setAutoPopup:popup]; +} + +- (void) setButtonImage:(NSString *)button withStyle:(NSString *)style toFunction:(id)function { + [indirect_ setButtonImage:button withStyle:style toFunction:function]; +} + +- (void) setButtonTitle:(NSString *)button withStyle:(NSString *)style toFunction:(id)function { + [indirect_ setButtonTitle:button withStyle:style toFunction:function]; +} + +- (void) setSpecial:(id)function { + [indirect_ setSpecial:function]; +} + +- (void) setFinishHook:(id)function { + [indirect_ setFinishHook:function]; +} + +- (void) setPopupHook:(id)function { + [indirect_ setPopupHook:function]; +} + +- (void) setViewportWidth:(float)width { + [indirect_ setViewportWidth:width]; +} + +- (NSString *) stringWithFormat:(NSString *)format arguments:(WebScriptObject *)arguments { + //NSLog(@"SWF:\"%@\" A:%@", format, [arguments description]); + unsigned count([arguments count]); + id values[count]; + for (unsigned i(0); i != count; ++i) + values[i] = [arguments objectAtIndex:i]; + return [[[NSString alloc] initWithFormat:format arguments:reinterpret_cast(values)] autorelease]; +} + +- (NSString *) localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)table { + if (reinterpret_cast(table) == [WebUndefined undefined]) + table = nil; + return [[NSBundle mainBundle] localizedStringForKey:key value:value table:table]; } @end /* }}} */ -#endif -/* Confirmation View {{{ */ -bool DepSubstrate(const pkgCache::VerIterator &iterator) { - if (!iterator.end()) - for (pkgCache::DepIterator dep(iterator.DependsList()); !dep.end(); ++dep) { - if (dep->Type != pkgCache::Dep::Depends && dep->Type != pkgCache::Dep::PreDepends) - continue; - pkgCache::PkgIterator package(dep.TargetPkg()); - if (package.end()) - continue; - if (strcmp(package.Name(), "mobilesubstrate") == 0) - return true; - } +@interface CydiaBrowserView : BrowserView { + CydiaObject *cydia_; +} - return false; +@end + +@implementation CydiaBrowserView + +- (void) dealloc { + [cydia_ release]; + [super dealloc]; +} + +- (void) webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)window forFrame:(WebFrame *)frame { + [super webView:sender didClearWindowObject:window forFrame:frame]; + [window setValue:cydia_ forKey:@"cydia"]; +} + +- (NSURLRequest *) webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)source { + NSMutableURLRequest *copy = [request mutableCopy]; + + if (Machine_ != NULL) + [copy setValue:[NSString stringWithUTF8String:Machine_] forHTTPHeaderField:@"X-Machine"]; + if (UniqueID_ != nil) + [copy setValue:UniqueID_ forHTTPHeaderField:@"X-Unique-ID"]; + + if (Role_ != nil) + [copy setValue:Role_ forHTTPHeaderField:@"X-Role"]; + + return copy; } +- (id) initWithBook:(RVBook *)book forWidth:(float)width { + if ((self = [super initWithBook:book]) != nil) { + cydia_ = [[CydiaObject alloc] initWithDelegate:indirect_]; + + WebView *webview([webview_ webView]); + + Package *package([[Database sharedInstance] packageWithName:@"cydia"]); + NSString *application = package == nil ? @"Cydia" : [NSString + stringWithFormat:@"Cydia/%@", + [package installed] + ]; + + if (Product_ != nil) + application = [NSString stringWithFormat:@"%@ Version/%@", application, Product_]; + if (Build_ != nil) + application = [NSString stringWithFormat:@"%@ Mobile/%@", application, Build_]; + if (Safari_ != nil) + application = [NSString stringWithFormat:@"%@ Safari/%@", application, Safari_]; + + [webview setApplicationNameForUserAgent:application]; + } return self; +} + +@end + @protocol ConfirmationViewDelegate - (void) cancel; - (void) confirm; - (void) queue; @end -@interface ConfirmationView : BrowserView { +@interface ConfirmationView : CydiaBrowserView { _transient Database *database_; UIActionSheet *essential_; NSArray *changes_; @@ -3718,13 +3904,13 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { if (!remove) essential_ = nil; else if (Advanced_ || true) { - NSString *parenthetical(CYLocalize("PARENTHETICAL")); + NSString *parenthetical(UCLocalize("PARENTHETICAL")); essential_ = [[UIActionSheet alloc] - initWithTitle:CYLocalize("REMOVING_ESSENTIALS") + initWithTitle:UCLocalize("REMOVING_ESSENTIALS") buttons:[NSArray arrayWithObjects: - [NSString stringWithFormat:parenthetical, CYLocalize("CANCEL_OPERATION"), CYLocalize("SAFE")], - [NSString stringWithFormat:parenthetical, CYLocalize("FORCE_REMOVAL"), CYLocalize("UNSAFE")], + [NSString stringWithFormat:parenthetical, UCLocalize("CANCEL_OPERATION"), UCLocalize("SAFE")], + [NSString stringWithFormat:parenthetical, UCLocalize("FORCE_REMOVAL"), UCLocalize("UNSAFE")], nil] defaultButtonIndex:0 delegate:self @@ -3734,17 +3920,17 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { #ifndef __OBJC2__ [essential_ setDestructiveButton:[[essential_ buttons] objectAtIndex:0]]; #endif - [essential_ setBodyText:CYLocalize("REMOVING_ESSENTIALS_EX")]; + [essential_ setBodyText:UCLocalize("REMOVING_ESSENTIALS_EX")]; } else { essential_ = [[UIActionSheet alloc] - initWithTitle:CYLocalize("UNABLE_TO_COMPLY") - buttons:[NSArray arrayWithObjects:CYLocalize("OKAY"), nil] + initWithTitle:UCLocalize("UNABLE_TO_COMPLY") + buttons:[NSArray arrayWithObjects:UCLocalize("OKAY"), nil] defaultButtonIndex:0 delegate:self context:@"unable" ]; - [essential_ setBodyText:CYLocalize("UNABLE_TO_COMPLY_EX")]; + [essential_ setBodyText:UCLocalize("UNABLE_TO_COMPLY_EX")]; } changes_ = [[NSArray alloc] initWithObjects: @@ -3770,11 +3956,11 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (NSString *) backButtonTitle { - return CYLocalize("CONFIRM"); + return UCLocalize("CONFIRM"); } - (NSString *) leftButtonTitle { - return [NSString stringWithFormat:CYLocalize("SLASH_DELIMITED"), CYLocalize("CANCEL"), CYLocalize("QUEUE")]; + return [NSString stringWithFormat:UCLocalize("SLASH_DELIMITED"), UCLocalize("CANCEL"), UCLocalize("QUEUE")]; } - (id) rightButtonTitle { @@ -3785,7 +3971,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { #if AlwaysReload || IgnoreInstall return [super _rightButtonTitle]; #else - return CYLocalize("CONFIRM"); + return UCLocalize("CONFIRM"); #endif } @@ -4026,8 +4212,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { _assert(false); UIActionSheet *sheet = [[[UIActionSheet alloc] - initWithTitle:CYLocalize("ERROR") - buttons:[NSArray arrayWithObjects:CYLocalize("OKAY"), nil] + initWithTitle:UCLocalize("ERROR") + buttons:[NSArray arrayWithObjects:UCLocalize("OKAY"), nil] defaultButtonIndex:0 delegate:self context:@"_error" @@ -4068,11 +4254,11 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } switch (Finish_) { - case 0: [close_ setTitle:CYLocalize("RETURN_TO_CYDIA")]; break; - case 1: [close_ setTitle:CYLocalize("CLOSE_CYDIA")]; break; - case 2: [close_ setTitle:CYLocalize("RESTART_SPRINGBOARD")]; break; - case 3: [close_ setTitle:CYLocalize("RELOAD_SPRINGBOARD")]; break; - case 4: [close_ setTitle:CYLocalize("REBOOT_DEVICE")]; break; + case 0: [close_ setTitle:UCLocalize("RETURN_TO_CYDIA")]; break; + case 1: [close_ setTitle:UCLocalize("CLOSE_CYDIA")]; break; + case 2: [close_ setTitle:UCLocalize("RESTART_SPRINGBOARD")]; break; + case 3: [close_ setTitle:UCLocalize("RELOAD_SPRINGBOARD")]; break; + case 4: [close_ setTitle:UCLocalize("REBOOT_DEVICE")]; break; } #define Cache_ "/User/Library/Caches/com.apple.mobile.installation.plist" @@ -4181,7 +4367,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { - (void) _retachThread { UINavigationItem *item = [navbar_ topItem]; - [item setTitle:CYLocalize("COMPLETE")]; + [item setTitle:UCLocalize("COMPLETE")]; [overlay_ addSubview:close_]; [progress_ removeFromSuperview]; @@ -4254,7 +4440,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { detachNewThreadSelector:selector toTarget:database_ withObject:nil - title:CYLocalize("REPAIRING") + title:UCLocalize("REPAIRING") ]; } @@ -4271,7 +4457,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { UIActionSheet *sheet = [[[UIActionSheet alloc] initWithTitle:(package == nil ? id : [package name]) - buttons:[NSArray arrayWithObjects:CYLocalize("OKAY"), nil] + buttons:[NSArray arrayWithObjects:UCLocalize("OKAY"), nil] defaultButtonIndex:0 delegate:self context:@"error" @@ -4321,18 +4507,18 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { //NSString *nfile = conffile_r[2]; UIActionSheet *sheet = [[[UIActionSheet alloc] - initWithTitle:CYLocalize("CONFIGURATION_UPGRADE") + initWithTitle:UCLocalize("CONFIGURATION_UPGRADE") buttons:[NSArray arrayWithObjects: - CYLocalize("KEEP_OLD_COPY"), - CYLocalize("ACCEPT_NEW_COPY"), - // XXX: CYLocalize("SEE_WHAT_CHANGED"), + UCLocalize("KEEP_OLD_COPY"), + UCLocalize("ACCEPT_NEW_COPY"), + // XXX: UCLocalize("SEE_WHAT_CHANGED"), nil] defaultButtonIndex:0 delegate:self context:@"conffile" ] autorelease]; - [sheet setBodyText:[NSString stringWithFormat:@"%@\n\n%@", CYLocalize("CONFIGURATION_UPGRADE_EX"), ofile]]; + [sheet setBodyText:[NSString stringWithFormat:@"%@\n\n%@", UCLocalize("CONFIGURATION_UPGRADE_EX"), ofile]]; [sheet popupAlertAnimated:YES]; } @@ -4457,19 +4643,19 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { label = [source label]; trusted = [source trusted]; } else if ([[package id] isEqualToString:@"firmware"]) - label = CYLocalize("APPLE"); + label = UCLocalize("APPLE"); else - label = [NSString stringWithFormat:CYLocalize("SLASH_DELIMITED"), CYLocalize("UNKNOWN"), CYLocalize("LOCAL")]; + label = [NSString stringWithFormat:UCLocalize("SLASH_DELIMITED"), UCLocalize("UNKNOWN"), UCLocalize("LOCAL")]; NSString *from(label); NSString *section = [package simpleSection]; if (section != nil && ![section isEqualToString:label]) { section = [[NSBundle mainBundle] localizedStringForKey:section value:nil table:@"Sections"]; - from = [NSString stringWithFormat:CYLocalize("PARENTHETICAL"), from, section]; + from = [NSString stringWithFormat:UCLocalize("PARENTHETICAL"), from, section]; } - from = [NSString stringWithFormat:CYLocalize("FROM"), from]; + from = [NSString stringWithFormat:UCLocalize("FROM"), from]; source_ = [from retain]; if (NSString *purpose = [package primaryPurpose]) @@ -4482,11 +4668,11 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [mode isEqualToString:@"REMOVE"] || [mode isEqualToString:@"PURGE"] ? @"removing.png" : @"installing.png" ]]; - [status_ setText:[NSString stringWithFormat:CYLocalize("QUEUED_FOR"), CYLocalize(mode)]]; + [status_ setText:[NSString stringWithFormat:UCLocalize("QUEUED_FOR"), UCLocalize(mode)]]; [status_ setColor:[UIColor colorWithCGColor:Blueish_]]; } else if ([package half]) { [badge_ setImage:[UIImage applicationImageNamed:@"damaged.png"]]; - [status_ setText:CYLocalize("PACKAGE_DAMAGED")]; + [status_ setText:UCLocalize("PACKAGE_DAMAGED")]; [status_ setColor:[UIColor redColor]]; } else { [badge_ setImage:nil]; @@ -4648,13 +4834,13 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [self clearSection]; if (section == nil) { - name_ = [CYLocalize("ALL_PACKAGES") retain]; + name_ = [UCLocalize("ALL_PACKAGES") retain]; count_ = nil; } else { section_ = [section localized]; if (section_ != nil) section_ = [section_ retain]; - name_ = [(section_ == nil || [section_ length] == 0 ? CYLocalize("NO_SECTION") : section_) retain]; + name_ = [(section_ == nil || [section_ length] == 0 ? UCLocalize("NO_SECTION") : section_) retain]; count_ = [[NSString stringWithFormat:@"%d", [section count]] retain]; if (editing_) @@ -4742,7 +4928,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [self addSubview:list_]; UITableColumn *column = [[[UITableColumn alloc] - initWithTitle:CYLocalize("NAME") + initWithTitle:UCLocalize("NAME") identifier:@"name" width:[self frame].size.width ] autorelease]; @@ -4810,17 +4996,17 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (NSString *) title { - return CYLocalize("INSTALLED_FILES"); + return UCLocalize("INSTALLED_FILES"); } - (NSString *) backButtonTitle { - return CYLocalize("FILES"); + return UCLocalize("FILES"); } @end /* }}} */ /* Package View {{{ */ -@interface PackageView : BrowserView { +@interface PackageView : CydiaBrowserView { _transient Database *database_; Package *package_; NSString *name_; @@ -4852,15 +5038,15 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { /* XXX: this is not safe at all... localization of /fail/ */ - (void) _clickButtonWithName:(NSString *)name { - if ([name isEqualToString:CYLocalize("CLEAR")]) + if ([name isEqualToString:UCLocalize("CLEAR")]) [delegate_ clearPackage:package_]; - else if ([name isEqualToString:CYLocalize("INSTALL")]) + else if ([name isEqualToString:UCLocalize("INSTALL")]) [delegate_ installPackage:package_]; - else if ([name isEqualToString:CYLocalize("REINSTALL")]) + else if ([name isEqualToString:UCLocalize("REINSTALL")]) [delegate_ installPackage:package_]; - else if ([name isEqualToString:CYLocalize("REMOVE")]) + else if ([name isEqualToString:UCLocalize("REMOVE")]) [delegate_ removePackage:package_]; - else if ([name isEqualToString:CYLocalize("UPGRADE")]) + else if ([name isEqualToString:UCLocalize("UPGRADE")]) [delegate_ installPackage:package_]; else _assert(false); } @@ -4904,7 +5090,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { else { NSMutableArray *buttons = [NSMutableArray arrayWithCapacity:(count + 1)]; [buttons addObjectsFromArray:buttons_]; - [buttons addObject:CYLocalize("CANCEL")]; + [buttons addObject:UCLocalize("CANCEL")]; [delegate_ slideUp:[[[UIActionSheet alloc] initWithTitle:nil @@ -4926,7 +5112,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { - (id) _rightButtonTitle { int count = [buttons_ count]; - return count == 0 ? nil : count != 1 ? CYLocalize("MODIFY") : [buttons_ objectAtIndex:0]; + return count == 0 ? nil : count != 1 ? UCLocalize("MODIFY") : [buttons_ objectAtIndex:0]; } - (NSString *) backButtonTitle { @@ -4962,16 +5148,16 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { commercial_ = [package isCommercial]; if ([package_ mode] != nil) - [buttons_ addObject:CYLocalize("CLEAR")]; + [buttons_ addObject:UCLocalize("CLEAR")]; if ([package_ source] == nil); else if ([package_ upgradableAndEssential:NO]) - [buttons_ addObject:CYLocalize("UPGRADE")]; + [buttons_ addObject:UCLocalize("UPGRADE")]; else if ([package_ uninstalled]) - [buttons_ addObject:CYLocalize("INSTALL")]; + [buttons_ addObject:UCLocalize("INSTALL")]; else - [buttons_ addObject:CYLocalize("REINSTALL")]; + [buttons_ addObject:UCLocalize("REINSTALL")]; if (![package_ uninstalled]) - [buttons_ addObject:CYLocalize("REMOVE")]; + [buttons_ addObject:UCLocalize("REMOVE")]; if (special_ != NULL) { CGRect frame([webview_ frame]); @@ -5098,7 +5284,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [list_ setDataSource:self]; UITableColumn *column = [[[UITableColumn alloc] - initWithTitle:CYLocalize("NAME") + initWithTitle:UCLocalize("NAME") identifier:@"name" width:[self frame].size.width ] autorelease]; @@ -5385,8 +5571,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { - (NSString *) sectionList:(UISectionList *)list titleForSection:(int)section { switch (section + (offset_ == 0 ? 1 : 0)) { - case 0: return CYLocalize("ENTERED_BY_USER"); - case 1: return CYLocalize("INSTALLED_BY_PACKAGE"); + case 0: return UCLocalize("ENTERED_BY_USER"); + case 1: return UCLocalize("INSTALLED_BY_PACKAGE"); default: _assert(false); @@ -5514,8 +5700,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { defer = true; UIActionSheet *sheet = [[[UIActionSheet alloc] - initWithTitle:CYLocalize("SOURCE_WARNING") - buttons:[NSArray arrayWithObjects:CYLocalize("ADD_ANYWAY"), CYLocalize("CANCEL"), nil] + initWithTitle:UCLocalize("SOURCE_WARNING") + buttons:[NSArray arrayWithObjects:UCLocalize("ADD_ANYWAY"), UCLocalize("CANCEL"), nil] defaultButtonIndex:0 delegate:self context:@"warning" @@ -5529,8 +5715,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [self complete]; } else if (error_ != nil) { UIActionSheet *sheet = [[[UIActionSheet alloc] - initWithTitle:CYLocalize("VERIFICATION_ERROR") - buttons:[NSArray arrayWithObjects:CYLocalize("OK"), nil] + initWithTitle:UCLocalize("VERIFICATION_ERROR") + buttons:[NSArray arrayWithObjects:UCLocalize("OK"), nil] defaultButtonIndex:0 delegate:self context:@"urlerror" @@ -5540,14 +5726,14 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [sheet popupAlertAnimated:YES]; } else { UIActionSheet *sheet = [[[UIActionSheet alloc] - initWithTitle:CYLocalize("NOT_REPOSITORY") - buttons:[NSArray arrayWithObjects:CYLocalize("OK"), nil] + initWithTitle:UCLocalize("NOT_REPOSITORY") + buttons:[NSArray arrayWithObjects:UCLocalize("OK"), nil] defaultButtonIndex:0 delegate:self context:@"trivial" ] autorelease]; - [sheet setBodyText:CYLocalize("NOT_REPOSITORY_EX")]; + [sheet setBodyText:UCLocalize("NOT_REPOSITORY_EX")]; [sheet popupAlertAnimated:YES]; } @@ -5630,7 +5816,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { trivial_ = false; hud_ = [[delegate_ addProgressHUD] retain]; - [hud_ setText:CYLocalize("VERIFYING_URL")]; + [hud_ setText:UCLocalize("VERIFYING_URL")]; } break; case 2: @@ -5678,7 +5864,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [list_ setDataSource:self]; UITableColumn *column = [[UITableColumn alloc] - initWithTitle:CYLocalize("NAME") + initWithTitle:UCLocalize("NAME") identifier:@"name" width:[self frame].size.width ]; @@ -5726,8 +5912,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { ] autorelease]];*/ UIActionSheet *sheet = [[[UIActionSheet alloc] - initWithTitle:CYLocalize("ENTER_APT_URL") - buttons:[NSArray arrayWithObjects:CYLocalize("ADD_SOURCE"), CYLocalize("CANCEL"), nil] + initWithTitle:UCLocalize("ENTER_APT_URL") + buttons:[NSArray arrayWithObjects:UCLocalize("ADD_SOURCE"), UCLocalize("CANCEL"), nil] defaultButtonIndex:0 delegate:self context:@"source" @@ -5755,15 +5941,15 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (NSString *) title { - return CYLocalize("SOURCES"); + return UCLocalize("SOURCES"); } - (NSString *) leftButtonTitle { - return [[list_ table] isRowDeletionEnabled] ? CYLocalize("ADD") : nil; + return [[list_ table] isRowDeletionEnabled] ? UCLocalize("ADD") : nil; } - (id) rightButtonTitle { - return [[list_ table] isRowDeletionEnabled] ? CYLocalize("DONE") : CYLocalize("EDIT"); + return [[list_ table] isRowDeletionEnabled] ? UCLocalize("DONE") : UCLocalize("EDIT"); } - (UINavigationButtonStyle) rightButtonStyle { @@ -5826,15 +6012,15 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (NSString *) title { - return CYLocalize("INSTALLED"); + return UCLocalize("INSTALLED"); } - (NSString *) backButtonTitle { - return CYLocalize("PACKAGES"); + return UCLocalize("PACKAGES"); } - (id) rightButtonTitle { - return Role_ != nil && [Role_ isEqualToString:@"Developer"] ? nil : expert_ ? CYLocalize("EXPERT") : CYLocalize("SIMPLE"); + return Role_ != nil && [Role_ isEqualToString:@"Developer"] ? nil : expert_ ? UCLocalize("EXPERT") : UCLocalize("SIMPLE"); } - (UINavigationButtonStyle) rightButtonStyle { @@ -5850,7 +6036,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { /* }}} */ /* Home View {{{ */ -@interface HomeView : BrowserView { +@interface HomeView : CydiaBrowserView { } @end @@ -5868,8 +6054,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { - (void) _leftButtonClicked { UIActionSheet *sheet = [[[UIActionSheet alloc] - initWithTitle:CYLocalize("ABOUT_CYDIA") - buttons:[NSArray arrayWithObjects:CYLocalize("CLOSE"), nil] + initWithTitle:UCLocalize("ABOUT_CYDIA") + buttons:[NSArray arrayWithObjects:UCLocalize("CLOSE"), nil] defaultButtonIndex:0 delegate:self context:@"about" @@ -5894,13 +6080,13 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (NSString *) leftButtonTitle { - return CYLocalize("ABOUT"); + return UCLocalize("ABOUT"); } @end /* }}} */ /* Manage View {{{ */ -@interface ManageView : BrowserView { +@interface ManageView : CydiaBrowserView { } @end @@ -5908,7 +6094,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { @implementation ManageView - (NSString *) title { - return CYLocalize("MANAGE"); + return UCLocalize("MANAGE"); } - (void) _leftButtonClicked { @@ -5916,12 +6102,12 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (NSString *) leftButtonTitle { - return CYLocalize("SETTINGS"); + return UCLocalize("SETTINGS"); } #if !AlwaysReload - (id) _rightButtonTitle { - return Queuing_ ? CYLocalize("QUEUE") : nil; + return Queuing_ ? UCLocalize("QUEUE") : nil; } - (UINavigationButtonStyle) rightButtonStyle { @@ -5940,8 +6126,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { @end /* }}} */ -#include - /* Cydia Book {{{ */ @interface CYBook : RVBook < ProgressDelegate @@ -6000,7 +6184,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [UIView endAnimations]; [indicator_ startAnimation]; - [prompt_ setText:CYLocalize("UPDATING_DATABASE")]; + [prompt_ setText:UCLocalize("UPDATING_DATABASE")]; [progress_ setProgress:0]; updating_ = true; @@ -6046,9 +6230,9 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [delegate_ performSelector:@selector(reloadData) withObject:nil afterDelay:0]; else { UIActionSheet *sheet = [[[UIActionSheet alloc] - initWithTitle:[NSString stringWithFormat:CYLocalize("COLON_DELIMITED"), CYLocalize("ERROR"), CYLocalize("REFRESH")] + initWithTitle:[NSString stringWithFormat:UCLocalize("COLON_DELIMITED"), UCLocalize("ERROR"), UCLocalize("REFRESH")] buttons:[NSArray arrayWithObjects: - CYLocalize("OK"), + UCLocalize("OK"), nil] defaultButtonIndex:0 delegate:self @@ -6127,7 +6311,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [progress_ setStyle:0]; [overlay_ addSubview:progress_]; - cancel_ = [[UINavigationButton alloc] initWithTitle:CYLocalize("CANCEL") style:UINavigationButtonStyleHighlighted]; + cancel_ = [[UINavigationButton alloc] initWithTitle:UCLocalize("CANCEL") style:UINavigationButtonStyleHighlighted]; [cancel_ addTarget:self action:@selector(_onCancel) forControlEvents:UIControlEventTouchUpInside]; CGRect frame = [cancel_ frame]; @@ -6158,7 +6342,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (void) setProgressError:(NSString *)error forPackage:(NSString *)id { - [prompt_ setText:[NSString stringWithFormat:CYLocalize("COLON_DELIMITED"), CYLocalize("ERROR"), error]]; + [prompt_ setText:[NSString stringWithFormat:UCLocalize("COLON_DELIMITED"), UCLocalize("ERROR"), error]]; } - (void) setProgressTitle:(NSString *)title { @@ -6375,7 +6559,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { if (row == 0) { section = nil; name = nil; - title = CYLocalize("ALL_PACKAGES"); + title = UCLocalize("ALL_PACKAGES"); } else { section = [filtered_ objectAtIndex:(row - 1)]; name = [section name]; @@ -6384,7 +6568,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { title = [[NSBundle mainBundle] localizedStringForKey:Simplify(name) value:nil table:@"Sections"]; else { name = @""; - title = CYLocalize("NO_SECTION"); + title = UCLocalize("NO_SECTION"); } } @@ -6415,7 +6599,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [transition_ transition:0 toView:list_]; UITableColumn *column = [[[UITableColumn alloc] - initWithTitle:CYLocalize("NAME") + initWithTitle:UCLocalize("NAME") identifier:@"name" width:[self frame].size.width ] autorelease]; @@ -6539,15 +6723,15 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (NSString *) title { - return editing_ ? CYLocalize("SECTION_VISIBILITY") : CYLocalize("INSTALL_BY_SECTION"); + return editing_ ? UCLocalize("SECTION_VISIBILITY") : UCLocalize("INSTALL_BY_SECTION"); } - (NSString *) backButtonTitle { - return CYLocalize("SECTIONS"); + return UCLocalize("SECTIONS"); } - (id) rightButtonTitle { - return [sections_ count] == 0 ? nil : editing_ ? CYLocalize("DONE") : CYLocalize("EDIT"); + return [sections_ count] == 0 ? nil : editing_ ? UCLocalize("DONE") : UCLocalize("EDIT"); } - (UINavigationButtonStyle) rightButtonStyle { @@ -6652,7 +6836,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { //[list_ setSectionListStyle:1]; UITableColumn *column = [[[UITableColumn alloc] - initWithTitle:CYLocalize("NAME") + initWithTitle:UCLocalize("NAME") identifier:@"name" width:[self frame].size.width ] autorelease]; @@ -6688,8 +6872,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [packages_ radixSortUsingFunction:reinterpret_cast(&PackageChangesRadix) withContext:NULL]; _trace(); - Section *upgradable = [[[Section alloc] initWithName:CYLocalize("AVAILABLE_UPGRADES") localize:NO] autorelease]; - Section *ignored = [[[Section alloc] initWithName:CYLocalize("IGNORED_UPGRADES") localize:NO] autorelease]; + Section *upgradable = [[[Section alloc] initWithName:UCLocalize("AVAILABLE_UPGRADES") localize:NO] autorelease]; + Section *ignored = [[[Section alloc] initWithName:UCLocalize("IGNORED_UPGRADES") localize:NO] autorelease]; Section *section = nil; NSDate *last = nil; @@ -6716,14 +6900,14 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { NSString *name; if (seen == nil) - name = CYLocalize("UNKNOWN"); + name = UCLocalize("UNKNOWN"); else { name = (NSString *) CFDateFormatterCreateStringWithDate(NULL, formatter, (CFDateRef) seen); [name autorelease]; } _profile(ChangesView$reloadData$Allocate) - name = [NSString stringWithFormat:CYLocalize("NEW_AT"), name]; + name = [NSString stringWithFormat:UCLocalize("NEW_AT"), name]; section = [[[Section alloc] initWithName:name row:offset localize:NO] autorelease]; [sections_ addObject:section]; _end @@ -6762,15 +6946,15 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (NSString *) leftButtonTitle { - return [(CYBook *)book_ updating] ? nil : CYLocalize("REFRESH"); + return [(CYBook *)book_ updating] ? nil : UCLocalize("REFRESH"); } - (id) rightButtonTitle { - return upgrades_ == 0 ? nil : [NSString stringWithFormat:CYLocalize("PARENTHETICAL"), CYLocalize("UPGRADE"), [NSString stringWithFormat:@"%u", upgrades_]]; + return upgrades_ == 0 ? nil : [NSString stringWithFormat:UCLocalize("PARENTHETICAL"), UCLocalize("UPGRADE"), [NSString stringWithFormat:@"%u", upgrades_]]; } - (NSString *) title { - return CYLocalize("CHANGES"); + return UCLocalize("CHANGES"); } @end @@ -6816,7 +7000,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { - (NSString *) preferencesTable:(UIPreferencesTable *)table titleForGroup:(int)group { switch (group) { - case 0: return [NSString stringWithFormat:CYLocalize("PARENTHETICAL"), CYLocalize("ADVANCED_SEARCH"), CYLocalize("COMING_SOON")]; + case 0: return [NSString stringWithFormat:UCLocalize("PARENTHETICAL"), UCLocalize("ADVANCED_SEARCH"), UCLocalize("COMING_SOON")]; default: _assert(false); } @@ -6949,7 +7133,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { UIFont *font = [UIFont systemFontOfSize:16]; [field_ setFont:font]; - [field_ setPlaceholder:CYLocalize("SEARCH_EX")]; + [field_ setPlaceholder:UCLocalize("SEARCH_EX")]; [field_ setDelegate:self]; [field_ setPaddingTop:5]; @@ -7025,7 +7209,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (NSString *) backButtonTitle { - return CYLocalize("SEARCH"); + return UCLocalize("SEARCH"); } - (void) setDelegate:(id)delegate { @@ -7162,7 +7346,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { case 0: { UIPreferencesControlTableCell *cell([[[UIPreferencesControlTableCell alloc] init] autorelease]); [cell setShowSelection:NO]; - [cell setTitle:CYLocalize("SHOW_ALL_CHANGES_EX")]; + [cell setTitle:UCLocalize("SHOW_ALL_CHANGES_EX")]; return cell; } @@ -7191,12 +7375,12 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { subscribedCell_ = [[UIPreferencesControlTableCell alloc] init]; [subscribedCell_ setShowSelection:NO]; - [subscribedCell_ setTitle:CYLocalize("SHOW_ALL_CHANGES")]; + [subscribedCell_ setTitle:UCLocalize("SHOW_ALL_CHANGES")]; [subscribedCell_ setControl:subscribedSwitch_]; ignoredCell_ = [[UIPreferencesControlTableCell alloc] init]; [ignoredCell_ setShowSelection:NO]; - [ignoredCell_ setTitle:CYLocalize("IGNORE_UPGRADES")]; + [ignoredCell_ setTitle:UCLocalize("IGNORE_UPGRADES")]; [ignoredCell_ setControl:ignoredSwitch_]; [table_ setDataSource:self]; @@ -7222,13 +7406,13 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (NSString *) title { - return CYLocalize("SETTINGS"); + return UCLocalize("SETTINGS"); } @end /* Signature View {{{ */ -@interface SignatureView : BrowserView { +@interface SignatureView : CydiaBrowserView { _transient Database *database_; NSString *package_; } @@ -7310,34 +7494,34 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { int count = [broken_ count]; UIActionSheet *sheet = [[[UIActionSheet alloc] - initWithTitle:(count == 1 ? CYLocalize("HALFINSTALLED_PACKAGE") : [NSString stringWithFormat:CYLocalize("HALFINSTALLED_PACKAGES"), count]) + initWithTitle:(count == 1 ? UCLocalize("HALFINSTALLED_PACKAGE") : [NSString stringWithFormat:UCLocalize("HALFINSTALLED_PACKAGES"), count]) buttons:[NSArray arrayWithObjects: - CYLocalize("FORCIBLY_CLEAR"), - CYLocalize("TEMPORARY_IGNORE"), + UCLocalize("FORCIBLY_CLEAR"), + UCLocalize("TEMPORARY_IGNORE"), nil] defaultButtonIndex:0 delegate:self context:@"fixhalf" ] autorelease]; - [sheet setBodyText:CYLocalize("HALFINSTALLED_PACKAGE_EX")]; + [sheet setBodyText:UCLocalize("HALFINSTALLED_PACKAGE_EX")]; [sheet popupAlertAnimated:YES]; } else if (!Ignored_ && [essential_ count] != 0) { int count = [essential_ count]; UIActionSheet *sheet = [[[UIActionSheet alloc] - initWithTitle:(count == 1 ? CYLocalize("ESSENTIAL_UPGRADE") : [NSString stringWithFormat:CYLocalize("ESSENTIAL_UPGRADES"), count]) + initWithTitle:(count == 1 ? UCLocalize("ESSENTIAL_UPGRADE") : [NSString stringWithFormat:UCLocalize("ESSENTIAL_UPGRADES"), count]) buttons:[NSArray arrayWithObjects: - CYLocalize("UPGRADE_ESSENTIAL"), - CYLocalize("COMPLETE_UPGRADE"), - CYLocalize("TEMPORARY_IGNORE"), + UCLocalize("UPGRADE_ESSENTIAL"), + UCLocalize("COMPLETE_UPGRADE"), + UCLocalize("TEMPORARY_IGNORE"), nil] defaultButtonIndex:0 delegate:self context:@"upgrade" ] autorelease]; - [sheet setBodyText:CYLocalize("ESSENTIAL_UPGRADE_EX")]; + [sheet setBodyText:UCLocalize("ESSENTIAL_UPGRADE_EX")]; [sheet popupAlertAnimated:YES]; } } @@ -7347,7 +7531,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { static bool loaded(false); UIProgressHUD *hud([self addProgressHUD]); - [hud setText:(loaded ? CYLocalize("RELOADING_DATA") : CYLocalize("LOADING_DATA"))]; + [hud setText:(loaded ? UCLocalize("RELOADING_DATA") : UCLocalize("LOADING_DATA"))]; loaded = true; [database_ yieldToSelector:@selector(reloadData) withObject:nil]; @@ -7473,7 +7657,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { detachNewThreadSelector:@selector(update_) toTarget:self withObject:nil - title:CYLocalize("UPDATING_SOURCES") + title:UCLocalize("UPDATING_SOURCES") ]; } @@ -7553,7 +7737,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { - (void) cancel { [self slideUp:[[[UIActionSheet alloc] initWithTitle:nil - buttons:[NSArray arrayWithObjects:CYLocalize("CONTINUE_QUEUING"), CYLocalize("CANCEL_CLEAR"), nil] + buttons:[NSArray arrayWithObjects:UCLocalize("CONTINUE_QUEUING"), UCLocalize("CANCEL_CLEAR"), nil] defaultButtonIndex:1 delegate:self context:@"cancel" @@ -7579,7 +7763,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { detachNewThreadSelector:@selector(perform) toTarget:database_ withObject:nil - title:CYLocalize("RUNNING") + title:UCLocalize("RUNNING") ]; } @@ -7616,7 +7800,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (RVPage *) _pageForURL:(NSURL *)url withClass:(Class)_class { - BrowserView *browser = [[[_class alloc] initWithBook:book_] autorelease]; + CydiaBrowserView *browser = [[[_class alloc] initWithBook:book_] autorelease]; [browser loadURL:url]; return browser; } @@ -7659,21 +7843,21 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (void) askForSettings { - NSString *parenthetical(CYLocalize("PARENTHETICAL")); + NSString *parenthetical(UCLocalize("PARENTHETICAL")); UIActionSheet *role = [[[UIActionSheet alloc] - initWithTitle:CYLocalize("WHO_ARE_YOU") + initWithTitle:UCLocalize("WHO_ARE_YOU") buttons:[NSArray arrayWithObjects: - [NSString stringWithFormat:parenthetical, CYLocalize("USER"), CYLocalize("USER_EX")], - [NSString stringWithFormat:parenthetical, CYLocalize("HACKER"), CYLocalize("HACKER_EX")], - [NSString stringWithFormat:parenthetical, CYLocalize("DEVELOPER"), CYLocalize("DEVELOPER_EX")], + [NSString stringWithFormat:parenthetical, UCLocalize("USER"), UCLocalize("USER_EX")], + [NSString stringWithFormat:parenthetical, UCLocalize("HACKER"), UCLocalize("HACKER_EX")], + [NSString stringWithFormat:parenthetical, UCLocalize("DEVELOPER"), UCLocalize("DEVELOPER_EX")], nil] defaultButtonIndex:-1 delegate:self context:@"role" ] autorelease]; - [role setBodyText:CYLocalize("ROLE_EX")]; + [role setBodyText:UCLocalize("ROLE_EX")]; [role popupAlertAnimated:YES]; } @@ -7758,7 +7942,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { @"install-dn.png", kUIButtonBarButtonSelectedInfo, [NSNumber numberWithInt:2], kUIButtonBarButtonTag, self, kUIButtonBarButtonTarget, - CYLocalize("SECTIONS"), kUIButtonBarButtonTitle, + UCLocalize("SECTIONS"), kUIButtonBarButtonTitle, @"0", kUIButtonBarButtonType, nil], @@ -7768,7 +7952,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { @"changes-dn.png", kUIButtonBarButtonSelectedInfo, [NSNumber numberWithInt:3], kUIButtonBarButtonTag, self, kUIButtonBarButtonTarget, - CYLocalize("CHANGES"), kUIButtonBarButtonTitle, + UCLocalize("CHANGES"), kUIButtonBarButtonTitle, @"0", kUIButtonBarButtonType, nil], @@ -7778,7 +7962,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { @"manage-dn.png", kUIButtonBarButtonSelectedInfo, [NSNumber numberWithInt:4], kUIButtonBarButtonTag, self, kUIButtonBarButtonTarget, - CYLocalize("MANAGE"), kUIButtonBarButtonTitle, + UCLocalize("MANAGE"), kUIButtonBarButtonTitle, @"0", kUIButtonBarButtonType, nil], @@ -7788,7 +7972,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { @"search-dn.png", kUIButtonBarButtonSelectedInfo, [NSNumber numberWithInt:5], kUIButtonBarButtonTag, self, kUIButtonBarButtonTarget, - CYLocalize("SEARCH"), kUIButtonBarButtonTitle, + UCLocalize("SEARCH"), kUIButtonBarButtonTitle, @"0", kUIButtonBarButtonType, nil], nil]; @@ -7879,7 +8063,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [self _reloadData]; else { Queuing_ = true; - [buttonbar_ setBadgeValue:CYLocalize("Q_D") forButton:4]; + [buttonbar_ setBadgeValue:UCLocalize("Q_D") forButton:4]; [book_ reloadData]; } @@ -8006,20 +8190,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [window_ setUserInteractionEnabled:YES]; } -- (void) openMailToURL:(NSURL *)url { -// XXX: this makes me sad -#if 0 - [[[MailToView alloc] initWithView:underlay_ delegate:self url:url] autorelease]; -#else - [UIApp openURL:url];// asPanel:YES]; -#endif -} - -- (void) clearFirstResponder { - if (id responder = [window_ firstResponder]) - [responder resignFirstResponder]; -} - - (RVPage *) pageForPackage:(NSString *)name { if (Package *package = [database_ packageWithName:name]) { PackageView *view([self packageView]); @@ -8027,14 +8197,14 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { return view; } else { UIActionSheet *sheet = [[[UIActionSheet alloc] - initWithTitle:CYLocalize("CANNOT_LOCATE_PACKAGE") - buttons:[NSArray arrayWithObjects:CYLocalize("CLOSE"), nil] + initWithTitle:UCLocalize("CANNOT_LOCATE_PACKAGE") + buttons:[NSArray arrayWithObjects:UCLocalize("CLOSE"), nil] defaultButtonIndex:0 delegate:self context:@"missing" ] autorelease]; - [sheet setBodyText:[NSString stringWithFormat:CYLocalize("PACKAGE_CANNOT_BE_FOUND"), name]]; + [sheet setBodyText:[NSString stringWithFormat:UCLocalize("PACKAGE_CANNOT_BE_FOUND"), name]]; [sheet popupAlertAnimated:YES]; return nil; @@ -8045,6 +8215,10 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { if (tag != NULL) tag = 0; + NSString *href([url absoluteString]); + if ([href hasPrefix:@"apptapp://package/"]) + return [self pageForPackage:[href substringFromIndex:18]]; + NSString *scheme([[url scheme] lowercaseString]); if (![scheme isEqualToString:@"cydia"]) return nil; @@ -8058,13 +8232,13 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { if ([path isEqualToString:@"/add-source"]) return [[[AddSourceView alloc] initWithBook:book_ database:database_] autorelease]; else if ([path isEqualToString:@"/storage"]) - return [self _pageForURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"storage" ofType:@"html"]] withClass:[BrowserView class]]; + return [self _pageForURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"storage" ofType:@"html"]] withClass:[CydiaBrowserView class]]; else if ([path isEqualToString:@"/sources"]) return [[[SourceTable alloc] initWithBook:book_ database:database_] autorelease]; else if ([path isEqualToString:@"/packages"]) return [[[InstalledView alloc] initWithBook:book_ database:database_] autorelease]; else if ([path hasPrefix:@"/url/"]) - return [self _pageForURL:[NSURL URLWithString:[path substringFromIndex:5]] withClass:[BrowserView class]]; + return [self _pageForURL:[NSURL URLWithString:[path substringFromIndex:5]] withClass:[CydiaBrowserView class]]; else if ([path hasPrefix:@"/launch/"]) [self launchApplicationWithIdentifier:[path substringFromIndex:8] suspended:NO]; else if ([path hasPrefix:@"/package-settings/"]) diff --git a/UICaboodle/BrowserView.h b/UICaboodle/BrowserView.h index f02e6793..af083d33 100644 --- a/UICaboodle/BrowserView.h +++ b/UICaboodle/BrowserView.h @@ -1,6 +1,5 @@ #import "ResetView.h" - #include #include #include @@ -34,7 +33,15 @@ @class Database; @class IndirectDelegate; -@class CydiaObject; + +@interface WebScriptObject (UICaboodle) +- (unsigned) count; +- (id) objectAtIndex:(unsigned)index; +@end + +@protocol BrowserViewDelegate +- (RVPage *) pageForURL:(NSURL *)url hasTag:(int *)tag; +@end @interface BrowserView : RVPage < RVBookHook @@ -43,7 +50,6 @@ UIWebDocumentView *webview_; UIProgressIndicator *indicator_; IndirectDelegate *indirect_; - CydiaObject *cydia_; NSURLAuthenticationChallenge *challenge_; bool error_; @@ -95,6 +101,8 @@ - (void) webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame; - (void) webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)window forFrame:(WebFrame *)frame; +- (NSURLRequest *) webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)source; + + (float) defaultWidth; - (void) setViewportWidth:(float)width; diff --git a/UICaboodle/BrowserView.m b/UICaboodle/BrowserView.mm similarity index 82% rename from UICaboodle/BrowserView.m rename to UICaboodle/BrowserView.mm index f7cf0f51..6f6081ee 100644 --- a/UICaboodle/BrowserView.m +++ b/UICaboodle/BrowserView.mm @@ -1,7 +1,18 @@ #include +#include + +#import +// XXX: fix the minimum requirement +extern NSString * const kCAFilterNearest; #include +#include "substrate.h" + +@interface NSString (UIKit) +- (NSString *) stringByAddingPercentEscapes; +@end + /* Indirect Delegate {{{ */ @interface IndirectDelegate : NSObject { _transient volatile id delegate_; @@ -103,7 +114,7 @@ @end /* }}} */ -@interface WebView (Cydia) +@interface WebView (UICaboodle) - (void) setScriptDebugDelegate:(id)delegate; - (void) _setFormDelegate:(id)delegate; - (void) _setUIKitDelegate:(id)delegate; @@ -111,14 +122,7 @@ - (void) _setLayoutInterval:(float)interval; @end -@interface WebScriptObject (Cydia) - -- (unsigned) count; -- (id) objectAtIndex:(unsigned)index; - -@end - -@implementation WebScriptObject (Cydia) +@implementation WebScriptObject (UICaboodle) - (unsigned) count { id length([self valueForKey:@"length"]); @@ -134,214 +138,76 @@ @end -/* Web Scripting {{{ */ -@interface CydiaObject : NSObject { - id indirect_; +#if 0 +/* Mail Composition {{{ */ +@interface MailToView : PopUpView { + MailComposeController *controller_; } -- (id) initWithDelegate:(IndirectDelegate *)indirect; +- (id) initWithView:(UIView *)view delegate:(id)delegate url:(NSURL *)url; + @end -@implementation CydiaObject +@implementation MailToView - (void) dealloc { - [indirect_ release]; + [controller_ release]; [super dealloc]; } -- (id) initWithDelegate:(IndirectDelegate *)indirect { - if ((self = [super init]) != nil) { - indirect_ = [indirect retain]; - } return self; +- (void) mailComposeControllerWillAttemptToSend:(MailComposeController *)controller { + NSLog(@"will"); } -+ (NSArray *) _attributeKeys { - return [NSArray arrayWithObjects:@"device", @"firewire", @"imei", @"mac", @"serial", nil]; +- (void) mailComposeControllerDidAttemptToSend:(MailComposeController *)controller mailDelivery:(id)delivery { + NSLog(@"did:%@", delivery); +// [UIApp setStatusBarShowsProgress:NO]; +if ([controller error]){ +NSArray *buttons = [NSArray arrayWithObjects:UCLocalize("OK"), nil]; +UIActionSheet *mailAlertSheet = [[UIActionSheet alloc] initWithTitle:UCLocalize("ERROR") buttons:buttons defaultButtonIndex:0 delegate:self context:self]; +[mailAlertSheet setBodyText:[controller error]]; +[mailAlertSheet popupAlertAnimated:YES]; } - -- (NSArray *) attributeKeys { - return [[self class] _attributeKeys]; } -+ (BOOL) isKeyExcludedFromWebScript:(const char *)name { - return ![[self _attributeKeys] containsObject:[NSString stringWithUTF8String:name]] && [super isKeyExcludedFromWebScript:name]; +- (void) showError { + NSLog(@"%@", [controller_ error]); + NSArray *buttons = [NSArray arrayWithObjects:UCLocalize("OK"), nil]; + UIActionSheet *mailAlertSheet = [[UIActionSheet alloc] initWithTitle:UCLocalize("ERROR") buttons:buttons defaultButtonIndex:0 delegate:self context:self]; + [mailAlertSheet setBodyText:[controller_ error]]; + [mailAlertSheet popupAlertAnimated:YES]; } -- (NSString *) device { - return [[UIDevice currentDevice] uniqueIdentifier]; -} - -- (NSString *) mac { - if (![indirect_ promptForSensitive:@"Mac Address"]) - return nil; -} +- (void) deliverMessage { _pooled + setuid(501); + setgid(501); -- (NSString *) serial { - if (![indirect_ promptForSensitive:@"Serial #"]) - return nil; + if (![controller_ deliverMessage]) + [self performSelectorOnMainThread:@selector(showError) withObject:nil waitUntilDone:NO]; } -- (NSString *) firewire { - if (![indirect_ promptForSensitive:@"Firewire GUID"]) - return nil; -} - -- (NSString *) imei { - if (![indirect_ promptForSensitive:@"IMEI"]) - return nil; -} - -+ (NSString *) webScriptNameForSelector:(SEL)selector { - if (selector == @selector(close)) - return @"close"; - else if (selector == @selector(getPackageById:)) - return @"getPackageById"; - else if (selector == @selector(setAutoPopup:)) - return @"setAutoPopup"; - else if (selector == @selector(setButtonImage:withStyle:toFunction:)) - return @"setButtonImage"; - else if (selector == @selector(setButtonTitle:withStyle:toFunction:)) - return @"setButtonTitle"; - else if (selector == @selector(setFinishHook:)) - return @"setFinishHook"; - else if (selector == @selector(setPopupHook:)) - return @"setPopupHook"; - else if (selector == @selector(setSpecial:)) - return @"setSpecial"; - else if (selector == @selector(setViewportWidth:)) - return @"setViewportWidth"; - else if (selector == @selector(supports:)) - return @"supports"; - else if (selector == @selector(stringWithFormat:arguments:)) - return @"format"; - else if (selector == @selector(localizedStringForKey:value:table:)) - return @"localize"; - else if (selector == @selector(du:)) - return @"du"; - else if (selector == @selector(statfs:)) - return @"statfs"; +- (void) mailComposeControllerCompositionFinished:(MailComposeController *)controller { + if ([controller_ needsDelivery]) + [NSThread detachNewThreadSelector:@selector(deliverMessage) toTarget:self withObject:nil]; else - return nil; -} - -+ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector { - return [self webScriptNameForSelector:selector] == nil; -} - -- (BOOL) supports:(NSString *)feature { - return [feature isEqualToString:@"window.open"]; + [self cancel]; } -- (Package *) getPackageById:(NSString *)id { - return [[Database sharedInstance] packageWithName:id]; -} - -- (NSArray *) statfs:(NSString *)path { - struct statfs stat; - - if (path == nil || statfs([path UTF8String], &stat) == -1) - return nil; - - return [NSArray arrayWithObjects: - [NSNumber numberWithUnsignedLong:stat.f_bsize], - [NSNumber numberWithUnsignedLong:stat.f_blocks], - [NSNumber numberWithUnsignedLong:stat.f_bfree], - nil]; -} - -- (NSNumber *) du:(NSString *)path { - NSNumber *value(nil); - - int fds[2]; - _assert(pipe(fds) != -1); - - pid_t pid(ExecFork()); - if (pid == 0) { - _assert(dup2(fds[1], 1) != -1); - _assert(close(fds[0]) != -1); - _assert(close(fds[1]) != -1); - /* XXX: this should probably not use du */ - execl("/usr/libexec/cydia/du", "du", "-s", [path UTF8String], NULL); - exit(1); - _assert(false); - } - - _assert(close(fds[1]) != -1); - - if (FILE *du = fdopen(fds[0], "r")) { - char line[1024]; - while (fgets(line, sizeof(line), du) != NULL) { - size_t length(strlen(line)); - while (length != 0 && line[length - 1] == '\n') - line[--length] = '\0'; - if (char *tab = strchr(line, '\t')) { - *tab = '\0'; - value = [NSNumber numberWithUnsignedLong:strtoul(line, NULL, 0)]; - } - } - - fclose(du); - } else _assert(close(fds[0])); - - int status; - wait: - if (waitpid(pid, &status, 0) == -1) - if (errno == EINTR) - goto wait; - else _assert(false); - - return value; -} - -- (void) close { - [indirect_ close]; -} - -- (void) setAutoPopup:(BOOL)popup { - [indirect_ setAutoPopup:popup]; -} +- (id) initWithView:(UIView *)view delegate:(id)delegate url:(NSURL *)url { + if ((self = [super initWithView:view delegate:delegate]) != nil) { + controller_ = [[MailComposeController alloc] initForContentSize:[overlay_ bounds].size]; + [controller_ setDelegate:self]; + [controller_ initializeUI]; + [controller_ setupForURL:url]; -- (void) setButtonImage:(NSString *)button withStyle:(NSString *)style toFunction:(id)function { - [indirect_ setButtonImage:button withStyle:style toFunction:function]; -} - -- (void) setButtonTitle:(NSString *)button withStyle:(NSString *)style toFunction:(id)function { - [indirect_ setButtonTitle:button withStyle:style toFunction:function]; -} - -- (void) setSpecial:(id)function { - [indirect_ setSpecial:function]; -} - -- (void) setFinishHook:(id)function { - [indirect_ setFinishHook:function]; -} - -- (void) setPopupHook:(id)function { - [indirect_ setPopupHook:function]; -} - -- (void) setViewportWidth:(float)width { - [indirect_ setViewportWidth:width]; -} - -- (NSString *) stringWithFormat:(NSString *)format arguments:(WebScriptObject *)arguments { - //NSLog(@"SWF:\"%@\" A:%@", format, [arguments description]); - unsigned count([arguments count]); - id values[count]; - for (unsigned i(0); i != count; ++i) - values[i] = [arguments objectAtIndex:i]; - return [[[NSString alloc] initWithFormat:format arguments:reinterpret_cast(values)] autorelease]; -} - -- (NSString *) localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)table { - if (reinterpret_cast(table) == [WebUndefined undefined]) - table = nil; - return [[NSBundle mainBundle] localizedStringForKey:key value:value table:table]; + UIView *view([controller_ view]); + [overlay_ addSubview:view]; + } return self; } @end /* }}} */ +#endif @implementation BrowserView @@ -398,8 +264,6 @@ WebThreadUnlock(); - [cydia_ release]; - [scroller_ setDelegate:nil]; if (button_ != nil) @@ -438,20 +302,6 @@ [self loadURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy]; } -- (NSMutableURLRequest *) _addHeadersToRequest:(NSURLRequest *)request { - NSMutableURLRequest *copy = [request mutableCopy]; - - if (Machine_ != NULL) - [copy setValue:[NSString stringWithUTF8String:Machine_] forHTTPHeaderField:@"X-Machine"]; - if (UniqueID_ != nil) - [copy setValue:UniqueID_ forHTTPHeaderField:@"X-Unique-ID"]; - - if (Role_ != nil) - [copy setValue:Role_ forHTTPHeaderField:@"X-Role"]; - - return copy; -} - - (void) loadRequest:(NSURLRequest *)request { pushed_ = true; error_ = false; @@ -469,8 +319,8 @@ [self loadRequest:request_]; else { UIActionSheet *sheet = [[[UIActionSheet alloc] - initWithTitle:CYLocalize("RESUBMIT_FORM") - buttons:[NSArray arrayWithObjects:CYLocalize("CANCEL"), CYLocalize("SUBMIT"), nil] + initWithTitle:UCLocalize("RESUBMIT_FORM") + buttons:[NSArray arrayWithObjects:UCLocalize("CANCEL"), UCLocalize("SUBMIT"), nil] defaultButtonIndex:0 delegate:self context:@"submit" @@ -564,26 +414,15 @@ NSLog(@"getSpecial:%@", url); #endif - NSString *href([url absoluteString]); - NSString *scheme([[url scheme] lowercaseString]); - - RVPage *page = nil; - - if ([href hasPrefix:@"apptapp://package/"]) - page = [delegate_ pageForPackage:[href substringFromIndex:18]]; - else if ([scheme isEqualToString:@"cydia"]) { - page = [delegate_ pageForURL:url hasTag:NULL]; - if (page == nil) - return false; - } else if (![scheme isEqualToString:@"apptapp"]) - return false; - - if (page != nil) + if (RVPage *page = [delegate_ pageForURL:url hasTag:NULL]) { if (swap) [self swapPage:page]; else [self pushPage:page]; - return true; + + return true; + } else + return false; } - (void) webViewShow:(WebView *)sender { @@ -595,7 +434,7 @@ } - (bool) allowSensitiveRequests { - [self _allowJavaScriptPanel]; + return [self _allowJavaScriptPanel]; } - (void) _promptForSensitive:(NSMutableArray *)array { @@ -603,7 +442,7 @@ UIActionSheet *sheet = [[[UIActionSheet alloc] initWithTitle:nil - buttons:[NSArray arrayWithObjects:CYLocalize("YES"), CYLocalize("NO"), nil] + buttons:[NSArray arrayWithObjects:UCLocalize("YES"), UCLocalize("NO"), nil] defaultButtonIndex:0 delegate:indirect_ context:@"sensitive" @@ -645,7 +484,7 @@ UIActionSheet *sheet = [[[UIActionSheet alloc] initWithTitle:nil - buttons:[NSArray arrayWithObjects:CYLocalize("OK"), nil] + buttons:[NSArray arrayWithObjects:UCLocalize("OK"), nil] defaultButtonIndex:0 delegate:self context:@"alert" @@ -662,7 +501,7 @@ UIActionSheet *sheet = [[[UIActionSheet alloc] initWithTitle:nil - buttons:[NSArray arrayWithObjects:CYLocalize("OK"), CYLocalize("CANCEL"), nil] + buttons:[NSArray arrayWithObjects:UCLocalize("OK"), UCLocalize("CANCEL"), nil] defaultButtonIndex:0 delegate:indirect_ context:@"confirm" @@ -738,6 +577,15 @@ closer_ = function == nil ? nil : [function retain]; } +- (void) _openMailToURL:(NSURL *)url { +// XXX: this makes me sad +#if 0 + [[[MailToView alloc] initWithView:underlay_ delegate:self url:url] autorelease]; +#else + [UIApp openURL:url];// asPanel:YES]; +#endif +} + - (void) webView:(WebView *)sender willBeginEditingFormElement:(id)element { editing_ = true; } @@ -760,7 +608,6 @@ } - (void) webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)window forFrame:(WebFrame *)frame { - [window setValue:cydia_ forKey:@"cydia"]; } - (void) webView:(WebView *)sender unableToImplementPolicyWithError:(NSError *)error frame:(WebFrame *)frame { @@ -777,7 +624,7 @@ if (![self getSpecial:url swap:NO]) { NSString *scheme([[url scheme] lowercaseString]); if ([scheme isEqualToString:@"mailto"]) - [delegate_ openMailToURL:url]; + [self _openMailToURL:url]; else goto use; } } else if ([name isEqualToString:@"_open"]) @@ -785,7 +632,7 @@ else if ([name isEqualToString:@"_popup"]) { NSString *scheme([[url scheme] lowercaseString]); if ([scheme isEqualToString:@"mailto"]) - [delegate_ openMailToURL:url]; + [self _openMailToURL:url]; else { RVBook *book([[[RVPopUpBook alloc] initWithFrame:[delegate_ popUpBounds]] autorelease]); [book setHook:indirect_]; @@ -896,7 +743,7 @@ } if ([scheme isEqualToString:@"mailto"]) { - [delegate_ openMailToURL:url]; + [self _openMailToURL:url]; goto ignore; } @@ -1000,7 +847,7 @@ UIActionSheet *sheet = [[[UIActionSheet alloc] initWithTitle:realm - buttons:[NSArray arrayWithObjects:CYLocalize("LOGIN"), CYLocalize("CANCEL"), nil] + buttons:[NSArray arrayWithObjects:UCLocalize("LOGIN"), UCLocalize("CANCEL"), nil] defaultButtonIndex:0 delegate:self context:@"challenge" @@ -1008,8 +855,8 @@ [sheet setNumberOfRows:1]; - [sheet addTextFieldWithValue:@"" label:CYLocalize("USERNAME")]; - [sheet addTextFieldWithValue:@"" label:CYLocalize("PASSWORD")]; + [sheet addTextFieldWithValue:@"" label:UCLocalize("USERNAME")]; + [sheet addTextFieldWithValue:@"" label:UCLocalize("PASSWORD")]; UITextField *username([sheet textFieldAtIndex:0]); { UITextInputTraits *traits([username textInputTraits]); @@ -1033,7 +880,7 @@ } - (NSURLRequest *) webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)source { - return [self _addHeadersToRequest:request]; + return request; } - (WebView *) webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request windowFeatures:(NSDictionary *)features { @@ -1419,23 +1266,7 @@ //NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; - Package *package([[Database sharedInstance] packageWithName:@"cydia"]); - NSString *application = package == nil ? @"Cydia" : [NSString - stringWithFormat:@"Cydia/%@", - [package installed] - ]; - - if (Product_ != nil) - application = [NSString stringWithFormat:@"%@ Version/%@", application, Product_]; - if (Build_ != nil) - application = [NSString stringWithFormat:@"%@ Mobile/%@", application, Build_]; - if (Safari_ != nil) - application = [NSString stringWithFormat:@"%@ Safari/%@", application, Safari_]; - - [webview setApplicationNameForUserAgent:application]; - indirect_ = [[IndirectDelegate alloc] initWithDelegate:self]; - cydia_ = [[CydiaObject alloc] initWithDelegate:indirect_]; [webview setFrameLoadDelegate:indirect_]; [webview setResourceLoadDelegate:indirect_]; @@ -1488,7 +1319,10 @@ settings->setJavaScriptCanOpenWindowsAutomatically(true); } - [delegate_ clearFirstResponder]; + if (UIWindow *window = [self window]) + if (UIResponder *responder = [window firstResponder]) + [responder resignFirstResponder]; + JSObjectRef object([function JSObject]); JSGlobalContextRef context([frame globalContext]); JSObjectCallAsFunction(context, object, NULL, 0, NULL, NULL); @@ -1519,7 +1353,7 @@ } - (id) _rightButtonTitle { - return CYLocalize("RELOAD"); + return UCLocalize("RELOAD"); } - (id) rightButtonTitle { @@ -1541,11 +1375,11 @@ } - (NSString *) title { - return title_ == nil ? CYLocalize("LOADING") : title_; + return title_ == nil ? UCLocalize("LOADING") : title_; } - (NSString *) backButtonTitle { - return CYLocalize("BROWSER"); + return UCLocalize("BROWSER"); } - (void) setPageActive:(BOOL)active { diff --git a/UICaboodle/UCLocalize.h b/UICaboodle/UCLocalize.h new file mode 100644 index 00000000..ba66655a --- /dev/null +++ b/UICaboodle/UCLocalize.h @@ -0,0 +1,12 @@ +#ifndef UICABOODLE_UCLOCALIZE_H +#define UICABOODLE_UCLOCALIZE_H + +#import + +static inline NSString *UCLocalizeEx(NSString *key, NSString *value = nil) { + return [[NSBundle mainBundle] localizedStringForKey:key value:value table:nil]; +} + +#define UCLocalize(key) UCLocalizeEx(@ key) + +#endif/*UICABOODLE_UCLOCALIZE_H*/ diff --git a/control b/control index eaa8938f..0ab80234 100644 --- a/control +++ b/control @@ -5,7 +5,7 @@ Maintainer: Jay Freeman (saurik) Architecture: iphoneos-arm Version: 1.0.2913-1 Replaces: com.sosiphone.addcydia -Depends: apr-lib, apt7-lib, apt-key, darwintools, pcre, shell-cmds, system-cmds +Depends: apr-lib, apt7-lib, apt7-key, darwintools, pcre, shell-cmds, system-cmds Pre-Depends: dpkg (>= 1.14.25-8) Conflicts: com.sosiphone.addcydia Description: graphical iPhone front-end for APT diff --git a/makefile b/makefile index d67e03dd..6407cd5a 100644 --- a/makefile +++ b/makefile @@ -9,7 +9,7 @@ all: Cydia clean: rm -f Cydia -Cydia: Cydia.mm ../uicaboodle.m/*.m ../uicaboodle.m/*.mm ../mobilesubstrate/*.h #makefile +Cydia: Cydia.mm ../uicaboodle.m/*.mm ../mobilesubstrate/*.h #makefile $(target)g++ -march=armv6 -mcpu=arm1176jzf-s -mthumb -I../uicaboodle.m -I../mobilesubstrate -fobjc-call-cxx-cdtors -g0 -O2 -Wall -Werror -o $@ $(filter %.mm,$^) -framework UIKit -framework IOKit -framework CoreFoundation -framework Foundation -framework CoreGraphics -framework GraphicsServices -framework QuartzCore -framework JavaScriptCore -framework WebCore -framework WebKit -lobjc -lapt-pkg -lpcre -fobjc-exceptions -F"$${PKG_ROOT}"/System/Library/PrivateFrameworks -multiply_defined suppress -lapr-1 sign: Cydia -- 2.45.2