From 531da8a1c0760c8ebf121ac83ba4c840ead9e443 Mon Sep 17 00:00:00 2001 From: SamusAranX Date: Fri, 12 May 2023 01:56:37 +0200 Subject: Changed LastPlayed field from string to nullable DateTime (#4861) * Changed LastPlayed field from string to nullable DateTime Added ApplicationData.LastPlayedString property Added NullableDateTimeConverter for the DateTime->string conversion in Avalonia * Added migration from string-based last_played to DateTime-based last_played_utc * Updated comment style * Added MarkupExtension to NullableDateTimeConverter and changed its usage Cleaned up leftover usings * Missed one comment --- src/Ryujinx.Ui.Common/App/ApplicationLibrary.cs | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'src/Ryujinx.Ui.Common/App/ApplicationLibrary.cs') diff --git a/src/Ryujinx.Ui.Common/App/ApplicationLibrary.cs b/src/Ryujinx.Ui.Common/App/ApplicationLibrary.cs index b7b57f1a..0407036a 100644 --- a/src/Ryujinx.Ui.Common/App/ApplicationLibrary.cs +++ b/src/Ryujinx.Ui.Common/App/ApplicationLibrary.cs @@ -414,21 +414,28 @@ namespace Ryujinx.Ui.App.Common ApplicationMetadata appMetadata = LoadAndSaveMetaData(titleId, appMetadata => { appMetadata.Title = titleName; - }); - if (appMetadata.LastPlayed != "Never") - { - if (!DateTime.TryParse(appMetadata.LastPlayed, out _)) + if (appMetadata.LastPlayedOld == default || appMetadata.LastPlayed.HasValue) { - Logger.Warning?.Print(LogClass.Application, $"Last played datetime \"{appMetadata.LastPlayed}\" is invalid for current system culture, skipping (did current culture change?)"); + // Don't do the migration if last_played doesn't exist or last_played_utc already has a value. + return; + } - appMetadata.LastPlayed = "Never"; + // Migrate from string-based last_played to DateTime-based last_played_utc. + if (DateTime.TryParse(appMetadata.LastPlayedOld, out DateTime lastPlayedOldParsed)) + { + Logger.Info?.Print(LogClass.Application, $"last_played found: \"{appMetadata.LastPlayedOld}\", migrating to last_played_utc"); + appMetadata.LastPlayed = lastPlayedOldParsed; + + // Migration successful: deleting last_played from the metadata file. + appMetadata.LastPlayedOld = default; } else { - appMetadata.LastPlayed = appMetadata.LastPlayed[..^3]; + // Migration failed: emitting warning but leaving the unparsable value in the metadata file so the user can fix it. + Logger.Warning?.Print(LogClass.Application, $"Last played string \"{appMetadata.LastPlayedOld}\" is invalid for current system culture, skipping (did current culture change?)"); } - } + }); ApplicationData data = new() { -- cgit v1.2.3