116 lines
3.8 KiB
C#
116 lines
3.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Text.Json;
|
|
using Project_Periodensystem.Model;
|
|
|
|
namespace Project_Periodensystem.Persistence
|
|
{
|
|
/// <summary>
|
|
/// Erweiterte Persistenz - Speichern/Laden von JSON-Dateien
|
|
/// </summary>
|
|
public static class DataManager
|
|
{
|
|
private static readonly string DataDirectory = Path.Combine(
|
|
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
|
|
"Periodensystem");
|
|
|
|
private static readonly string ElementsFile = Path.Combine(DataDirectory, "elements.json");
|
|
private static readonly string SettingsFile = Path.Combine(DataDirectory, "settings.json");
|
|
|
|
/// <summary>
|
|
/// Speichert Elemente als JSON
|
|
/// </summary>
|
|
public static void SaveElements(List<Element> elements)
|
|
{
|
|
try
|
|
{
|
|
Directory.CreateDirectory(DataDirectory);
|
|
var json = JsonSerializer.Serialize(elements, new JsonSerializerOptions { WriteIndented = true });
|
|
File.WriteAllText(ElementsFile, json);
|
|
Logger.Log($"Elemente gespeichert: {elements.Count} Einträge");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.LogException(ex, "SaveElements");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Lädt Elemente aus JSON oder Fallback zu eingebauten Daten
|
|
/// </summary>
|
|
public static List<Element> LoadElements()
|
|
{
|
|
try
|
|
{
|
|
if (File.Exists(ElementsFile))
|
|
{
|
|
var json = File.ReadAllText(ElementsFile);
|
|
var elements = JsonSerializer.Deserialize<List<Element>>(json);
|
|
if (elements != null && elements.Count > 0)
|
|
{
|
|
Logger.Log($"Elemente aus Datei geladen: {elements.Count}");
|
|
return elements;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.LogException(ex, "LoadElements");
|
|
}
|
|
|
|
// Fallback zu eingebauten Daten
|
|
Logger.Log("Fallback zu eingebauten Element-Daten");
|
|
return PeriodicTableData.Elements;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Speichert Benutzereinstellungen
|
|
/// </summary>
|
|
public static void SaveSettings(AppSettings settings)
|
|
{
|
|
try
|
|
{
|
|
Directory.CreateDirectory(DataDirectory);
|
|
var json = JsonSerializer.Serialize(settings, new JsonSerializerOptions { WriteIndented = true });
|
|
File.WriteAllText(SettingsFile, json);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.LogException(ex, "SaveSettings");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Lädt Benutzereinstellungen
|
|
/// </summary>
|
|
public static AppSettings LoadSettings()
|
|
{
|
|
try
|
|
{
|
|
if (File.Exists(SettingsFile))
|
|
{
|
|
var json = File.ReadAllText(SettingsFile);
|
|
var settings = JsonSerializer.Deserialize<AppSettings>(json);
|
|
return settings ?? new AppSettings();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.LogException(ex, "LoadSettings");
|
|
}
|
|
|
|
return new AppSettings();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Benutzereinstellungen für Persistenz
|
|
/// </summary>
|
|
public class AppSettings
|
|
{
|
|
public string LastTheme { get; set; } = "Dark";
|
|
public DateTime LastUsed { get; set; } = DateTime.Now;
|
|
public string PreferredLanguage { get; set; } = "German";
|
|
}
|
|
} |