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,