⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cydia.mm

📁 iPhone installation application
💻 MM
📖 第 1 页 / 共 5 页
字号:
- (NSString *) version {
    return version_;
}

- (NSString *) defaultIcon {
    return defaultIcon_;
}

@end
/* }}} */
/* Relationship Class {{{ */
@interface Relationship : NSObject {
    NSString *type_;
    NSString *id_;
}

- (NSString *) type;
- (NSString *) id;
- (NSString *) name;

@end

@implementation Relationship

- (void) dealloc {
    [type_ release];
    [id_ release];
    [super dealloc];
}

- (NSString *) type {
    return type_;
}

- (NSString *) id {
    return id_;
}

- (NSString *) name {
    _assert(false);
    return nil;
}

@end
/* }}} */
/* Package Class {{{ */
NSString *Scour(const char *field, const char *begin, const char *end) {
    size_t i(0), l(strlen(field));

    for (;;) {
        const char *name = begin + i;
        const char *colon = name + l;
        const char *value = colon + 1;

        if (
            value < end &&
            *colon == ':' &&
            memcmp(name, field, l) == 0
        ) {
            while (value != end && value[0] == ' ')
                ++value;
            const char *line = std::find(value, end, '\n');
            while (line != value && line[-1] == ' ')
                --line;

            return [NSString stringWithUTF8Bytes:value length:(line - value)];
        } else {
            begin = std::find(begin, end, '\n');
            if (begin == end)
                return nil;
            ++begin;
        }
    }
}

@interface Package : NSObject {
    pkgCache::PkgIterator iterator_;
    _transient Database *database_;
    pkgCache::VerIterator version_;
    pkgCache::VerFileIterator file_;

    Source *source_;
    bool cached_;

    NSString *latest_;
    NSString *installed_;

    NSString *id_;
    NSString *name_;
    NSString *tagline_;
    NSString *icon_;
    NSString *depiction_;
    NSString *homepage_;
    Address *sponsor_;
    Address *author_;
    NSArray *tags_;
    NSString *role_;

    NSArray *relationships_;
}

- (Package *) initWithIterator:(pkgCache::PkgIterator)iterator database:(Database *)database;
+ (Package *) packageWithIterator:(pkgCache::PkgIterator)iterator database:(Database *)database;

- (pkgCache::PkgIterator) iterator;

- (NSString *) section;
- (Address *) maintainer;
- (size_t) size;
- (NSString *) description;
- (NSString *) index;

- (NSDate *) seen;

- (NSString *) latest;
- (NSString *) installed;

- (BOOL) valid;
- (BOOL) upgradableAndEssential:(BOOL)essential;
- (BOOL) essential;
- (BOOL) broken;
- (BOOL) unfiltered;
- (BOOL) visible;

- (BOOL) half;
- (BOOL) halfConfigured;
- (BOOL) halfInstalled;
- (BOOL) hasMode;
- (NSString *) mode;

- (NSString *) id;
- (NSString *) name;
- (NSString *) tagline;
- (NSString *) icon;
- (NSString *) homepage;
- (NSString *) depiction;
- (Address *) author;

- (NSArray *) relationships;

- (Source *) source;
- (NSString *) role;

- (BOOL) matches:(NSString *)text;

- (bool) hasSupportingRole;
- (BOOL) hasTag:(NSString *)tag;
- (NSString *) primaryPurpose;

- (NSComparisonResult) compareByName:(Package *)package;
- (NSComparisonResult) compareBySection:(Package *)package;
- (NSComparisonResult) compareBySectionAndName:(Package *)package;
- (NSComparisonResult) compareForChanges:(Package *)package;

- (void) install;
- (void) remove;

- (NSNumber *) isUnfilteredAndSearchedForBy:(NSString *)search;
- (NSNumber *) isInstalledAndVisible:(NSNumber *)number;
- (NSNumber *) isVisiblyUninstalledInSection:(NSString *)section;
- (NSNumber *) isVisibleInSource:(Source *)source;

@end

@implementation Package

- (void) dealloc {
    if (source_ != nil)
        [source_ release];

    [latest_ release];
    if (installed_ != nil)
        [installed_ release];

    [id_ release];
    if (name_ != nil)
        [name_ release];
    [tagline_ release];
    if (icon_ != nil)
        [icon_ release];
    if (depiction_ != nil)
        [depiction_ release];
    if (homepage_ != nil)
        [homepage_ release];
    if (sponsor_ != nil)
        [sponsor_ release];
    if (author_ != nil)
        [author_ release];
    if (tags_ != nil)
        [tags_ release];
    if (role_ != nil)
        [role_ release];

    if (relationships_ != nil)
        [relationships_ release];

    [super dealloc];
}

