]> git.saurik.com Git - cydia.git/commitdiff
Move most of CydiaObject to CyteKit as CyteObject.
authorJay Freeman (saurik) <saurik@saurik.com>
Sun, 5 Mar 2017 07:38:20 +0000 (23:38 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Sun, 5 Mar 2017 07:38:20 +0000 (23:38 -0800)
CyteKit/CyteKit.h
CyteKit/CyteObject.h [new file with mode: 0644]
CyteKit/CyteObject.mm [new file with mode: 0644]
MobileCydia.mm
iPhonePrivate.h

index 53cef3cd3997facd21080dff116a26449cc9f1c2..0bfba3ca5f682bf466708777008affb6c3469493 100644 (file)
@@ -23,6 +23,7 @@
 #define CyteKit_CyteKit_H
 
 #include "CyteKit/Application.h"
+#include "CyteKit/CyteObject.h"
 #include "CyteKit/NavigationController.h"
 #include "CyteKit/TableViewCell.h"
 #include "CyteKit/TabBarController.h"
diff --git a/CyteKit/CyteObject.h b/CyteKit/CyteObject.h
new file mode 100644 (file)
index 0000000..ef80714
--- /dev/null
@@ -0,0 +1,32 @@
+/* Cydia - iPhone UIKit Front-End for Debian APT
+ * Copyright (C) 2008-2015  Jay Freeman (saurik)
+*/
+
+/* GNU General Public License, Version 3 {{{ */
+/*
+ * Cydia is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation, either version 3 of the License,
+ * or (at your option) any later version.
+ *
+ * Cydia is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cydia.  If not, see <http://www.gnu.org/licenses/>.
+**/
+/* }}} */
+
+#include <Foundation/Foundation.h>
+
+@class CyteWebViewController;
+
+@interface CyteObject : NSObject
+
+- (id) initWithDelegate:(CyteWebViewController *)indirect;
+
+- (NSArray *) attributeKeys;
+
+@end
diff --git a/CyteKit/CyteObject.mm b/CyteKit/CyteObject.mm
new file mode 100644 (file)
index 0000000..f55ddb9
--- /dev/null
@@ -0,0 +1,383 @@
+/* Cydia - iPhone UIKit Front-End for Debian APT
+ * Copyright (C) 2008-2015  Jay Freeman (saurik)
+*/
+
+/* GNU General Public License, Version 3 {{{ */
+/*
+ * Cydia is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation, either version 3 of the License,
+ * or (at your option) any later version.
+ *
+ * Cydia is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cydia.  If not, see <http://www.gnu.org/licenses/>.
+**/
+/* }}} */
+
+#include "CyteKit/UCPlatform.h"
+
+#include <sys/mount.h>
+#include <sys/sysctl.h>
+
+#include <IOKit/IOKitLib.h>
+#include <objc/runtime.h>
+
+#include "CyteKit/CyteObject.h"
+#include "CyteKit/WebViewController.h"
+#include "CyteKit/countByEnumeratingWithState.h"
+#include "CyteKit/extern.h"
+
+#include "iPhonePrivate.h"
+#include <Menes/ObjectHandle.h>
+
+@implementation NSDictionary (Cydia)
+- (id) invokeUndefinedMethodFromWebScript:(NSString *)name withArguments:(NSArray *)arguments {
+    if (false);
+    else if ([name isEqualToString:@"get"])
+        return [self objectForKey:[arguments objectAtIndex:0]];
+    else if ([name isEqualToString:@"keys"])
+        return [self allKeys];
+    return nil;
+} @end
+
+static NSString *CYHex(NSData *data, bool reverse = false) {
+    if (data == nil)
+        return nil;
+
+    size_t length([data length]);
+    uint8_t bytes[length];
+    [data getBytes:bytes];
+
+    char string[length * 2 + 1];
+    for (size_t i(0); i != length; ++i)
+        sprintf(string + i * 2, "%.2x", bytes[reverse ? length - i - 1 : i]);
+
+    return [NSString stringWithUTF8String:string];
+}
+
+static NSObject *CYIOGetValue(const char *path, NSString *property) {
+    io_registry_entry_t entry(IORegistryEntryFromPath(kIOMasterPortDefault, path));
+    if (entry == MACH_PORT_NULL)
+        return nil;
+
+    CFTypeRef value(IORegistryEntryCreateCFProperty(entry, (CFStringRef) property, kCFAllocatorDefault, 0));
+    IOObjectRelease(entry);
+
+    if (value == NULL)
+        return nil;
+    return [(id) value autorelease];
+}
+
+@implementation CyteObject {
+    _H<CyteWebViewController> indirect_;
+}
+
++ (BOOL) isKeyExcludedFromWebScript:(const char *)name {
+    return false;
+}
+
+- (id) initWithDelegate:(CyteWebViewController *)indirect {
+    if ((self = [super init]) != nil) {
+        indirect_ = indirect;
+    } return self;
+}
+
+
+- (NSArray *) attributeKeys {
+    return [NSArray arrayWithObjects:
+        @"bbsnum",
+        @"bittage",
+        @"build",
+        @"coreFoundationVersionNumber",
+        @"ecid",
+        @"firmware",
+        @"hostname",
+        @"idiom",
+        @"model",
+        @"serial",
+    nil];
+}
+
+- (unsigned) bittage {
+#if 0
+#elif defined(__arm64__)
+    return 64;
+#elif defined(__arm__)
+    return 32;
+#else
+    return 0;
+#endif
+}
+
+- (NSString *) bbsnum {
+    return (id) CYHex((NSData *) CYIOGetValue("IOService:/AppleARMPE/baseband", @"snum"), false) ?: [NSNull null];
+}
+
+- (NSString *) build {
+    return [NSString stringWithUTF8String:System_];
+}
+
+- (NSString *) coreFoundationVersionNumber {
+    return [NSString stringWithFormat:@"%.2f", kCFCoreFoundationVersionNumber];
+}
+
+- (NSString *) ecid {
+    return (id) [CYHex((NSData *) CYIOGetValue("IODeviceTree:/chosen", @"unique-chip-id"), true) uppercaseString] ?: [NSNull null];
+}
+
+- (NSString *) firmware {
+    return [[UIDevice currentDevice] systemVersion];
+}
+
+- (NSString *) hostname {
+    return [[UIDevice currentDevice] name];
+}
+
+- (NSString *) idiom {
+    return IsWildcat_ ? @"ipad" : @"iphone";
+}
+
+- (NSString *) model {
+    return [NSString stringWithUTF8String:Machine_];
+}
+
+- (NSString *) serial {
+    return (NSString *) CYIOGetValue("IOService:/", @"IOPlatformSerialNumber");
+}
+
+
++ (NSString *) webScriptNameForSelector:(SEL)selector {
+    if (false);
+    else if (selector == @selector(addInternalRedirect::))
+        return @"addInternalRedirect";
+    else if (selector == @selector(close))
+        return @"close";
+    else if (selector == @selector(stringWithFormat:arguments:))
+        return @"format";
+    else if (selector == @selector(getIORegistryEntry::))
+        return @"getIORegistryEntry";
+    else if (selector == @selector(getKernelNumber:))
+        return @"getKernelNumber";
+    else if (selector == @selector(getKernelString:))
+        return @"getKernelString";
+    else if (selector == @selector(getLocaleIdentifier))
+        return @"getLocaleIdentifier";
+    else if (selector == @selector(getPreferredLanguages))
+        return @"getPreferredLanguages";
+    else if (selector == @selector(isReachable:))
+        return @"isReachable";
+    else if (selector == @selector(localizedStringForKey:value:table:))
+        return @"localize";
+    else if (selector == @selector(popViewController:))
+        return @"popViewController";
+    else if (selector == @selector(registerFrame:))
+        return @"registerFrame";
+    else if (selector == @selector(removeButton))
+        return @"removeButton";
+    else if (selector == @selector(scrollToBottom:))
+        return @"scrollToBottom";
+    else if (selector == @selector(setAllowsNavigationAction:))
+        return @"setAllowsNavigationAction";
+    else if (selector == @selector(setBadgeValue:))
+        return @"setBadgeValue";
+    else if (selector == @selector(setButtonImage:withStyle:toFunction:))
+        return @"setButtonImage";
+    else if (selector == @selector(setButtonTitle:withStyle:toFunction:))
+        return @"setButtonTitle";
+    else if (selector == @selector(setHidesBackButton:))
+        return @"setHidesBackButton";
+    else if (selector == @selector(setHidesNavigationBar:))
+        return @"setHidesNavigationBar";
+    else if (selector == @selector(setNavigationBarStyle:))
+        return @"setNavigationBarStyle";
+    else if (selector == @selector(setNavigationBarTintRed:green:blue:alpha:))
+        return @"setNavigationBarTintColor";
+    else if (selector == @selector(setPasteboardString:))
+        return @"setPasteboardString";
+    else if (selector == @selector(setPasteboardURL:))
+        return @"setPasteboardURL";
+    else if (selector == @selector(setScrollAlwaysBounceVertical:))
+        return @"setScrollAlwaysBounceVertical";
+    else if (selector == @selector(setScrollIndicatorStyle:))
+        return @"setScrollIndicatorStyle";
+    else if (selector == @selector(setViewportWidth:))
+        return @"setViewportWidth";
+    else if (selector == @selector(statfs:))
+        return @"statfs";
+    else if (selector == @selector(supports:))
+        return @"supports";
+    else if (selector == @selector(unload))
+        return @"unload";
+    else
+        return nil;
+}
+
++ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector {
+    return [self webScriptNameForSelector:selector] == nil;
+}
+
+- (void) addInternalRedirect:(NSString *)from :(NSString *)to {
+    [CyteWebViewController performSelectorOnMainThread:@selector(addDiversion:) withObject:[[[Diversion alloc] initWithFrom:from to:to] autorelease] waitUntilDone:NO];
+}
+
+- (void) close {
+    [indirect_ performSelectorOnMainThread:@selector(close) withObject:nil waitUntilDone:NO];
+}
+
+- (NSString *) getKernelString:(NSString *)name {
+    const char *string([name UTF8String]);
+
+    size_t size;
+    if (sysctlbyname(string, NULL, &size, NULL, 0) == -1)
+        return (id) [NSNull null];
+
+    char value[size + 1];
+    if (sysctlbyname(string, value, &size, NULL, 0) == -1)
+        return (id) [NSNull null];
+
+    // XXX: just in case you request something ludicrous
+    value[size] = '\0';
+
+    return [NSString stringWithCString:value];
+}
+
+- (NSObject *) getIORegistryEntry:(NSString *)path :(NSString *)entry {
+    NSObject *value(CYIOGetValue([path UTF8String], entry));
+
+    if (value != nil)
+        if ([value isKindOfClass:[NSData class]])
+            value = CYHex((NSData *) value);
+
+    return value;
+}
+
+- (NSString *) getLocaleIdentifier {
+    _H<const __CFLocale> locale(CFLocaleCopyCurrent(), true);
+    return locale == NULL ? (NSString *) [NSNull null] : (NSString *) CFLocaleGetIdentifier(locale);
+}
+
+- (NSArray *) getPreferredLanguages {
+    return [NSLocale preferredLanguages];
+}
+
+- (NSNumber *) isReachable:(NSString *)name {
+    return [NSNumber numberWithBool:CyteIsReachable([name UTF8String])];
+}
+
+- (NSString *) localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)table {
+    if (reinterpret_cast<id>(value) == [WebUndefined undefined])
+        value = nil;
+    if (reinterpret_cast<id>(table) == [WebUndefined undefined])
+        table = nil;
+    return [[NSBundle mainBundle] localizedStringForKey:key value:value table:table];
+}
+
+- (void) popViewController:(NSNumber *)value {
+    if (value == (id) [WebUndefined undefined])
+        value = [NSNumber numberWithBool:YES];
+    [indirect_ performSelectorOnMainThread:@selector(popViewControllerWithNumber:) withObject:value waitUntilDone:NO];
+}
+
+- (void) registerFrame:(DOMHTMLIFrameElement *)iframe {
+    WebFrame *frame([iframe contentFrame]);
+    [indirect_ registerFrame:frame];
+}
+
+- (void) removeButton {
+    [indirect_ removeButton];
+}
+
+- (void) scrollToBottom:(NSNumber *)animated {
+    [indirect_ performSelectorOnMainThread:@selector(scrollToBottomAnimated:) withObject:animated waitUntilDone:NO];
+}
+
+- (void) setAllowsNavigationAction:(NSString *)value {
+    [indirect_ performSelectorOnMainThread:@selector(setAllowsNavigationActionByNumber:) withObject:value waitUntilDone:NO];
+}
+
+- (void) setBadgeValue:(id)value {
+    [indirect_ performSelectorOnMainThread:@selector(setBadgeValue:) withObject:value waitUntilDone:NO];
+}
+
+- (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) setHidesBackButton:(NSString *)value {
+    [indirect_ performSelectorOnMainThread:@selector(setHidesBackButtonByNumber:) withObject:value waitUntilDone:NO];
+}
+
+- (void) setHidesNavigationBar:(NSString *)value {
+    [indirect_ performSelectorOnMainThread:@selector(setHidesNavigationBarByNumber:) withObject:value waitUntilDone:NO];
+}
+
+- (void) setNavigationBarStyle:(NSString *)value {
+    [indirect_ performSelectorOnMainThread:@selector(setNavigationBarStyle:) withObject:value waitUntilDone:NO];
+}
+
+- (void) setNavigationBarTintRed:(NSNumber *)red green:(NSNumber *)green blue:(NSNumber *)blue alpha:(NSNumber *)alpha {
+    float opacity(alpha == (id) [WebUndefined undefined] ? 1 : [alpha floatValue]);
+    UIColor *color([UIColor colorWithRed:[red floatValue] green:[green floatValue] blue:[blue floatValue] alpha:opacity]);
+    [indirect_ performSelectorOnMainThread:@selector(setNavigationBarTintColor:) withObject:color waitUntilDone:NO];
+}
+
+- (void) setPasteboardString:(NSString *)value {
+    [[objc_getClass("UIPasteboard") generalPasteboard] setString:value];
+}
+
+- (void) setPasteboardURL:(NSString *)value {
+    [[objc_getClass("UIPasteboard") generalPasteboard] setURL:[NSURL URLWithString:value]];
+}
+
+- (void) setScrollAlwaysBounceVertical:(NSNumber *)value {
+    [indirect_ performSelectorOnMainThread:@selector(setScrollAlwaysBounceVerticalNumber:) withObject:value waitUntilDone:NO];
+}
+
+- (void) setScrollIndicatorStyle:(NSString *)style {
+    [indirect_ performSelectorOnMainThread:@selector(setScrollIndicatorStyleWithName:) withObject:style waitUntilDone:NO];
+}
+
+- (void) setViewportWidth:(float)width {
+    [indirect_ setViewportWidthOnMainThread:width];
+}
+
+- (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];
+}
+
+- (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<va_list>(values)] autorelease];
+}
+
+- (BOOL) supports:(NSString *)feature {
+    return [feature isEqualToString:@"window.open"];
+}
+
+- (void) unload {
+    [[indirect_ rootViewController] performSelectorOnMainThread:@selector(unloadData) withObject:nil waitUntilDone:NO];
+}
+
+@end
index 1b3ba02c1f15be94813039187f3aaf0f92eb9ae7..3b7e050690871e27abc9c6e044fe3a95eb2178de 100644 (file)
@@ -48,8 +48,6 @@
 #include <UIKit/UIKit.h>
 #include "iPhonePrivate.h"
 
