#include <errno.h>
#include <pcre.h>
-#include <ext/hash_map>
-
#include "UICaboodle/BrowserView.h"
#include "substrate.h"
pkgCache::VerFileIterator file_;
Source *source_;
- bool cached_;
bool parsed_;
CYString section_;
_transient NSString *section$_;
bool essential_;
- bool required_;
bool visible_;
bool obsolete_;
NSMutableArray *tags_;
NSString *role_;
- NSArray *relationships_;
-
NSMutableDictionary *metadata_;
_transient NSDate *firstSeen_;
_transient NSDate *lastSeen_;
- (NSString *) support;
- (NSArray *) files;
-- (NSArray *) relationships;
- (NSArray *) warnings;
- (NSArray *) applications;
if (role_ != nil)
[role_ release];
- if (relationships_ != nil)
- [relationships_ release];
if (metadata_ != nil)
[metadata_ release];
}
- (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 {
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()) {
[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());
}
return files;
}
-- (NSArray *) relationships {
- return relationships_;
-}
-
- (NSArray *) warnings {
NSMutableArray *warnings([NSMutableArray arrayWithCapacity:4]);
const char *name(iterator_.Name());
}
- (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 {
}
- (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)
}
} } 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]);
target:self
action:@selector(customButtonClicked)
];
+
+ [self reloadURL];
}
- (bool) isLoading {
[sections_ removeAllObjects];
[filtered_ removeAllObjects];
-#if 0
- typedef __gnu_cxx::hash_map<NSString *, Section *, NSStringMapHash, NSStringMapEqual> 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)
_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:)];
- (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;
[[[self queueBadgeController] tabBarItem] setBadgeValue:UCLocalize("Q_D")];
}
- // Show the changes in the current view.
- [(CYNavigationController *) [tabbar_ selectedViewController] reloadData];
+ [self _updateData];
[queueDelegate_ queueStatusDidChange];
}
}