+ (NSArray *) _attributeKeys {
    return [NSArray arrayWithObjects:@"author", @"depiction", @"description", @"essential", @"homepage", @"icon", @"id", @"installed", @"latest", @"maintainer", @"name", @"section", @"size", @"source", @"sponsor", @"tagline", nil];
}

- (NSArray *) attributeKeys {
    return [[self class] _attributeKeys];
}

+ (BOOL) isKeyExcludedFromWebScript:(const char *)name {
    return ![[self _attributeKeys] containsObject:[NSString stringWithUTF8String:name]] && [super isKeyExcludedFromWebScript:name];
}

- (Package *) initWithIterator:(pkgCache::PkgIterator)iterator database:(Database *)database {
    if ((self = [super init]) != nil) {
        iterator_ = iterator;
        database_ = database;

        version_ = [database_ policy]->GetCandidateVer(iterator_);
        latest_ = version_.end() ? nil : [StripVersion([NSString stringWithUTF8String:version_.VerStr()]) retain];

        if (!version_.end())
            file_ = version_.FileList();
        else {
            pkgCache &cache([database_ cache]);
            file_ = pkgCache::VerFileIterator(cache, cache.VerFileP);
        }

        pkgCache::VerIterator current = iterator_.CurrentVer();
        installed_ = current.end() ? nil : [StripVersion([NSString stringWithUTF8String:current.VerStr()]) retain];

        id_ = [[[NSString stringWithUTF8String:iterator_.Name()] lowercaseString] retain];

        if (!file_.end()) {
            pkgRecords::Parser *parser = &[database_ records]->Lookup(file_);

            const char *begin, *end;
            parser->GetRec(begin, end);

            name_ = Scour("Name", begin, end);
            if (name_ != nil)
                name_ = [name_ retain];
            tagline_ = [[NSString stringWithUTF8String:parser->ShortDesc().c_str()] retain];
            icon_ = Scour("Icon", begin, end);
            if (icon_ != nil)
                icon_ = [icon_ retain];
            depiction_ = Scour("Depiction", begin, end);
            if (depiction_ != nil)
                depiction_ = [depiction_ retain];
            homepage_ = Scour("Homepage", begin, end);
            if (homepage_ == nil)
                homepage_ = Scour("Website", begin, end);
            if ([homepage_ isEqualToString:depiction_])
                homepage_ = nil;
            if (homepage_ != nil)
                homepage_ = [homepage_ retain];
            NSString *sponsor = Scour("Sponsor", begin, end);
            if (sponsor != nil)
                sponsor_ = [[Address addressWithString:sponsor] retain];
            NSString *author = Scour("Author", begin, end);
            if (author != nil)
                author_ = [[Address addressWithString:author] retain];
            NSString *tags = Scour("Tag", begin, end);
            if (tags != nil)
                tags_ = [[tags componentsSeparatedByString:@", "] retain];
        }

        if (tags_ != nil)
            for (int i(0), e([tags_ count]); i != e; ++i) {
                NSString *tag = [tags_ objectAtIndex:i];
                if ([tag hasPrefix:@"role::"]) {
                    role_ = [[tag substringFromIndex:6] retain];
                    break;
                }
            }

        NSMutableDictionary *metadata = [Packages_ objectForKey:id_];
        if (metadata == nil || [metadata count] == 0) {
            metadata = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                now_, @"FirstSeen",
            nil];

            [Packages_ setObject:metadata forKey:id_];
            Changed_ = true;
        }
    } return self;
}

+ (Package *) packageWithIterator:(pkgCache::PkgIterator)iterator database:(Database *)database {
    return [[[Package alloc]
        initWithIterator:iterator 
        database:database
    ] autorelease];
}

- (pkgCache::PkgIterator) iterator {
    return iterator_;
}

- (NSString *) section {
    const char *section = iterator_.Section();
    if (section == NULL)
        return nil;

    NSString *name = [[NSString stringWithUTF8String:section] stringByReplacingCharacter:' ' withCharacter:'_'];

  lookup:
    if (NSDictionary *value = [SectionMap_ objectForKey:name])
        if (NSString *rename = [value objectForKey:@"Rename"]) {
            name = rename;
            goto lookup;
        }

    return [name stringByReplacingCharacter:'_' withCharacter:' '];
}

