circle-info
alpha version all features and options may change dramatically or disappear

IsConfigValid

📄 IsConfigValid.cs – ładowanie i walidacja konfiguracji (config.yml)

🎯 Cel

Ta statyczna klasa odpowiada za:

  • utworzenie pliku config.yml, jeśli go nie ma,

  • wczytanie konfiguracji z YAML do obiektu PluginConfig,

  • sprawdzenie poprawności danych (np. min ≤ max),

  • automatyczne uzupełnienie braków wartościami domyślnymi,

  • zapisanie poprawionego pliku z zachowaniem komentarzy.

Działa jako centralny walidator konfiguracji podczas startu pluginu (CustomPlugin.OnLoaded()).


🧱 Główna metoda

LoadAndValidateConfig(string configPath)

public static PluginConfig LoadAndValidateConfig(string configPath)
  • Wczytuje plik konfiguracyjny z dysku.

  • Jeśli plik nie istnieje → tworzy go z szablonu DefaultConfigTemplate.

  • Jeśli plik istnieje:

    • próbuje deserializować go przez YamlDotNet,

    • jeśli YAML jest błędny – uruchamia ręczne parsowanie (ParseConfigManually).

  • Zawsze przeprowadza końcową walidację przez ValidateAndFix().

  • Jeśli coś zostało poprawione – nadpisuje plik gotowym szablonem z wartościami (UpdateConfigText()).


📎 Obsługa YAML – deserializacja

  • Wspiera pełne mapowanie YAML → obiekt PluginConfig

  • Błąd YamlException jest przechwytywany i obsługiwany alternatywnym parserem.


🔁 ParseConfigManually(string configText)

Własnoręczne parsowanie YAML linia po linii – fallback dla sytuacji, gdy YAML jest uszkodzony:

  • Ignoruje komentarze i puste linie

  • Obsługuje klucze typu:

    • IsEnabled: true

    • RandomMessagesMinIntervalSeconds: 60

  • Obsługuje listy YAML (np. TeslaGateIgnoredRoles) – nawet jeśli w obecnej wersji pluginu nie są jeszcze używane


🧪 ValidateAndFix()

  • Tworzy nowy obiekt PluginConfig zawierający poprawne dane (np. poprawione zakresy liczbowe)

  • Zbiera List<string> warnings do logowania

  • Porównuje oryginał z naprawionym przez AreConfigsEqual(...)


🛠 UpdateConfigText(...)

  • Przechodzi przez linie DefaultConfigTemplate i nadpisuje tylko wartości – komentarze i kolejność zostają zachowane

  • To unikalne podejście, bo YAML nie wspiera niskopoziomowego edytowania z komentarzami – więc ten system omija problem


📌 Przykładowy log działania:

Last updated