-#include <IOKit/IOKitLib.h>
-
 #include <QuartzCore/CALayer.h>
 
 #include <WebCore/WebCoreThread.h>
@@ -227,16 +225,6 @@ union SplitHash {
 };
 // }}}
 
-@implementation NSDictionary (Cydia)
-- (id) invokeUndefinedMethodFromWebScript:(NSString *)name withArguments:(NSArray *)arguments {
-    if (false);
-    else if ([name isEqualToString:@"get"])
-        return [self objectForKey:[arguments objectAtIndex:0]];
-    else if ([name isEqualToString:@"keys"])
-        return [self allKeys];
-    return nil;
-} @end
-
 static NSString *Colon_;
 NSString *Elision_;
 static NSString *Error_;
@@ -792,34 +780,6 @@ bool isSectionVisible(NSString *section) {
     return hidden == nil || ![hidden boolValue];
 }
 
-static NSObject *CYIOGetValue(const char *path, NSString *property) {
-    io_registry_entry_t entry(IORegistryEntryFromPath(kIOMasterPortDefault, path));
-    if (entry == MACH_PORT_NULL)
-        return nil;
-
-    CFTypeRef value(IORegistryEntryCreateCFProperty(entry, (CFStringRef) property, kCFAllocatorDefault, 0));
-    IOObjectRelease(entry);
-
-    if (value == NULL)
-        return nil;
-    return [(id) value autorelease];
-}
-
-static NSString *CYHex(NSData *data, bool reverse = false) {
-    if (data == nil)
-        return nil;
-
-    size_t length([data length]);
-    uint8_t bytes[length];
-    [data getBytes:bytes];
-
-    char string[length * 2 + 1];
-    for (size_t i(0); i != length; ++i)
-        sprintf(string + i * 2, "%.2x", bytes[reverse ? length - i - 1 : i]);
-
-    return [NSString stringWithUTF8String:string];
-}
-
 static NSString *VerifySource(NSString *href) {
     static RegEx href_r("(http(s?)://|file:///)[^# ]*");
     if (!href_r(href)) {
@@ -4227,17 +4187,12 @@ class CydiaLogCleaner :
 @end
 /* }}} */
 
-@interface CydiaObject : NSObject {
-    _H<CyteWebViewController> indirect_;
+@interface CydiaObject : CyteObject {
     _transient id delegate_;
 }
 
-- (id) initWithDelegate:(CyteWebViewController *)indirect;
-
 @end
 
-@class CydiaObject;
-
 @interface CydiaWebViewController : CyteWebViewController {
     _H<CydiaObject> cydia_;
 }
@@ -4251,85 +4206,30 @@ class CydiaLogCleaner :
 /* Web Scripting {{{ */
 @implementation CydiaObject
 
-- (id) initWithDelegate:(CyteWebViewController *)indirect {
-    if ((self = [super init]) != nil) {
-        indirect_ = indirect;
-    } return self;
-}
-
 - (void) setDelegate:(id)delegate {
     delegate_ = delegate;
 }
 
-+ (NSArray *) _attributeKeys {
-    return [NSArray arrayWithObjects:
-        @"bittage",
-        @"bbsnum",
-        @"build",
+- (NSArray *) attributeKeys {
+    return [[NSArray arrayWithObjects:
         @"cells",
-        @"coreFoundationVersionNumber",
         @"device",
-        @"ecid",
-        @"firmware",
-        @"hostname",
-        @"idiom",
         @"mcc",
         @"mnc",
-        @"model",
         @"operator",
         @"role",
-        @"serial",
         @"version",
-    nil];
-}
-
-- (NSArray *) attributeKeys {
-    return [[self class] _attributeKeys];
-}
-
-+ (BOOL) isKeyExcludedFromWebScript:(const char *)name {
-    return ![[self _attributeKeys] containsObject:[NSString stringWithUTF8String:name]] && [super isKeyExcludedFromWebScript:name];
+    nil] arrayByAddingObjectsFromArray:[super attributeKeys]];
 }
 
 - (NSString *) version {
     return Cydia_;
 }
 
-- (unsigned) bittage {
-#if 0
-#elif defined(__arm64__)
-    return 64;
-#elif defined(__arm__)
-    return 32;
-#else
-    return 0;
-#endif
-}
-
-- (NSString *) build {
-    return [NSString stringWithUTF8String:System_];
-}
-
-- (NSString *) coreFoundationVersionNumber {
-    return [NSString stringWithFormat:@"%.2f", kCFCoreFoundationVersionNumber];
-}
-
 - (NSString *) device {
     return UniqueIdentifier();
 }
 
-- (NSString *) firmware {
-    return [[UIDevice currentDevice] systemVersion];
-}
-
-- (NSString *) hostname {
-    return [[UIDevice currentDevice] name];
-}
-
-- (NSString *) idiom {
-    return IsWildcat_ ? @"ipad" : @"iphone";
-}
-
 - (NSArray *) cells {
     auto *$_CTServerConnectionCreate(reinterpret_cast<id (*)(void *, void *, void *)>(dlsym(RTLD_DEFAULT, "_CTServerConnectionCreate")));
     if ($_CTServerConnectionCreate == NULL)
@@ -4371,44 +4271,22 @@ class CydiaLogCleaner :
     return nil;
 }
 
-- (NSString *) bbsnum {
-    return (id) CYHex((NSData *) CYIOGetValue("IOService:/AppleARMPE/baseband", @"snum"), false) ?: [NSNull null];
-}
-
-- (NSString *) ecid {
-    return (id) [CYHex((NSData *) CYIOGetValue("IODeviceTree:/chosen", @"unique-chip-id"), true) uppercaseString] ?: [NSNull null];
-}
-
-- (NSString *) serial {
-    return (NSString *) CYIOGetValue("IOService:/", @"IOPlatformSerialNumber");
-}
-
 - (NSString *) role {
     return (id) [NSNull null];
 }
 
-- (NSString *) model {
-    return [NSString stringWithUTF8String:Machine_];
-}
-
 + (NSString *) webScriptNameForSelector:(SEL)selector {
     if (false);
     else if (selector == @selector(addBridgedHost:))
         return @"addBridgedHost";
     else if (selector == @selector(addInsecureHost:))
         return @"addInsecureHost";
-    else if (selector == @selector(addInternalRedirect::))
-        return @"addInternalRedirect";
     else if (selector == @selector(addSource:::))
         return @"addSource";
     else if (selector == @selector(addTrivialSource:))
         return @"addTrivialSource";
-    else if (selector == @selector(close))
-        return @"close";
     else if (selector == @selector(du:))
         return @"du";
-    else if (selector == @selector(stringWithFormat:arguments:))
-        return @"format";
     else if (selector == @selector(getAllSources))
         return @"getAllSources";
     else if (selector == @selector(getApplicationInfo:value:))
@@ -4417,18 +4295,8 @@ class CydiaLogCleaner :
         return @"getDisplayIdentifiers";
     else if (selector == @selector(getLocalizedNameForDisplayIdentifier:))
         return @"getLocalizedNameForDisplayIdentifier";
-    else if (selector == @selector(getKernelNumber:))
-        return @"getKernelNumber";
-    else if (selector == @selector(getKernelString:))
-        return @"getKernelString";
     else if (selector == @selector(getInstalledPackages))
         return @"getInstalledPackages";
-    else if (selector == @selector(getIORegistryEntry::))
-        return @"getIORegistryEntry";
-    else if (selector == @selector(getLocaleIdentifier))
-        return @"getLocaleIdentifier";
-    else if (selector == @selector(getPreferredLanguages))
-        return @"getPreferredLanguages";
     else if (selector == @selector(getPackageById:))
         return @"getPackageById";
     else if (selector == @selector(getMetadataKeys))
@@ -4439,18 +4307,8 @@ class CydiaLogCleaner :
         return @"getSessionValue";
     else if (selector == @selector(installPackages:))
         return @"installPackages";
-    else if (selector == @selector(isReachable:))
-        return @"isReachable";
-    else if (selector == @selector(localizedStringForKey:value:table:))
-        return @"localize";
-    else if (selector == @selector(popViewController:))
-        return @"popViewController";
     else if (selector == @selector(refreshSources))
         return @"refreshSources";
-    else if (selector == @selector(registerFrame:))
-        return @"registerFrame";
-    else if (selector == @selector(removeButton))
-        return @"removeButton";
     else if (selector == @selector(saveConfig))
         return @"saveConfig";
     else if (selector == @selector(setMetadataValue::))
@@ -4459,42 +4317,8 @@ class CydiaLogCleaner :
         return @"setSessionValue";
     else if (selector == @selector(substitutePackageNames:))
         return @"substitutePackageNames";
-    else if (selector == @selector(scrollToBottom:))
-        return @"scrollToBottom";
-    else if (selector == @selector(setAllowsNavigationAction:))
-        return @"setAllowsNavigationAction";
-    else if (selector == @selector(setBadgeValue:))
-        return @"setBadgeValue";
-    else if (selector == @selector(setButtonImage:withStyle:toFunction:))
-        return @"setButtonImage";
-    else if (selector == @selector(setButtonTitle:withStyle:toFunction:))
-        return @"setButtonTitle";
-    else if (selector == @selector(setHidesBackButton:))
-        return @"setHidesBackButton";
-    else if (selector == @selector(setHidesNavigationBar:))
-        return @"setHidesNavigationBar";
-    else if (selector == @selector(setNavigationBarStyle:))
-        return @"setNavigationBarStyle";
-    else if (selector == @selector(setNavigationBarTintRed:green:blue:alpha:))
-        return @"setNavigationBarTintColor";
-    else if (selector == @selector(setPasteboardString:))
-        return @"setPasteboardString";
-    else if (selector == @selector(setPasteboardURL:))
-        return @"setPasteboardURL";
-    else if (selector == @selector(setScrollAlwaysBounceVertical:))
-        return @"setScrollAlwaysBounceVertical";
-    else if (selector == @selector(setScrollIndicatorStyle:))
-        return @"setScrollIndicatorStyle";
     else if (selector == @selector(setToken:))
         return @"setToken";
-    else if (selector == @selector(setViewportWidth:))
-        return @"setViewportWidth";
-    else if (selector == @selector(statfs:))
-        return @"statfs";
-    else if (selector == @selector(supports:))
-        return @"supports";
-    else if (selector == @selector(unload))
-        return @"unload";
     else
         return nil;
 }
@@ -4503,26 +4327,6 @@ class CydiaLogCleaner :
     return [self webScriptNameForSelector:selector] == nil;
 }
 
-- (BOOL) supports:(NSString *)feature {
-    return [feature isEqualToString:@"window.open"];
-}
-
-- (void) unload {
-    [[indirect_ rootViewController] performSelectorOnMainThread:@selector(unloadData) withObject:nil waitUntilDone:NO];
-}
-
-- (void) setScrollAlwaysBounceVertical:(NSNumber *)value {
-    [indirect_ performSelectorOnMainThread:@selector(setScrollAlwaysBounceVerticalNumber:) withObject:value waitUntilDone:NO];
-}
-
-- (void) setScrollIndicatorStyle:(NSString *)style {
-    [indirect_ performSelectorOnMainThread:@selector(setScrollIndicatorStyleWithName:) withObject:style waitUntilDone:NO];
-}
-
-- (void) addInternalRedirect:(NSString *)from :(NSString *)to {
-    [CyteWebViewController performSelectorOnMainThread:@selector(addDiversion:) withObject:[[[Diversion alloc] initWithFrom:from to:to] autorelease] waitUntilDone:NO];
-}
-
 - (NSDictionary *) getApplicationInfo:(NSString *)display value:(NSString *)key {
     char path[1024];
     if (SBBundlePathForDisplayIdentifier(SBSSpringBoardServerPort(), [display UTF8String], path) != 0)
@@ -4558,43 +4362,11 @@ class CydiaLogCleaner :
     return [NSNumber numberWithInt:value];
 }
 
-- (NSString *) getKernelString:(NSString *)name {
-    const char *string([name UTF8String]);
-
-    size_t size;
-    if (sysctlbyname(string, NULL, &size, NULL, 0) == -1)
-        return (id) [NSNull null];
-
-    char value[size + 1];
-    if (sysctlbyname(string, value, &size, NULL, 0) == -1)
-        return (id) [NSNull null];
-
-    // XXX: just in case you request something ludicrous
-    value[size] = '\0';
-
-    return [NSString stringWithCString:value];
-}
-
-- (NSObject *) getIORegistryEntry:(NSString *)path :(NSString *)entry {
-    NSObject *value(CYIOGetValue([path UTF8String], entry));
-
-    if (value != nil)
-        if ([value isKindOfClass:[NSData class]])
-            value = CYHex((NSData *) value);
-
-    return value;
-}
-
 - (NSArray *) getMetadataKeys {
 @synchronized (Values_) {
     return [Values_ allKeys];
 } }
 
-- (void) registerFrame:(DOMHTMLIFrameElement *)iframe {
-    WebFrame *frame([iframe contentFrame]);
-    [indirect_ registerFrame:frame];
-}
-
 - (id) getMetadataValue:(NSString *)key {
 @synchronized (Values_) {
     return [Values_ objectForKey:key];
@@ -4631,12 +4403,6 @@ class CydiaLogCleaner :
     [InsecureHosts_ addObject:host];
 } }
 
-- (void) popViewController:(NSNumber *)value {
-    if (value == (id) [WebUndefined undefined])
-        value = [NSNumber numberWithBool:YES];
-    [indirect_ performSelectorOnMainThread:@selector(popViewControllerWithNumber:) withObject:value waitUntilDone:NO];
-}
-
 - (void) addSource:(NSString *)href :(NSString *)distribution :(WebScriptObject *)sections {
     NSMutableArray *array([NSMutableArray arrayWithCapacity:[sections count]]);
 
@@ -4690,27 +4456,6 @@ class CydiaLogCleaner :
         return (Package *) [NSNull null];
 }
 
-- (NSString *) getLocaleIdentifier {
-    return Locale_ == NULL ? (NSString *) [NSNull null] : (NSString *) CFLocaleGetIdentifier(Locale_);
-}
-
-- (NSArray *) getPreferredLanguages {
-    return Languages_;
-}
-
-- (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);
 
@@ -4732,14 +4477,6 @@ class CydiaLogCleaner :
     return value;
 }
 
-- (void) close {
-    [indirect_ performSelectorOnMainThread:@selector(close) withObject:nil waitUntilDone:NO];
-}
-
-- (NSNumber *) isReachable:(NSString *)name {
-    return [NSNumber numberWithBool:CyteIsReachable([name UTF8String])];
-}
-
 - (void) installPackages:(NSArray *)packages {
     [delegate_ performSelectorOnMainThread:@selector(installPackages:) withObject:packages waitUntilDone:NO];
 }
@@ -4761,81 +4498,10 @@ class CydiaLogCleaner :
     return [words componentsJoinedByString:@" "];
 }
 
-- (void) removeButton {
-    [indirect_ removeButton];
-}
-
-- (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) setBadgeValue:(id)value {
-    [indirect_ performSelectorOnMainThread:@selector(setBadgeValue:) withObject:value waitUntilDone:NO];
-}
-
-- (void) setAllowsNavigationAction:(NSString *)value {
-    [indirect_ performSelectorOnMainThread:@selector(setAllowsNavigationActionByNumber:) withObject:value waitUntilDone:NO];
-}
-
-- (void) setHidesBackButton:(NSString *)value {
-    [indirect_ performSelectorOnMainThread:@selector(setHidesBackButtonByNumber:) withObject:value waitUntilDone:NO];
-}
-
-- (void) setHidesNavigationBar:(NSString *)value {
-    [indirect_ performSelectorOnMainThread:@selector(setHidesNavigationBarByNumber:) withObject:value waitUntilDone:NO];
-}
-
-- (void) setNavigationBarStyle:(NSString *)value {
-    [indirect_ performSelectorOnMainThread:@selector(setNavigationBarStyle:) withObject:value waitUntilDone:NO];
-}
-
-- (void) setNavigationBarTintRed:(NSNumber *)red green:(NSNumber *)green blue:(NSNumber *)blue alpha:(NSNumber *)alpha {
-    float opacity(alpha == (id) [WebUndefined undefined] ? 1 : [alpha floatValue]);
-    UIColor *color([UIColor colorWithRed:[red floatValue] green:[green floatValue] blue:[blue floatValue] alpha:opacity]);
-    [indirect_ performSelectorOnMainThread:@selector(setNavigationBarTintColor:) withObject:color waitUntilDone:NO];
-}
-
-- (void) setPasteboardString:(NSString *)value {
-    [[objc_getClass("UIPasteboard") generalPasteboard] setString:value];
-}
-
-- (void) setPasteboardURL:(NSString *)value {
-    [[objc_getClass("UIPasteboard") generalPasteboard] setURL:[NSURL URLWithString:value]];
-}
-
 - (void) setToken:(NSString *)token {
     // XXX: the website expects this :/
 }
 
-- (void) scrollToBottom:(NSNumber *)animated {
-    [indirect_ performSelectorOnMainThread:@selector(scrollToBottomAnimated:) withObject:animated waitUntilDone:NO];
-}
-
-- (void) setViewportWidth:(float)width {
-    [indirect_ setViewportWidthOnMainThread: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<va_list>(values)] autorelease];
-}
-
-- (NSString *) localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)table {
-    if (reinterpret_cast<id>(value) == [WebUndefined undefined])
-        value = nil;
-    if (reinterpret_cast<id>(table) == [WebUndefined undefined])
-        table = nil;
-    return [[NSBundle mainBundle] localizedStringForKey:key value:value table:table];
-}
-
 @end
 /* }}} */
 
index 411ff9643680e6c263e3174cabd480624774f5a1..cd5934deb866133ade2f015a5e23cca24567d331 100644 (file)
@@ -334,6 +334,7 @@ enum {
 
 @interface NSObject (Apple)
 + (BOOL) isKeyExcludedFromWebScript:(const char *)name;
+- (NSArray *) attributeKeys;
 @end
 
 @interface NSString (Apple)