diff --git a/CHANGELIST.md b/CHANGELIST.md index 96bf200e..6888d4b6 100644 --- a/CHANGELIST.md +++ b/CHANGELIST.md @@ -56,6 +56,7 @@ - Ensure ordering in output site tags - Make site code formatting helper method - Better helper method organization +- Start supporting ordered tags and non-tags ### 2.2 (2021-12-30) - Fix Saturn header finding diff --git a/MPF.Library/InfoTool.cs b/MPF.Library/InfoTool.cs index 5101d7a0..cc45a25c 100644 --- a/MPF.Library/InfoTool.cs +++ b/MPF.Library/InfoTool.cs @@ -912,8 +912,7 @@ namespace MPF.Library // Add all special fields before any contents info.CommonDiscInfo.Contents = string.Join( - "\n", info.CommonDiscInfo.ContentsSpecialFields - .OrderBy(kvp => kvp.Key) + "\n", OrderContentTags(info.CommonDiscInfo.ContentsSpecialFields) .Where(kvp => !string.IsNullOrWhiteSpace(kvp.Value)) .Select(FormatSiteTag) .Where(s => !string.IsNullOrEmpty(s)) @@ -1875,6 +1874,64 @@ namespace MPF.Library } } + /// + /// Order comment code tags according to Redump requirements + /// + /// Ordered list of KeyValuePairs representing the tags and values + private static List> OrderCommentTags(Dictionary tags) + { + var sorted = new List>(); + + // If the input is invalid, just return an empty set + if (tags == null || tags.Count == 0) + return sorted; + + return sorted; + } + + /// + /// Order content code tags according to Redump requirements + /// + /// Ordered list of KeyValuePairs representing the tags and values + private static List> OrderContentTags(Dictionary tags) + { + var sorted = new List>(); + + // If the input is invalid, just return an empty set + if (tags == null || tags.Count == 0) + return sorted; + + // Games + if (tags.ContainsKey(SiteCode.Games)) + sorted.Add(new KeyValuePair(SiteCode.Games, tags[SiteCode.Games])); + if (tags.ContainsKey(SiteCode.NetYarozeGames)) + sorted.Add(new KeyValuePair(SiteCode.NetYarozeGames, tags[SiteCode.NetYarozeGames])); + + // Demos + if (tags.ContainsKey(SiteCode.PlayableDemos)) + sorted.Add(new KeyValuePair(SiteCode.PlayableDemos, tags[SiteCode.PlayableDemos])); + if (tags.ContainsKey(SiteCode.RollingDemos)) + sorted.Add(new KeyValuePair(SiteCode.RollingDemos, tags[SiteCode.RollingDemos])); + if (tags.ContainsKey(SiteCode.TechDemos)) + sorted.Add(new KeyValuePair(SiteCode.TechDemos, tags[SiteCode.TechDemos])); + + // Video + if (tags.ContainsKey(SiteCode.GameFootage)) + sorted.Add(new KeyValuePair(SiteCode.GameFootage, tags[SiteCode.GameFootage])); + if (tags.ContainsKey(SiteCode.Videos)) + sorted.Add(new KeyValuePair(SiteCode.Videos, tags[SiteCode.Videos])); + + // Miscellaneous + if (tags.ContainsKey(SiteCode.Patches)) + sorted.Add(new KeyValuePair(SiteCode.Patches, tags[SiteCode.Patches])); + if (tags.ContainsKey(SiteCode.Savegames)) + sorted.Add(new KeyValuePair(SiteCode.Savegames, tags[SiteCode.Savegames])); + if (tags.ContainsKey(SiteCode.Extras)) + sorted.Add(new KeyValuePair(SiteCode.Extras, tags[SiteCode.Extras])); + + return sorted; + } + #endregion } } diff --git a/MPF/ViewModels/DiscInformationViewModel.cs b/MPF/ViewModels/DiscInformationViewModel.cs index edb37e23..3cb06a69 100644 --- a/MPF/ViewModels/DiscInformationViewModel.cs +++ b/MPF/ViewModels/DiscInformationViewModel.cs @@ -268,24 +268,33 @@ namespace MPF.GUI.ViewModels // Content Fields if (SubmissionInfo.CommonDiscInfo.ContentsSpecialFields != null) { - if (SubmissionInfo.CommonDiscInfo.ContentsSpecialFields.ContainsKey(SiteCode.Extras)) - Parent.ExtrasTextBox.Text = SubmissionInfo.CommonDiscInfo.ContentsSpecialFields[SiteCode.Extras]; - if (SubmissionInfo.CommonDiscInfo.ContentsSpecialFields.ContainsKey(SiteCode.GameFootage)) - Parent.GameFootageTextBox.Text = SubmissionInfo.CommonDiscInfo.ContentsSpecialFields[SiteCode.GameFootage]; + // Games + if (SubmissionInfo.CommonDiscInfo.ContentsSpecialFields.ContainsKey(SiteCode.Games)) + Parent.GamesTextBox.Text = SubmissionInfo.CommonDiscInfo.ContentsSpecialFields[SiteCode.Games]; if (SubmissionInfo.CommonDiscInfo.ContentsSpecialFields.ContainsKey(SiteCode.NetYarozeGames)) Parent.NetYarozeGamesTextBox.Text = SubmissionInfo.CommonDiscInfo.ContentsSpecialFields[SiteCode.NetYarozeGames]; - if (SubmissionInfo.CommonDiscInfo.ContentsSpecialFields.ContainsKey(SiteCode.Patches)) - Parent.PatchesTextBox.Text = SubmissionInfo.CommonDiscInfo.ContentsSpecialFields[SiteCode.Patches]; + + // Demos if (SubmissionInfo.CommonDiscInfo.ContentsSpecialFields.ContainsKey(SiteCode.PlayableDemos)) Parent.PlayableDemosTextBox.Text = SubmissionInfo.CommonDiscInfo.ContentsSpecialFields[SiteCode.PlayableDemos]; if (SubmissionInfo.CommonDiscInfo.ContentsSpecialFields.ContainsKey(SiteCode.RollingDemos)) Parent.RollingDemosTextBox.Text = SubmissionInfo.CommonDiscInfo.ContentsSpecialFields[SiteCode.RollingDemos]; - if (SubmissionInfo.CommonDiscInfo.ContentsSpecialFields.ContainsKey(SiteCode.Savegames)) - Parent.SavegamesTextBox.Text = SubmissionInfo.CommonDiscInfo.ContentsSpecialFields[SiteCode.Savegames]; if (SubmissionInfo.CommonDiscInfo.ContentsSpecialFields.ContainsKey(SiteCode.TechDemos)) Parent.TechDemosTextBox.Text = SubmissionInfo.CommonDiscInfo.ContentsSpecialFields[SiteCode.TechDemos]; + + // Video + if (SubmissionInfo.CommonDiscInfo.ContentsSpecialFields.ContainsKey(SiteCode.GameFootage)) + Parent.GameFootageTextBox.Text = SubmissionInfo.CommonDiscInfo.ContentsSpecialFields[SiteCode.GameFootage]; if (SubmissionInfo.CommonDiscInfo.ContentsSpecialFields.ContainsKey(SiteCode.Videos)) Parent.VideosTextBox.Text = SubmissionInfo.CommonDiscInfo.ContentsSpecialFields[SiteCode.Videos]; + + // Miscellaneous + if (SubmissionInfo.CommonDiscInfo.ContentsSpecialFields.ContainsKey(SiteCode.Patches)) + Parent.PatchesTextBox.Text = SubmissionInfo.CommonDiscInfo.ContentsSpecialFields[SiteCode.Patches]; + if (SubmissionInfo.CommonDiscInfo.ContentsSpecialFields.ContainsKey(SiteCode.Savegames)) + Parent.SavegamesTextBox.Text = SubmissionInfo.CommonDiscInfo.ContentsSpecialFields[SiteCode.Savegames]; + if (SubmissionInfo.CommonDiscInfo.ContentsSpecialFields.ContainsKey(SiteCode.Extras)) + Parent.ExtrasTextBox.Text = SubmissionInfo.CommonDiscInfo.ContentsSpecialFields[SiteCode.Extras]; } } diff --git a/MPF/Windows/DiscInformationWindow.xaml b/MPF/Windows/DiscInformationWindow.xaml index b94e3dea..60f79ca0 100644 --- a/MPF/Windows/DiscInformationWindow.xaml +++ b/MPF/Windows/DiscInformationWindow.xaml @@ -229,24 +229,34 @@ - - + - + + - + + + + + + + + diff --git a/RedumpLib/Data/Enumerations.cs b/RedumpLib/Data/Enumerations.cs index a2ca5184..5f24fe89 100644 --- a/RedumpLib/Data/Enumerations.cs +++ b/RedumpLib/Data/Enumerations.cs @@ -3465,6 +3465,10 @@ namespace RedumpLib.Data [HumanReadable(ShortName = "[T:GF]", LongName = "Game Footage:")] GameFootage, + // TODO: This doesn't have a site tag yet + [HumanReadable(ShortName = "Games:", LongName = "Games:")] + Games, + [HumanReadable(ShortName = "[T:G]", LongName = "Genre:")] Genre,