static UIFont *Font22Bold_;
static const char *Machine_ = NULL;
-static const NSString *UniqueID_ = NULL;
-
-unsigned Major_;
-unsigned Minor_;
-unsigned BugFix_;
+static const NSString *UniqueID_ = nil;
+static const NSString *Build_ = nil;
CFLocaleRef Locale_;
CGColorSpaceRef space_;
-#define FW_LEAST(major, minor, bugfix) \
- (major < Major_ || major == Major_ && \
- (minor < Minor_ || minor == Minor_ && \
- bugfix <= BugFix_))
-
bool bootstrap_;
bool reload_;
[warnings addObject:@"illegal package identifier"];
else for (size_t i(0); i != length; ++i)
if (
+ /* XXX: technically this is not allowed */
+ (name[i] < 'A' || name[i] > 'Z') &&
(name[i] < 'a' || name[i] > 'z') &&
(name[i] < '0' || name[i] > '9') &&
(i == 0 || name[i] != '+' && name[i] != '-' && name[i] != '.')
if (strcmp(name, "cydia") != 0) {
bool cydia = false;
+ bool _private = false;
bool stash = false;
+ bool repository = [[self section] isEqualToString:@"Repositories"];
+
if (NSArray *files = [self files])
for (NSString *file in files)
if (!cydia && [file isEqualToString:@"/Applications/Cydia.app"])
cydia = true;
+ else if (!_private && [file isEqualToString:@"/private"])
+ _private = true;
else if (!stash && [file isEqualToString:@"/var/stash"])
stash = true;
- if (cydia)
+ /* XXX: this is not sensitive enough. only some folders are valid. */
+ if (cydia && !repository)
[warnings addObject:@"files installed into Cydia.app"];
+ if (_private)
+ [warnings addObject:@"files installed with /private/*"];
if (stash)
[warnings addObject:@"files installed to /var/stash"];
}
return @"About";
}
-@end
-/* }}} */
-/* Storage View {{{ */
-@interface StorageView : BrowserView {
-}
-
-@end
-
-@implementation StorageView
-
-- (NSString *) title {
- return @"Storage";
-}
-
-#if !AlwaysReload
-- (id) _rightButtonTitle {
- return nil;
-}
-#endif
-
-- (bool) _loading {
- return false;
-}
-
@end
/* }}} */
/* Manage View {{{ */
- (void) alertSheet:(UIActionSheet *)sheet buttonClicked:(int)button {
NSString *context([sheet context]);
- if ([context isEqualToString:@"fixhalf"]) {
+ if ([context isEqualToString:@"missing"])
+ [sheet dismiss];
+ else if ([context isEqualToString:@"fixhalf"]) {
switch (button) {
case 1:
@synchronized (self) {
}
- (RVPage *) pageForURL:(NSURL *)url hasTag:(int *)tag {
- NSString *href = [url absoluteString];
-
if (tag != NULL)
tag = 0;
- if ([href isEqualToString:@"cydia://add-source"])
+ NSString *scheme([[url scheme] lowercaseString]);
+ if (![scheme isEqualToString:@"cydia"])
+ return nil;
+ NSString *path([url absoluteString]);
+ if ([path length] < 8)
+ return nil;
+ path = [path substringFromIndex:8];
+ if (![path hasPrefix:@"/"])
+ path = [@"/" stringByAppendingString:path];
+
+ if ([path isEqualToString:@"/add-source"])
return [[[AddSourceView alloc] initWithBook:book_ database:database_] autorelease];
- else if ([href isEqualToString:@"cydia://storage"])
- return [self _pageForURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"storage" ofType:@"html"]] withClass:[StorageView class]];
- else if ([href isEqualToString:@"cydia://sources"])
+ else if ([path isEqualToString:@"/storage"])
+ return [self _pageForURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"storage" ofType:@"html"]] withClass:[BrowserView class]];
+ else if ([path isEqualToString:@"/sources"])
return [[[SourceTable alloc] initWithBook:book_ database:database_] autorelease];
- else if ([href isEqualToString:@"cydia://packages"])
+ else if ([path isEqualToString:@"/packages"])
return [[[InstalledView alloc] initWithBook:book_ database:database_] autorelease];
- else if ([href hasPrefix:@"cydia://url/"])
- return [self _pageForURL:[NSURL URLWithString:[href substringFromIndex:12]] withClass:[BrowserView class]];
- else if ([href hasPrefix:@"cydia://launch/"])
- [self launchApplicationWithIdentifier:[href substringFromIndex:15] suspended:NO];
- else if ([href hasPrefix:@"cydia://package-settings/"])
- return [[[SettingsView alloc] initWithBook:book_ database:database_ package:[href substringFromIndex:25]] autorelease];
- else if ([href hasPrefix:@"cydia://package-signature/"])
- return [[[SignatureView alloc] initWithBook:book_ database:database_ package:[href substringFromIndex:26]] autorelease];
- else if ([href hasPrefix:@"cydia://package/"])
- return [self pageForPackage:[href substringFromIndex:16]];
- else if ([href hasPrefix:@"cydia://files/"]) {
- NSString *name = [href substringFromIndex:14];
+ else if ([path hasPrefix:@"/url/"])
+ return [self _pageForURL:[NSURL URLWithString:[path substringFromIndex:5]] withClass:[BrowserView class]];
+ else if ([path hasPrefix:@"/launch/"])
+ [self launchApplicationWithIdentifier:[path substringFromIndex:8] suspended:NO];
+ else if ([path hasPrefix:@"/package-settings/"])
+ return [[[SettingsView alloc] initWithBook:book_ database:database_ package:[path substringFromIndex:18]] autorelease];
+ else if ([path hasPrefix:@"/package-signature/"])
+ return [[[SignatureView alloc] initWithBook:book_ database:database_ package:[path substringFromIndex:19]] autorelease];
+ else if ([path hasPrefix:@"/package/"])
+ return [self pageForPackage:[path substringFromIndex:9]];
+ else if ([path hasPrefix:@"/files/"]) {
+ NSString *name = [path substringFromIndex:7];
if (Package *package = [database_ packageWithName:name]) {
FileTable *files = [[[FileTable alloc] initWithBook:book_ database:database_] autorelease];
UniqueID_ = [[UIDevice currentDevice] uniqueIdentifier];
+ if (NSDictionary *system = [NSDictionary dictionaryWithContentsOfFile:@"/System/Library/CoreServices/SystemVersion.plist"])
+ Build_ = [system objectForKey:@"ProductBuildVersion"];
+
/*AddPreferences(@"/Applications/Preferences.app/Settings-iPhone.plist");
AddPreferences(@"/Applications/Preferences.app/Settings-iPod.plist");*/
Indices_ = [[NSMutableDictionary alloc] init];*/
Indices_ = [NSMutableDictionary dictionaryWithObjectsAndKeys:
- //@"http://"/*"cache.saurik.com/"*/"cydia.saurik.com/server/rating/@", @"Rating",
+ @"http://"/*"cache.saurik.com/"*/"cydia.saurik.com/server/rating/@", @"Rating",
@"http://"/*"cache.saurik.com/"*/"cydia.saurik.com/repotag/@", @"RepoTag",
nil];
Documents_ = [[[NSMutableArray alloc] initWithCapacity:4] autorelease];
#endif
- if (substrate && access("/Library/MobileSubstrate/MobileSubstrate.dylib", F_OK) == 0)
- dlopen("/Library/MobileSubstrate/MobileSubstrate.dylib", RTLD_LAZY | RTLD_GLOBAL);
+ if (substrate && access("/Applications/WinterBoard.app/WinterBoard.dylib", F_OK) == 0)
+ dlopen("/Applications/WinterBoard.app/WinterBoard.dylib", RTLD_LAZY | RTLD_GLOBAL);
+ /*if (substrate && access("/Library/MobileSubstrate/MobileSubstrate.dylib", F_OK) == 0)
+ dlopen("/Library/MobileSubstrate/MobileSubstrate.dylib", RTLD_LAZY | RTLD_GLOBAL);*/
if (access("/User", F_OK) != 0)
system("/usr/libexec/cydia/firmware.sh");