diff --git a/Knossos.NET/Classes/ModTags.cs b/Knossos.NET/Classes/ModTags.cs
index 2a7ef542..2c3537b1 100644
--- a/Knossos.NET/Classes/ModTags.cs
+++ b/Knossos.NET/Classes/ModTags.cs
@@ -27,6 +27,11 @@ public void AddFilter(string filter)
Filters.Add(filter);
}
+ public void RemoveFilter(string filter)
+ {
+ Filters.Remove(filter);
+ }
+
///
/// Check if a filter exist in this modid filterlist
/// Case insensitive
@@ -95,6 +100,7 @@ public static class ModTags
///
public enum Filters
{
+ Hidden,
Total_Conversion,
Retail_FS2,
FS2_MOD,
@@ -199,6 +205,26 @@ public static void AddModFilter(string id, string filter)
}
}
+ ///
+ /// Removes a mod filter
+ ///
+ ///
+ ///
+ public static void RemoveModFilter(string id, string filter)
+ {
+ for (int i = 0; i < modTags.Count(); i++)
+ {
+ if (modTags[i].ModID == id)
+ {
+ if (modTags[i].FilterExist(filter))
+ {
+ modTags[i].RemoveFilter(filter);
+ break;
+ }
+ }
+ }
+ }
+
///
/// Adds a mod tag to the list
/// If the id and tag dosent exist already
diff --git a/Knossos.NET/Models/GlobalSettings.cs b/Knossos.NET/Models/GlobalSettings.cs
index 23604de3..45129d52 100644
--- a/Knossos.NET/Models/GlobalSettings.cs
+++ b/Knossos.NET/Models/GlobalSettings.cs
@@ -11,6 +11,8 @@
using Knossos.NET.ViewModels;
using System.Threading.Tasks;
using System.Collections.Generic;
+using System.Linq;
+using Knossos.NET.Views;
namespace Knossos.NET.Models
{
@@ -121,6 +123,8 @@ public AutoUpdateFsoBuilds(bool stable = false, bool rc = false, bool nightly =
public AutoUpdateFsoBuilds autoUpdateBuilds { get; set; } = new AutoUpdateFsoBuilds();
[JsonPropertyName("warn_new_settings_system")]
public bool warnNewSettingsSystem { get; set; } = true;
+ [JsonPropertyName("hidden_mod_ids")]
+ public List hiddenModIds { get; set; } = new List();
[JsonIgnore]
private bool _closeToTray { get; set; } = false;
[JsonPropertyName("close_to_tray")]
@@ -686,7 +690,15 @@ public void Load()
portableFsoPreferences = tempSettings.portableFsoPreferences;
closeToTray = tempSettings.closeToTray;
ignoredLauncherUpdates = tempSettings.ignoredLauncherUpdates;
-
+ hiddenModIds = tempSettings.hiddenModIds;
+ if (hiddenModIds.Any())
+ {
+ foreach (var hiddenMod in hiddenModIds)
+ {
+ ModTags.AddModFilter(hiddenMod, "Hidden");
+ }
+ MainWindowViewModel.Instance?.InstalledModsView?.ResetFilters();
+ }
ReadFS2IniValues();
Log.Add(Log.LogSeverity.Information, "GlobalSettings.Load()", "Global settings have been loaded");
diff --git a/Knossos.NET/ViewModels/ModListViewModel.cs b/Knossos.NET/ViewModels/ModListViewModel.cs
index 5c54f4ea..7bb349b9 100644
--- a/Knossos.NET/ViewModels/ModListViewModel.cs
+++ b/Knossos.NET/ViewModels/ModListViewModel.cs
@@ -108,15 +108,32 @@ private void ApplyFilters()
}
}
//Filters
- if (visibility && MainWindowViewModel.Instance != null && MainWindowViewModel.Instance.tagFilter.Any())
+ if (ModTags.IsFilterPresentInModID(card.ID, "Hidden"))
{
visibility = false;
- foreach (var filter in MainWindowViewModel.Instance.tagFilter)
+ if (MainWindowViewModel.Instance != null && MainWindowViewModel.Instance.tagFilter.FirstOrDefault(f => f == "Hidden") != null)
{
- if (card.ID != null && ModTags.IsFilterPresentInModID(card.ID, filter))
+ visibility = true;
+ }
+ }
+ else
+ {
+ if (MainWindowViewModel.Instance != null && MainWindowViewModel.Instance.tagFilter.Any())
+ {
+ visibility = false;
+ foreach (var filter in MainWindowViewModel.Instance.tagFilter)
{
- visibility = true;
- break;
+ if(filter == "Hidden")
+ {
+ if(MainWindowViewModel.Instance.tagFilter.Count == 1)
+ visibility = true;
+ continue;
+ }
+ if (card.ID != null && ModTags.IsFilterPresentInModID(card.ID, filter))
+ {
+ visibility = true;
+ break;
+ }
}
}
}
@@ -203,6 +220,16 @@ public void OpenTab()
BuildFilterString();
}
+ ///
+ /// Reset currently selected filters
+ ///
+ public void ResetFilters()
+ {
+ ModListView.Instance?.GenerateFilterButtons();
+ MainWindowViewModel.Instance?.tagFilter.Clear();
+ ApplyFilters();
+ }
+
public void CloseTab()
{
if (MainWindowViewModel.Instance != null)
diff --git a/Knossos.NET/ViewModels/Windows/ModSettingsViewModel.cs b/Knossos.NET/ViewModels/Windows/ModSettingsViewModel.cs
index d6570302..b9e00cc9 100644
--- a/Knossos.NET/ViewModels/Windows/ModSettingsViewModel.cs
+++ b/Knossos.NET/ViewModels/Windows/ModSettingsViewModel.cs
@@ -57,6 +57,8 @@ public partial class ModSettingsViewModel : ViewModelBase
internal bool noIngameOptions = false;
[ObservableProperty]
internal bool ingameOptionsFileExist = false;
+ [ObservableProperty]
+ internal bool userHidden = false;
public ModSettingsViewModel()
{
@@ -95,6 +97,8 @@ public ModSettingsViewModel(Mod modJson, ModCardViewModel? modCard=null)
compressed = modJson.modSettings.isCompressed;
ignoreGlobalCmd = modJson.modSettings.ignoreGlobalCmd;
noIngameOptions = modJson.modSettings.noIngameOptions;
+ if (ModTags.IsFilterPresentInModID(modJson.id, "Hidden"))
+ UserHidden = true;
if (Knossos.globalSettings.modCompression != CompressionSettings.Disabled && !modJson.modSettings.isCompressed)
{
compressionAvailable = true;
@@ -346,7 +350,24 @@ internal void SaveSettingsCommand()
modJson.modSettings.ignoreGlobalCmd = IgnoreGlobalCmd;
modJson.modSettings.noIngameOptions = NoIngameOptions;
+ var oldUserHidden = ModTags.IsFilterPresentInModID(modJson.id, "Hidden");
+ if (UserHidden)
+ {
+ ModTags.AddModFilter(modJson.id, "Hidden");
+ if(!Knossos.globalSettings.hiddenModIds.Contains(modJson.id))
+ Knossos.globalSettings.hiddenModIds.Add(modJson.id);
+ }
+ else
+ {
+ ModTags.RemoveModFilter(modJson.id, "Hidden");
+ Knossos.globalSettings.hiddenModIds.Remove(modJson.id);
+ }
+ if (oldUserHidden != UserHidden)
+ {
+ MainWindowViewModel.Instance?.InstalledModsView?.ResetFilters();
+ Knossos.globalSettings.Save();
+ }
modJson.modSettings.Save();
if(modCardViewModel != null)
{
diff --git a/Knossos.NET/Views/Windows/ModSettingsView.axaml b/Knossos.NET/Views/Windows/ModSettingsView.axaml
index b072766c..d5efa073 100644
--- a/Knossos.NET/Views/Windows/ModSettingsView.axaml
+++ b/Knossos.NET/Views/Windows/ModSettingsView.axaml
@@ -34,6 +34,11 @@
+
+
+
+ Hidden by default
+