]> git.saurik.com Git - cydia.git/commitdiff
Merge branch 'master' of git.saurik.com:cydia
authorJay Freeman (saurik) <saurik@saurik.com>
Mon, 6 Jun 2011 08:37:47 +0000 (01:37 -0700)
committerJay Freeman (saurik) <saurik@saurik.com>
Mon, 6 Jun 2011 08:37:47 +0000 (01:37 -0700)
CyteKit/WebViewController.mm
MobileCydia.mm

index 2d489b3507360ca9a5765e3019b4b7e9ecb50b97..e5cfbb47d9f825e277f40814d7f3e9b34e998ce8 100644 (file)
@@ -871,7 +871,9 @@ float CYScrollViewDecelerationRateNormal;
 
     [preferences setCacheModel:WebCacheModelDocumentBrowser];
     [preferences setJavaScriptCanOpenWindowsAutomatically:YES];
-    [preferences setOfflineWebApplicationCacheEnabled:YES];
+
+    if ([preferences respondsToSelector:@selector(setOfflineWebApplicationCacheEnabled:)])
+        [preferences setOfflineWebApplicationCacheEnabled:YES];
 
     if (NSString *agent = [self applicationNameForUserAgent])
         [webview setApplicationNameForUserAgent:agent];
index a6b61fed7aed7b410b7e923bff0bd0fe57ee3b0a..1acb5eac3e8c8928b4cb50d3f9a550bb7317b527 100644 (file)
@@ -1338,6 +1338,7 @@ static void PackageImport(const void *key, const void *value, void *context) {
 - (NSString *) depictionForPackage:(NSString *)package;
 - (NSString *) supportForPackage:(NSString *)package;
 
+- (metaIndex *) metaIndex;
 - (NSDictionary *) record;
 - (BOOL) trusted;
 
@@ -1426,6 +1427,10 @@ static void PackageImport(const void *key, const void *value, void *context) {
     return ![[self _attributeKeys] containsObject:[NSString stringWithUTF8String:name]] && [super isKeyExcludedFromWebScript:name];
 }
 
+- (metaIndex *) metaIndex {
+    return index_;
+}
+
 - (void) setMetaIndex:(metaIndex *)index inPool:(apr_pool_t *)pool {
     [self _clear];
 
@@ -2373,7 +2378,7 @@ struct PackageNameOrdering :
         _end
 
         _profile(Package$initWithVersion$Section)
-            section_ = iterator.Section();
+            section_ = version_.Section();
         _end
 
         _profile(Package$initWithVersion$Flags)
@@ -3539,29 +3544,47 @@ class CydiaLogCleaner :
 
     NSString *title(UCLocalize("DATABASE"));
 
+    list_ = new pkgSourceList();
+    if ([self popErrorWithTitle:title forOperation:list_->ReadMainList()])
+        return;
+
+    for (pkgSourceList::const_iterator source = list_->begin(); source != list_->end(); ++source) {
+        Source *object([[[Source alloc] initWithMetaIndex:*source forDatabase:self inPool:pool_] autorelease]);
+        [sourceList_ addObject:object];
+    }
+
     _trace();
     OpProgress progress;
-    while (!cache_.Open(progress, true)) { pop:
-        std::string error;
-        bool warning(!_error->PopMessage(error));
-        lprintf("cache_.Open():[%s]\n", error.c_str());
-
-        if (error == "dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem. ")
-            [delegate_ repairWithSelector:@selector(configure)];
-        else if (error == "The package lists or status file could not be parsed or opened.")
-            [delegate_ repairWithSelector:@selector(update)];
-        // else if (error == "Could not get lock /var/lib/dpkg/lock - open (35 Resource temporarily unavailable)")
-        // else if (error == "Could not open lock file /var/lib/dpkg/lock - open (13 Permission denied)")
-        // else if (error == "Malformed Status line")
-        // else if (error == "The list of sources could not be read.")
-        else {
+  open:
+    if (!cache_.Open(progress, true)) {
+        // XXX: what if there are errors, but Open() == true? this should be merged with popError:
+        while (!_error->empty()) {
+            std::string error;
+            bool warning(!_error->PopMessage(error));
+
+            lprintf("cache_.Open():[%s]\n", error.c_str());
+
             [delegate_ addProgressEventOnMainThread:[CydiaProgressEvent eventWithMessage:[NSString stringWithUTF8String:error.c_str()] ofType:(warning ? kCydiaProgressEventTypeWarning : kCydiaProgressEventTypeError)] forTask:title];
-            return;
+
+            SEL repair(NULL);
+            if (false);
+            else if (error == "dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem. ")
+                repair = @selector(configure);
+            //else if (error == "The package lists or status file could not be parsed or opened.")
+            //    repair = @selector(update);
+            // else if (error == "Could not get lock /var/lib/dpkg/lock - open (35 Resource temporarily unavailable)")
+            // else if (error == "Could not open lock file /var/lib/dpkg/lock - open (13 Permission denied)")
+            // else if (error == "Malformed Status line")
+            // else if (error == "The list of sources could not be read.")
+
+            if (repair != NULL) {
+                _error->Discard();
+                [delegate_ repairWithSelector:repair];
+                goto open;
+            }
         }
 
-        if (warning)
-            goto pop;
-        _error->Discard();
+        return;
     }
     _trace();
 
@@ -3575,10 +3598,6 @@ class CydiaLogCleaner :
     fetcher_ = new pkgAcquire(&status_);
     lock_ = NULL;
 
-    list_ = new pkgSourceList();
-    if ([self popErrorWithTitle:title forOperation:list_->ReadMainList()])
-        return;
-
     if (cache_->DelCount() != 0 || cache_->InstCount() != 0) {
         [delegate_ addProgressEventOnMainThread:[CydiaProgressEvent eventWithMessage:UCLocalize("COUNTS_NONZERO_EX") ofType:kCydiaProgressEventTypeError] forTask:title];
         return;
@@ -3600,11 +3619,9 @@ class CydiaLogCleaner :
             return;
     }
 
-    for (pkgSourceList::const_iterator source = list_->begin(); source != list_->end(); ++source) {
-        Source *object([[[Source alloc] initWithMetaIndex:*source forDatabase:self inPool:pool_] autorelease]);
-        [sourceList_ addObject:object];
-
-        std::vector<pkgIndexFile *> *indices = (*source)->GetIndexFiles();
+    for (Source *object in (id) sourceList_) {
+        metaIndex *source([object metaIndex]);
+        std::vector<pkgIndexFile *> *indices = source->GetIndexFiles();
         for (std::vector<pkgIndexFile *>::const_iterator index = indices->begin(); index != indices->end(); ++index)
             // XXX: this could be more intelligent
             if (dynamic_cast<debPackagesIndex *>(*index) != NULL) {
@@ -5324,12 +5341,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     ] autorelease];
 }
 
-- (void) uicache {
-    _trace();
-    system("su -c /usr/bin/uicache mobile");
-    _trace();
-}
-
 - (void) invoke:(NSInvocation *)invocation withTitle:(NSString *)title {
     UpdateExternalStatus(1);
 
@@ -5407,11 +5418,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         case 4: [progress_ setFinish:UCLocalize("REBOOT_DEVICE")]; break;
     }
 
-    UIProgressHUD *hud([delegate_ addProgressHUD]);
-    [hud setText:UCLocalize("LOADING")];
-    [self yieldToSelector:@selector(uicache)];
-    [delegate_ removeProgressHUD:hud];
-
     UpdateExternalStatus(Finish_ == 0 ? 0 : 2);
 
     [progress_ setRunning:false];
@@ -8910,10 +8916,6 @@ static void HomeControllerReachabilityCallback(SCNetworkReachabilityRef reachabi
 @synchronized (database_) {
     era_ = [database_ era];
 
-    pkgSourceList list;
-    if ([database_ popErrorWithTitle:UCLocalize("SOURCES") forOperation:list.ReadMainList()])
-        return;
-
     sources_ = [NSMutableArray arrayWithCapacity:16];
     [sources_ addObjectsFromArray:[database_ sources]];
     _trace();
@@ -9686,9 +9688,23 @@ static void HomeControllerReachabilityCallback(SCNetworkReachabilityRef reachabi
     }
 }
 
+- (void) _uicache {
+    _trace();
+    system("su -c /usr/bin/uicache mobile");
+    _trace();
+}
+
+- (void) uicache {
+    UIProgressHUD *hud([self addProgressHUD]);
+    [hud setText:UCLocalize("LOADING")];
+    [self yieldToSelector:@selector(_uicache)];
+    [self removeProgressHUD:hud];
+}
+
 - (void) perform_ {
     [database_ perform];
     [self performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
+    [self performSelectorOnMainThread:@selector(uicache) withObject:nil waitUntilDone:YES];
 }
 
 - (void) confirmWithNavigationController:(UINavigationController *)navigation {