using MangaMap.Model; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Linq; using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using System.Xml; namespace MangaMap.Stub { /// /// Implémentation de l'interface IPersistanceManager utilisant la sérialisation avec DataContract. /// public class DataContract : IPersistanceManager { /// /// Obtient ou définit le nom du fichier de sauvegarde. /// public string FileName { get; set; } = "SauvegardeDonnees.xml"; /// /// Obtient ou définit le chemin du fichier de sauvegarde. /// public string FilePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory); /// /// Charge les données sauvegardées à partir du fichier xml. /// /// Un tuple contenant la liste des oeuvres et la liste des utilisateurs. public (ObservableCollection, List) chargeDonne() { var serializer = new DataContractSerializer(typeof(DataToPersist)); DataToPersist data; if (File.Exists(Path.Combine(FilePath, FileName))) // Vérifiez si le fichier existe { using (Stream s = File.OpenRead(Path.Combine(FilePath, FileName))) { data = serializer.ReadObject(s) as DataToPersist; } } else { data = new DataToPersist(); // Si le fichier n'existe pas, créez une nouvelle liste } return (data.Oeuvres, data.Utilisateurs); } /// /// Sauvegarde les données dans le fichier xml. /// /// La liste des oeuvres à sauvegarder. /// La liste des utilisateurs à sauvegarder. public void sauvegarder(ObservableCollection o, List u) { var serializer = new DataContractSerializer(typeof(DataToPersist)); if (!Directory.Exists(FilePath)) { Debug.WriteLine("Directory doesn't exist."); Directory.CreateDirectory(FilePath); } DataToPersist data = new DataToPersist(); data.Oeuvres = o; data.Utilisateurs = u; var settings = new XmlWriterSettings() { Indent = true }; using (TextWriter tw = File.CreateText(Path.Combine(FilePath, FileName))) { using (XmlWriter w = XmlWriter.Create(tw, settings)) { serializer.WriteObject(w, data); // Version d'enregistrement des données avec indentation. } } } } }