40 lines
1.5 KiB
Plaintext
40 lines
1.5 KiB
Plaintext
|
// This file Copyright © 2023 Transmission authors and contributors.
|
||
|
// It may be used under the MIT (SPDX: MIT) license.
|
||
|
// License text can be found in the licenses/ folder.
|
||
|
|
||
|
#import "VersionComparator.h"
|
||
|
|
||
|
@implementation VersionComparator
|
||
|
- (NSComparisonResult)compareVersion:(NSString*)versionA toVersion:(NSString*)versionB
|
||
|
{
|
||
|
// Transmission version format follows:
|
||
|
// 14714+major.minor.patch&beta
|
||
|
// 5.0.1-dev -> 14719.0.100
|
||
|
// 5.0.1-beta.1 -> 14719.0.101
|
||
|
// 5.0.1 -> 14719.0.199
|
||
|
NSArray<NSString*>* versionBComponents = [versionB componentsSeparatedByString:@"."];
|
||
|
if (versionBComponents.count > 2 && versionBComponents[2].integerValue % 100 != 99 &&
|
||
|
![NSUserDefaults.standardUserDefaults boolForKey:@"AutoUpdateBeta"] &&
|
||
|
![[[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString*)kCFBundleVersionKey] isEqualToString:versionB])
|
||
|
{
|
||
|
// pre-releases are ignored
|
||
|
return NSOrderedDescending;
|
||
|
}
|
||
|
NSArray<NSString*>* versionAComponents = [versionA componentsSeparatedByString:@"."];
|
||
|
for (NSUInteger idx = 0; versionAComponents.count > idx || versionBComponents.count > idx; idx++)
|
||
|
{
|
||
|
NSInteger vA = versionAComponents.count > idx ? versionAComponents[idx].integerValue : 0;
|
||
|
NSInteger vB = versionBComponents.count > idx ? versionBComponents[idx].integerValue : 0;
|
||
|
if (vA < vB)
|
||
|
{
|
||
|
return NSOrderedAscending;
|
||
|
}
|
||
|
if (vA > vB)
|
||
|
{
|
||
|
return NSOrderedDescending;
|
||
|
}
|
||
|
}
|
||
|
return NSOrderedSame;
|
||
|
}
|
||
|
@end
|