diff --git a/MacPass/MPPluginRepository.m b/MacPass/MPPluginRepository.m index 53546ba7..f562fa7d 100644 --- a/MacPass/MPPluginRepository.m +++ b/MacPass/MPPluginRepository.m @@ -51,6 +51,7 @@ NSString *const MPPluginRepositoryDidUpdateAvailablePluginsNotification = @"com. self = [super init]; if(self) { _isInitialized = NO; + _lastDataFetchTime = NSDate.distantPast.timeIntervalSinceReferenceDate; [self fetchRepositoryDataCompletionHandler:^(NSArray * _Nonnull availablePlugins) { self.availablePlugins = availablePlugins; self.isInitialized = YES; diff --git a/MacPass/MPPluginRepositoryBrowserViewController.m b/MacPass/MPPluginRepositoryBrowserViewController.m index 7b4766ad..1b247bff 100644 --- a/MacPass/MPPluginRepositoryBrowserViewController.m +++ b/MacPass/MPPluginRepositoryBrowserViewController.m @@ -47,12 +47,12 @@ typedef NS_ENUM(NSUInteger, MPPluginTableColumn) { } - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { - return self.repositoryItems.count > 0 ? 100 : 0; + return self.repositoryItems.count; } - (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { NSTableCellView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self]; - MPPluginRepositoryItem *item = self.repositoryItems.firstObject; + MPPluginRepositoryItem *item = self.repositoryItems[row]; NSUInteger column = [tableView.tableColumns indexOfObjectIdenticalTo:tableColumn]; @@ -64,8 +64,8 @@ typedef NS_ENUM(NSUInteger, MPPluginTableColumn) { } else if(column == MPPluginTableColumnStatus) { MPPlugin *plugin = [MPPluginHost.sharedHost pluginWithBundleIdentifier:item.bundleIdentifier]; - if(!plugin) { - switch([plugin.shortVersionString compare:item.currentVersion]) { + if(plugin) { + switch([MPPluginVersionComparator compareVersion:plugin.shortVersionString toVersion:item.currentVersion]) { case NSOrderedSame: view.textField.stringValue = [NSString stringWithFormat:NSLocalizedString(@"PLUGIN_BROWSER_LATEST_VERSION_INSTALLED", "Status for an up-to-date plugin in the plugin browser")]; break; diff --git a/MacPass/MPPluginVersionComparator.m b/MacPass/MPPluginVersionComparator.m index fdbfcc67..b68ed055 100644 --- a/MacPass/MPPluginVersionComparator.m +++ b/MacPass/MPPluginVersionComparator.m @@ -5,12 +5,16 @@ // Created by Michael Starke on 05.10.18. // Copyright © 2018 HicknHack Software GmbH. All rights reserved. // +// Code is based upon SUStandardVersionComparator.h from Sparkle +// Changes include: +// * wildcard matching +// * correct handling of trailing parts (e.g. 3. == 3.0 == 3.0.0) +// #import "MPPluginVersionComparator.h" @implementation MPPluginVersionComparator - + (MPVersionCharacterType)typeOfCharacter:(NSString *)character { if([character isEqualToString:@"."]) { return kMPVersionCharacterTypeSeparator; @@ -114,7 +118,7 @@ longerResult = NSOrderedAscending; } - /* check if wildcard was last part, then the rest does not matter */ + /* check if wildcard was last part of shorter version, then the rest does not matter */ if(lastShortType == kMPVersionCharacterTypeWildcard) { return NSOrderedSame; } @@ -131,13 +135,12 @@ return longerResult; } } - // versions are considered the same as long as 0, separators or wildcards follow + /* Any separator or widlcard that is in the longer version is skippes since we do not have to match components anymore */ } } return NSOrderedSame; } - + (NSArray *)splitVersionString:(NSString *)versionString { if(versionString.length == 0) { return @[]; diff --git a/MacPass/PluginRepositoryBrowserView.xib b/MacPass/PluginRepositoryBrowserView.xib index 8301fea3..99f2a381 100644 --- a/MacPass/PluginRepositoryBrowserView.xib +++ b/MacPass/PluginRepositoryBrowserView.xib @@ -25,7 +25,7 @@ - + @@ -64,8 +64,8 @@ - - + + @@ -78,11 +78,11 @@ - + - + @@ -97,7 +97,7 @@ - + @@ -111,11 +111,11 @@ - + - + @@ -141,8 +141,8 @@ -