Report better version in About MacVim, and store last used version

Use a better format for the version reporting in the "About MacVim" page
to be clear what's the Vim version, and what's specifically the MacVim
release number.

Also, store the last used MacVim version number. This isn't used right
now but may be used later for showing up a "What's New" page when
updating to a new version, primarily for non-Sparkle users (e.g.
Homebrew builds) so they can still be notified when something changed.
Storing this number now allows us to know in a later build whether the
user has upgraded to the build or starting a new build from fresh (where
we may not want to show the "What's New" page as everything would be
new).

Part of addressing #1293
This commit is contained in:
Yee Cheng Chin
2023-02-02 17:02:44 -08:00
parent 17f3c3ddf4
commit 02092cfe96
4 changed files with 49 additions and 1 deletions

View File

@@ -263,6 +263,7 @@ fsEventCallback(ConstFSEventStreamRef streamRef,
[NSNumber numberWithBool:NO], MMRendererClipToRowKey,
[NSNumber numberWithBool:YES], MMAllowForceClickLookUpKey,
[NSNumber numberWithBool:NO], MMUpdaterPrereleaseChannelKey,
@"", MMLastUsedBundleVersionKey,
nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dict];
@@ -459,6 +460,51 @@ fsEventCallback(ConstFSEventStreamRef streamRef,
[self addInputSourceChangedObserver];
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
NSString *lastUsedVersion = [ud stringForKey:MMLastUsedBundleVersionKey];
NSString *currentVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:
@"CFBundleVersion"];
// This will be used for showing a "What's New" dialog box in the future. For
// now, just update the stored version for future use so later versions will
// be able to tell whether to show this dialog box or not.
if (currentVersion && currentVersion.length != 0) {
if (!lastUsedVersion || [lastUsedVersion length] == 0) {
[ud setValue:currentVersion forKey:MMLastUsedBundleVersionKey];
} else {
// If the current version is larger, set that to be stored. Don't
// want to do it otherwise to prevent testing older versions flipping
// the stored version back to an old one.
NSArray<NSString*> *lastUsedVersionItems = [lastUsedVersion componentsSeparatedByString:@"."];
NSArray<NSString*> *currentVersionItems = [currentVersion componentsSeparatedByString:@"."];
// Compare two arrays lexographically. We just assume that version
// numbers are also X.Y.Z with no "beta" etc texts.
bool currentVersionLarger = NO;
for (int i = 0; i < currentVersionItems.count && i < lastUsedVersionItems.count; i++) {
if (i >= currentVersionItems.count) {
currentVersionLarger = NO;
break;
}
if (i >= lastUsedVersionItems.count) {
currentVersionLarger = YES;
break;
}
if (currentVersionItems[i].integerValue > lastUsedVersionItems[i].integerValue) {
currentVersionLarger = YES;
break;
}
else if (currentVersionItems[i].integerValue < lastUsedVersionItems[i].integerValue) {
currentVersionLarger = NO;
break;
}
}
if (currentVersionLarger) {
[ud setValue:currentVersion forKey:MMLastUsedBundleVersionKey];
}
}
}
ASLogInfo(@"MacVim finished launching");
}

View File

@@ -53,7 +53,7 @@
NSString *marketingVersion = [[NSBundle mainBundle]
objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
NSString *title = [NSString stringWithFormat:
@"Custom Version %@ (%@)", marketingVersion, version];
@"Vim %@ (MacVim r%@)", marketingVersion, version];
[self orderFrontStandardAboutPanelWithOptions:
[NSDictionary dictionaryWithObjectsAndKeys:

View File

@@ -64,6 +64,7 @@ extern NSString *MMCmdLineAlignBottomKey;
extern NSString *MMRendererClipToRowKey;
extern NSString *MMAllowForceClickLookUpKey;
extern NSString *MMUpdaterPrereleaseChannelKey;
extern NSString *MMLastUsedBundleVersionKey; // The last used version of MacVim before this launch
// Enum for MMUntitledWindowKey

View File

@@ -60,6 +60,7 @@ NSString *MMCmdLineAlignBottomKey = @"MMCmdLineAlignBottom";
NSString *MMRendererClipToRowKey = @"MMRendererClipToRow";
NSString *MMAllowForceClickLookUpKey = @"MMAllowForceClickLookUp";
NSString *MMUpdaterPrereleaseChannelKey = @"MMUpdaterPrereleaseChannel";
NSString *MMLastUsedBundleVersionKey = @"MMLastUsedBundleVersion";
@implementation NSIndexSet (MMExtras)