diff options
author | Jay Freeman (saurik) <saurik@saurik.com> | 2011-04-02 00:43:13 -0700 |
---|---|---|
committer | Jay Freeman (saurik) <saurik@saurik.com> | 2011-04-02 00:43:13 -0700 |
commit | 2b49cff9c356b460efefc1786a13002ad5f028c5 (patch) | |
tree | e7b68e40f9edf9db81366e3372a8046b27b3866a | |
parent | 17c763ff9de9b6a9051415b4cd56da5d55d51548 (diff) |
Reorganize cache_.Open() to not lose errors.
-rw-r--r-- | MobileCydia.mm | 45 |
1 files changed, 27 insertions, 18 deletions
diff --git a/MobileCydia.mm b/MobileCydia.mm index 1ec3187..ea858e9 100644 --- a/MobileCydia.mm +++ b/MobileCydia.mm @@ -3555,27 +3555,36 @@ class CydiaLogCleaner : _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(); |