- (Address *) maintainer {
    if (file_.end())
        return nil;
    pkgRecords::Parser *parser = &[database_ records]->Lookup(file_);
    return [Address addressWithString:[NSString stringWithUTF8String:parser->Maintainer().c_str()]];
}

- (size_t) size {
    return version_.end() ? 0 : version_->InstalledSize;
}

- (NSString *) description {
    if (file_.end())
        return nil;
    pkgRecords::Parser *parser = &[database_ records]->Lookup(file_);
    NSString *description([NSString stringWithUTF8String:parser->LongDesc().c_str()]);

    NSArray *lines = [description componentsSeparatedByString:@"\n"];
    NSMutableArray *trimmed = [NSMutableArray arrayWithCapacity:([lines count] - 1)];
    if ([lines count] < 2)
        return nil;

    NSCharacterSet *whitespace = [NSCharacterSet whitespaceCharacterSet];
    for (size_t i(1); i != [lines count]; ++i) {
        NSString *trim = [[lines objectAtIndex:i] stringByTrimmingCharactersInSet:whitespace];
        [trimmed addObject:trim];
    }

    return [trimmed componentsJoinedByString:@"\n"];
}

- (NSString *) index {
    NSString *index = [[[self name] substringToIndex:1] uppercaseString];
    return [index length] != 0 && isalpha([index characterAtIndex:0]) ? index : @"123";
}

- (NSDate *) seen {
    return [[Packages_ objectForKey:id_] objectForKey:@"FirstSeen"];
}

- (NSString *) latest {
    return latest_;
}

- (NSString *) installed {
    return installed_;
}

- (BOOL) valid {
    return !version_.end();
}

- (BOOL) upgradableAndEssential:(BOOL)essential {
    pkgCache::VerIterator current = iterator_.CurrentVer();

    if (current.end())
        return essential && [self essential];
    else {
        pkgCache::VerIterator candidate = [database_ policy]->GetCandidateVer(iterator_);
        return !candidate.end() && candidate != current;
    }
}

- (BOOL) essential {
    return (iterator_->Flags & pkgCache::Flag::Essential) == 0 ? NO : YES;
}

- (BOOL) broken {
    return [database_ cache][iterator_].InstBroken();
}

- (BOOL) unfiltered {
    NSString *section = [self section];
    return section == nil || isSectionVisible(section);
}

- (BOOL) visible {
    return [self hasSupportingRole] && [self unfiltered];
}

- (BOOL) half {
    unsigned char current = iterator_->CurrentState;
    return current == pkgCache::State::HalfConfigured || current == pkgCache::State::HalfInstalled;
}

- (BOOL) halfConfigured {
    return iterator_->CurrentState == pkgCache::State::HalfConfigured;
}

- (BOOL) halfInstalled {
    return iterator_->CurrentState == pkgCache::State::HalfInstalled;
}

- (BOOL) hasMode {
    pkgDepCache::StateCache &state([database_ cache][iterator_]);
    return state.Mode != pkgDepCache::ModeKeep;
}

- (NSString *) mode {
    pkgDepCache::StateCache &state([database_ cache][iterator_]);

    switch (state.Mode) {
        case pkgDepCache::ModeDelete:
            if ((state.iFlags & pkgDepCache::Purge) != 0)
                return @"Purge";
            else
                return @"Remove";
            _assert(false);
        case pkgDepCache::ModeKeep:
            if ((state.iFlags & pkgDepCache::AutoKept) != 0)
                return nil;
            else
                return nil;
            _assert(false);
        case pkgDepCache::ModeInstall:
            if ((state.iFlags & pkgDepCache::ReInstall) != 0)
                return @"Reinstall";
            else switch (state.Status) {
                case -1:
                    return @"Downgrade";
                case 0:
                    return @"Install";
                case 1:
                    return @"Upgrade";
                case 2:
                    return @"New Install";
                default:
                    _assert(false);
            }
        default:
            _assert(false);
    }
}

- (NSString *) id {
    return id_;
}

- (NSString *) name {
    return name_ == nil ? id_ : name_;
}

- (NSString *) tagline {
    return tagline_;
}

- (NSString *) icon {
    return icon_;
}

- (NSString *) homepage {
    return homepage_;
}

- (NSString *) depiction {
    return depiction_;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -