X-Git-Url: https://git.saurik.com/cydia.git/blobdiff_plain/5bb2842a7c6f8276e9f1870b93eec10c9d2488de..528c81daf6aea9253d842161aaea30cd852b02d9:/MobileCydia.mm diff --git a/MobileCydia.mm b/MobileCydia.mm index 0208bad3..5f2a0ad7 100644 --- a/MobileCydia.mm +++ b/MobileCydia.mm @@ -118,8 +118,6 @@ extern "C" { #include #include -#include - #include "UICaboodle/BrowserView.h" #include "substrate.h" @@ -1703,13 +1701,11 @@ typedef std::map< unsigned long, _H > SourceMap; pkgCache::VerFileIterator file_; Source *source_; - bool cached_; bool parsed_; CYString section_; _transient NSString *section$_; bool essential_; - bool required_; bool visible_; bool obsolete_; @@ -1734,8 +1730,6 @@ typedef std::map< unsigned long, _H > SourceMap; NSMutableArray *tags_; NSString *role_; - NSArray *relationships_; - NSMutableDictionary *metadata_; _transient NSDate *firstSeen_; _transient NSDate *lastSeen_; @@ -1796,7 +1790,6 @@ typedef std::map< unsigned long, _H > SourceMap; - (NSString *) support; - (NSArray *) files; -- (NSArray *) relationships; - (NSArray *) warnings; - (NSArray *) applications; @@ -1980,8 +1973,6 @@ struct PackageNameOrdering : if (role_ != nil) [role_ release]; - if (relationships_ != nil) - [relationships_ release]; if (metadata_ != nil) [metadata_ release]; @@ -2076,7 +2067,7 @@ struct PackageNameOrdering : } - (void) setVisible { - visible_ = required_ && [self unfiltered]; + visible_ = [self unfiltered]; } - (Package *) initWithVersion:(pkgCache::VerIterator)version withZone:(NSZone *)zone inPool:(apr_pool_t *)pool database:(Database *)database { @@ -2124,17 +2115,6 @@ struct PackageNameOrdering : data[i] |= 0x20; _end - if (!file_.end()) { - _profile(Package$initWithVersion$Source) - source_ = [database_ getSource:file_.File()]; - if (source_ != nil) - [source_ retain]; - cached_ = true; - _end - } - - required_ = true; - _profile(Package$initWithVersion$Tags) pkgCache::TagIterator tag(iterator_.TagList()); if (!tag.end()) { @@ -2144,10 +2124,6 @@ struct PackageNameOrdering : [tags_ addObject:[(NSString *)CYStringCreate(name) autorelease]]; if (role_ == nil && strncmp(name, "role::", 6) == 0 /*&& strcmp(name, "role::leaper") != 0*/) role_ = (NSString *) CYStringCreate(name + 6); - if (required_ && strncmp(name, "require::", 9) == 0 && ( - true - )) - required_ = false; ++tag; } while (!tag.end()); } @@ -2543,10 +2519,6 @@ struct PackageNameOrdering : return files; } -- (NSArray *) relationships { - return relationships_; -} - - (NSArray *) warnings { NSMutableArray *warnings([NSMutableArray arrayWithCapacity:4]); const char *name(iterator_.Name()); @@ -2632,21 +2604,16 @@ struct PackageNameOrdering : } - (Source *) source { - if (!cached_) { + if (source_ == nil) { @synchronized (database_) { if ([database_ era] != era_ || file_.end()) - source_ = nil; - else { - source_ = [database_ getSource:file_.File()]; - if (source_ != nil) - [source_ retain]; - } - - cached_ = true; + source_ = (Source *) [NSNull null]; + else + source_ = [([database_ getSource:file_.File()] ?: (Source *) [NSNull null]) retain]; } } - return source_; + return source_ == (Source *) [NSNull null] ? nil : source_; } - (NSString *) role { @@ -2757,29 +2724,41 @@ struct PackageNameOrdering : } - (void) clear { +@synchronized (database_) { pkgProblemResolver *resolver = [database_ resolver]; resolver->Clear(iterator_); - resolver->Protect(iterator_); -} + + pkgCacheFile &cache([database_ cache]); + cache->SetReInstall(iterator_, false); + cache->MarkKeep(iterator_, false); +} } - (void) install { +@synchronized (database_) { pkgProblemResolver *resolver = [database_ resolver]; resolver->Clear(iterator_); resolver->Protect(iterator_); + pkgCacheFile &cache([database_ cache]); + cache->SetReInstall(iterator_, false); cache->MarkInstall(iterator_, false); + pkgDepCache::StateCache &state((*cache)[iterator_]); if (!state.Install()) cache->SetReInstall(iterator_, true); -} +} } - (void) remove { +@synchronized (database_) { pkgProblemResolver *resolver = [database_ resolver]; resolver->Clear(iterator_); - resolver->Protect(iterator_); resolver->Remove(iterator_); - [database_ cache]->MarkDelete(iterator_, true); -} + resolver->Protect(iterator_); + + pkgCacheFile &cache([database_ cache]); + cache->SetReInstall(iterator_, false); + cache->MarkDelete(iterator_, true); +} } - (bool) isUnfilteredAndSearchedForBy:(NSString *)search { _profile(Package$isUnfilteredAndSearchedForBy) @@ -3418,6 +3397,19 @@ static NSString *Warning_; } } } CYPoolEnd() _trace(); } +- (void) clear { +@synchronized (self) { + delete resolver_; + resolver_ = new pkgProblemResolver(cache_); + + for (pkgCache::PkgIterator iterator(cache_->PkgBegin()); !iterator.end(); ++iterator) { + if (!cache_[iterator].Keep()) { + cache_->MarkKeep(iterator, false); + cache_->SetReInstall(iterator, false); + } + } +} } + - (void) configure { NSString *dpkg = [NSString stringWithFormat:@"dpkg --configure -a --status-fd %u", statusfd_]; system([dpkg UTF8String]); @@ -5298,6 +5290,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { target:self action:@selector(customButtonClicked) ]; + + [self reloadURL]; } - (bool) isLoading { @@ -6832,40 +6826,13 @@ freeing the view controllers on tab change */ [sections_ removeAllObjects]; [filtered_ removeAllObjects]; -#if 0 - typedef __gnu_cxx::hash_map SectionMap; - SectionMap sections; - sections.resize(64); -#else NSMutableDictionary *sections([NSMutableDictionary dictionaryWithCapacity:32]); -#endif _trace(); for (Package *package in packages) { NSString *name([package section]); NSString *key(name == nil ? @"" : name); -#if 0 - Section **section; - - _profile(SectionsView$reloadData$Section) - section = §ions[key]; - if (*section == nil) { - _profile(SectionsView$reloadData$Section$Allocate) - *section = [[[Section alloc] initWithName:name localize:YES] autorelease]; - _end - } - _end - - [*section addToCount]; - - _profile(SectionsView$reloadData$Filter) - if (![package valid] || ![package visible]) - continue; - _end - - [*section addToRow]; -#else Section *section; _profile(SectionsView$reloadData$Section) @@ -6886,16 +6853,10 @@ freeing the view controllers on tab change */ _end [section addToRow]; -#endif } _trace(); -#if 0 - for (SectionMap::const_iterator i(sections.begin()), e(sections.end()); i != e; ++i) - [sections_ addObject:i->second]; -#else [sections_ addObjectsFromArray:[sections allValues]]; -#endif [sections_ sortUsingSelector:@selector(compareByLocalized:)]; @@ -8459,16 +8420,7 @@ static _finline void _setHomePage(Cydia *self) { - (void) cancelAndClear:(bool)clear { @synchronized (self) { if (clear) { - // Clear all marks. - pkgCacheFile &cache([database_ cache]); - for (pkgCache::PkgIterator iterator = cache->PkgBegin(); !iterator.end(); ++iterator) { - // Unmark method taken from Synaptic Package Manager. - // Thanks for being sane, unlike Aptitude. - if (!cache[iterator].Keep()) { - cache->MarkKeep(iterator, false); - cache->SetReInstall(iterator, false); - } - } + [database_ clear]; // Stop queuing. Queuing_ = false; @@ -8479,8 +8431,7 @@ static _finline void _setHomePage(Cydia *self) { [[[self queueBadgeController] tabBarItem] setBadgeValue:UCLocalize("Q_D")]; } - // Show the changes in the current view. - [(CYNavigationController *) [tabbar_ selectedViewController] reloadData]; + [self _updateData]; [queueDelegate_ queueStatusDidChange]; } }