From 4c6cf42e79bee1cb38e07b93037b7832ef52f322 Mon Sep 17 00:00:00 2001 From: Corentin LEMAIRE Date: Tue, 9 May 2023 22:10:04 +0200 Subject: [PATCH] Started Serialization w/ Playlists --- Sources/Linaris/FooterPage.xaml.cs | 4 +- Sources/Model/IDataManager.cs | 4 + Sources/Model/Manager.cs | 4 +- Sources/Model/Playlist.cs | 6 +- .../Serialization/LINQ_XML_Serialization.cs | 185 ++++++++++++++++++ Sources/Model/Stub/StubManager.cs | 10 + 6 files changed, 206 insertions(+), 7 deletions(-) create mode 100644 Sources/Model/Serialization/LINQ_XML_Serialization.cs diff --git a/Sources/Linaris/FooterPage.xaml.cs b/Sources/Linaris/FooterPage.xaml.cs index fdf1855..fcc1e8e 100644 --- a/Sources/Linaris/FooterPage.xaml.cs +++ b/Sources/Linaris/FooterPage.xaml.cs @@ -19,9 +19,9 @@ public partial class FooterPage : ContentView // (s,a) = convention, s = sender, a = arguments, si appli fermée, on free tout outputDevice.PlaybackStopped += PlaybackStoppedHandler; - morceauEnCours = "peaches.mp3"; + /*morceauEnCours = "peaches.mp3"; audioFile = new AudioFileReader(morceauEnCours); - outputDevice.Init(audioFile); + outputDevice.Init(audioFile);*/ } public void PlayButton_Clicked(object sender, EventArgs e) diff --git a/Sources/Model/IDataManager.cs b/Sources/Model/IDataManager.cs index 7657f06..dde2dad 100644 --- a/Sources/Model/IDataManager.cs +++ b/Sources/Model/IDataManager.cs @@ -32,4 +32,8 @@ public interface IDataManager public void RemoveInfoTitle(InfoTitle title); + public void LoadPlaylists(); + + public void SavePlaylists(); + } \ No newline at end of file diff --git a/Sources/Model/Manager.cs b/Sources/Model/Manager.cs index 10598e7..cfbfbe1 100644 --- a/Sources/Model/Manager.cs +++ b/Sources/Model/Manager.cs @@ -54,9 +54,9 @@ public class Manager } } - public Manager() + public Manager(IDataManager dataManager) { - DataManager = new StubManager(); + DataManager = dataManager; albums = DataManager.GetAlbums(); customTitles = DataManager.GetCustomTitles(); diff --git a/Sources/Model/Playlist.cs b/Sources/Model/Playlist.cs index 3d30732..dbe9704 100644 --- a/Sources/Model/Playlist.cs +++ b/Sources/Model/Playlist.cs @@ -101,15 +101,15 @@ public class Playlist { Name = nom; Description = description; - this.imageURL = imageURL; + ImageURL = imageURL; } - public void AddTitle(Title morceau) + public void AddTitle(CustomTitle morceau) { morceaux.Add(morceau); } - public void RemoveTitle(Title morceau) + public void RemoveTitle(CustomTitle morceau) { morceaux.Remove(morceau); } diff --git a/Sources/Model/Serialization/LINQ_XML_Serialization.cs b/Sources/Model/Serialization/LINQ_XML_Serialization.cs new file mode 100644 index 0000000..20c3c1b --- /dev/null +++ b/Sources/Model/Serialization/LINQ_XML_Serialization.cs @@ -0,0 +1,185 @@ +using Model.Stub; +using System.Linq; +using System.Xml; +using System.Xml.Linq; + +namespace Model.Serialization; + +public class LINQ_XML_Serialization : IDataManager +{ + + private List artists; + + public IEnumerable Artists + { + get + { + return artists.ToList(); + } + } + + private List albums; + + public IEnumerable Albums + { + get + { + return albums.ToList(); + } + } + + private List playlists; + + public IEnumerable Playlists + { + get + { + return playlists.ToList(); + } + } + + private List infoTitles; + + public IEnumerable InfoTitles + { + get + { + return infoTitles.ToList(); + } + } + + private List customTitles; + + public IEnumerable CustomTitles + { + get + { + return customTitles.ToList(); + } + } + + public LINQ_XML_Serialization() + { + playlists = new List(); + artists = new List(); + albums = new List(); + infoTitles = new List(); + customTitles = new List(); + LoadPlaylists(); + } + + public void AddAlbum(Album album) + { + albums.Add(album); + } + + public void AddArtist(Artist artist) + { + artists.Add(artist); + } + + public void AddCustomTitle(CustomTitle title) + { + customTitles.Add(title); + } + + public void AddInfoTitle(InfoTitle title) + { + infoTitles.Add(title); + } + + public void AddPlaylist(Playlist playlist) + { + playlists.Add(playlist); + } + + public List GetAlbums() + { + return albums; + } + + public List GetArtists() + { + return artists; + } + + public List GetCustomTitles() + { + return customTitles; + } + + public List GetInfoTitles() + { + return infoTitles; + } + + public List GetPlaylists() + { + return playlists; + } + + public void RemoveAlbum(Album album) + { + albums.Remove(album); + } + + public void RemoveArtist(Artist artist) + { + artists.Remove(artist); + } + + public void RemoveCustomTitle(CustomTitle title) + { + customTitles.Remove(title); + } + + public void RemoveInfoTitle(InfoTitle title) + { + infoTitles.Remove(title); + } + + public void RemovePlaylist(Playlist playlist) + { + playlists.Remove(playlist); + } + + public void LoadPlaylists() + { + XDocument PlaylistsFichier = XDocument.Load("playlists.xml"); + + playlists = PlaylistsFichier.Descendants("playlist") + .Select(eltPlaylist => new Playlist( + eltPlaylist.Attribute("Name")!.Value, + eltPlaylist.Element("Description")!.Value, + eltPlaylist.Element("ImageURL")!.Value + )).ToList(); + foreach(Playlist playlist in playlists) + { + var custom = PlaylistsFichier.Descendants("playlist") + .Single(ct => ct.Attribute("Name")?.Value == playlist.Name) + .Element("Customs"); + } + } + + public void SavePlaylists() + { + XDocument PlaylistsFichier = new XDocument(); + + var playlist = playlists.Select(playlist => new XElement("playlist", + new XAttribute("Name", playlist.Name), + new XElement("Description", playlist.Description), + new XElement("ImageURL", playlist.ImageURL) + )); + + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Indent = true; + + using(TextWriter tw = File.CreateText("playlists.xml")) + { + using(XmlWriter writer = XmlWriter.Create(tw, settings)) + { + PlaylistsFichier.Save(writer); + } + } + } +} diff --git a/Sources/Model/Stub/StubManager.cs b/Sources/Model/Stub/StubManager.cs index f73fcfb..c772bd1 100644 --- a/Sources/Model/Stub/StubManager.cs +++ b/Sources/Model/Stub/StubManager.cs @@ -229,4 +229,14 @@ public class StubManager : IDataManager { artists.Remove(artist); } + + public void LoadPlaylists() + { + return; + } + + public void SavePlaylists() + { + return; + } }