diff --git a/Sources/Console/Console.csproj b/Sources/Console/Console.csproj index 6abd0f7..e171fb5 100644 --- a/Sources/Console/Console.csproj +++ b/Sources/Console/Console.csproj @@ -11,4 +11,8 @@ + + + + diff --git a/Sources/Console/Program.cs b/Sources/Console/Program.cs index dec48a1..1900769 100644 --- a/Sources/Console/Program.cs +++ b/Sources/Console/Program.cs @@ -1,9 +1,12 @@ using Model; +using Model.Serialization; using Model.Stub; -Manager Manager = new Manager(); +IDataManager DataManager = new LINQ_XML_Serialization(); -foreach(Album Album in Manager.GetAlbums()) +Manager Manager = new Manager(DataManager); + +/*foreach(Album Album in Manager.GetAlbums()) { Console.WriteLine(Album.Name); } @@ -15,9 +18,9 @@ Manager.AddAlbum(new Album("coucou", "path.png", new Artist("lorenzo"), "descLol foreach (Album Album in Manager.GetAlbums()) { Console.WriteLine(Album.Name); -} +}*/ -Manager.AddPlaylist(new Playlist("MegaTeuf", "DescPlaylist", "ImagePlaylist")); +/*Manager.AddPlaylist(new Playlist("MegaTeuf", "DescPlaylist", "ImagePlaylist")); Playlist p1 = Manager.Playlists.First(); @@ -114,9 +117,35 @@ p1.PreviousTitle(); current = p1.GetCurrentTitle(); Console.WriteLine(current?.Name); p1.PreviousTitle(); -current = p1.GetCurrentTitle(); -Console.WriteLine(current?.Name); - - - - +current = p1.GetCurrentTitle();*/ +/*Console.WriteLine(current?.Name);*/ +Manager.LoadSerialization(); +foreach (var p in Manager.GetPlaylists()) +{ + Console.WriteLine(p.Name); +} +foreach (var a in Manager.GetAlbums()) +{ + Console.WriteLine(a.Name); +} +foreach (var a in Manager.GetArtists()) +{ + Console.WriteLine(a.Name); +} +foreach (var ct in Manager.GetCustomTitles()) +{ + Console.WriteLine(ct.Name); +} +foreach (var it in Manager.GetInfoTitles()) +{ + Console.WriteLine(it.Name); +} +Artist newArtist = new Artist(); +Manager.AddArtist(newArtist); +Manager.AddAlbum(new Album("Nouvel album", "nouveau.png", newArtist, "nouvelle desc", "nouvelles infos")); +Console.WriteLine("------"); +foreach (var a in Manager.GetAlbums()) +{ + Console.WriteLine(a.Name); +} +Manager.SaveSerialization(); \ No newline at end of file diff --git a/Sources/Model/Album.cs b/Sources/Model/Album.cs index a2beba3..7ececfb 100644 --- a/Sources/Model/Album.cs +++ b/Sources/Model/Album.cs @@ -1,21 +1,26 @@ -namespace Model +using Model.Stub; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Model { - public class Album + public class Album { + public string Name { get => name; set { - if (value != null && value.Length < 75) + if (value != null && value.Length < Manager.MAX_NAME_LENGTH) { name = value; } } } - private string name ="Unknown"; + private string name = Manager.DEFAULT_NAME; public string Description { @@ -23,14 +28,14 @@ set { - if (value != null && value.Length < 500) + if (value != null && value.Length < Manager.MAX_DESCRIPTION_LENGTH) { description = value; } } } - private string description =""; + private string description = Manager.DEFAULT_DESC; private List titles = new List<Title>(); @@ -38,7 +43,7 @@ { get { - return titles.ToList(); + return new List<Title>(titles); } } @@ -55,7 +60,7 @@ } } - private string imageURL = "none.png"; + private string imageURL = Manager.DEFAULT_URL; public Artist Artist { get; set; } @@ -65,14 +70,14 @@ set { - if (value != null && value.Length < 500) + if (value != null && value.Length < Manager.MAX_DESCRIPTION_LENGTH) { information = value; } } } - private string information = ""; + private string information = Manager.DEFAULT_DESC; public Album(string name, string file_Name, Artist artist, string description, string information) { @@ -83,6 +88,11 @@ Information = information; } + public Album() + { + Artist = new Artist(Manager.DEFAULT_NAME); + } + public void AddTitle(Title title) { titles.Add(title); @@ -96,5 +106,22 @@ } } + public override bool Equals(object? obj) + { + if (obj is null) return false; + if (obj.GetType() != typeof(Artist)) return false; + if (obj is Album album && ImageURL == album.ImageURL) return true; + else return false; + } + + public override int GetHashCode() + { + return ImageURL.GetHashCode(); + } + + public override string ToString() + { + return $"Name : {Name}, Artist : {Artist}"; + } } } \ No newline at end of file diff --git a/Sources/Model/Artist.cs b/Sources/Model/Artist.cs index a5b8e48..936131d 100644 --- a/Sources/Model/Artist.cs +++ b/Sources/Model/Artist.cs @@ -1,4 +1,7 @@ -namespace Model; +using Model.Stub; +using System.Xml.Serialization; + +namespace Model; public class Artist { @@ -8,32 +11,40 @@ public class Artist set { - if (value != null && value.Length < 75) + if (value != null && value.Length < Manager.MAX_NAME_LENGTH) { name = value; } } } - private string name = "Unknown"; + private string name = Manager.DEFAULT_NAME; - private List<Album> albums = new List<Album>(); + public Artist(string name) + { + Name = name; + } + + public Artist() + { - public IEnumerable<Album> Albums - { - get - { - return albums.ToList(); - } } - public Artist(string name) + public override bool Equals(object? obj) { - Name = name; + if(obj == null) return false; + if(obj.GetType() != typeof(Artist)) return false; + if(obj is Artist artist && Name == artist.Name) return true; + else return false; + } + + public override int GetHashCode() + { + return Name.GetHashCode(); } - public void AddAlbum(Album album) + public override string ToString() { - albums.Add(album); + return $"Name : {Name}"; } } diff --git a/Sources/Model/CustomTitle.cs b/Sources/Model/CustomTitle.cs index 4f9958f..ab7b192 100644 --- a/Sources/Model/CustomTitle.cs +++ b/Sources/Model/CustomTitle.cs @@ -1,4 +1,6 @@ -namespace Model; +using Model.Stub; + +namespace Model; public class CustomTitle : Title { @@ -8,17 +10,37 @@ public class CustomTitle : Title { set { - if (value != null && value.Length < 500) + if (value != null && value.Length < Manager.MAX_DESCRIPTION_LENGTH) { path = value; } } } - private string path = "none.mp3"; + private string path = Manager.DEFAULT_URL; public CustomTitle(string name, string imageURL, string information, string path) : base(name, imageURL, information) { Path = path; } + + public CustomTitle() : base(Manager.DEFAULT_NAME, Manager.DEFAULT_URL, Manager.DEFAULT_DESC) { } + + public override bool Equals(object? obj) + { + if (obj is null) return false; + if (obj.GetType() != typeof(CustomTitle)) return false; + if (obj is CustomTitle customTitle && ImageURL == customTitle.ImageURL) return true; + else return false; + } + + public override int GetHashCode() + { + return ImageURL.GetHashCode(); + } + + public override string ToString() + { + return $"Name : {Name}, Path : {Path}"; + } } diff --git a/Sources/Model/Genre.cs b/Sources/Model/Genre.cs index 4298509..f0aec92 100644 --- a/Sources/Model/Genre.cs +++ b/Sources/Model/Genre.cs @@ -2,5 +2,6 @@ public enum Genre { - HIP_HOP, POP, ROCK, ELECTRO, CLASSIQUE, JAZZ, VARIETE_FRANCAISE, VARIETE_INTERNATIONALE, REGGAE, RAP, RNB, DISCO, BLUES, COUNTRY, FUNK, GOSPEL, METAL, K_POP + HIP_HOP, POP, ROCK, ELECTRO, CLASSIQUE, JAZZ, VARIETE_FRANCAISE, VARIETE_INTERNATIONALE, REGGAE, RAP, RNB, DISCO, BLUES, COUNTRY, FUNK, GOSPEL, + METAL, K_POP } diff --git a/Sources/Model/IDataManager.cs b/Sources/Model/IDataManager.cs index dde2dad..6c9e14a 100644 --- a/Sources/Model/IDataManager.cs +++ b/Sources/Model/IDataManager.cs @@ -12,28 +12,30 @@ public interface IDataManager List<Playlist> GetPlaylists(); - public void AddAlbum(Album album); + CustomTitle? GetCustomTitleByUrl(string custom); - public void AddArtist(Artist artist); + void AddAlbum(Album album); - public void AddPlaylist(Playlist playlist); + void AddArtist(Artist artist); - public void AddCustomTitle(CustomTitle title); + void AddPlaylist(Playlist playlist); - public void AddInfoTitle(InfoTitle title); + void AddCustomTitle(CustomTitle title); - public void RemoveAlbum(Album album); + void AddInfoTitle(InfoTitle title); - public void RemoveArtist(Artist artist); + void RemoveAlbum(Album album); - public void RemovePlaylist(Playlist playlist); + void RemoveArtist(Artist artist); - public void RemoveCustomTitle(CustomTitle title); + void RemovePlaylist(Playlist playlist); - public void RemoveInfoTitle(InfoTitle title); + void RemoveCustomTitle(CustomTitle title); - public void LoadPlaylists(); + void RemoveInfoTitle(InfoTitle title); - public void SavePlaylists(); + void LoadSerialization(); + + void SaveSerialization(); } \ No newline at end of file diff --git a/Sources/Model/InfoTitle.cs b/Sources/Model/InfoTitle.cs index 2c6b46a..1ee8b2f 100644 --- a/Sources/Model/InfoTitle.cs +++ b/Sources/Model/InfoTitle.cs @@ -1,53 +1,90 @@ -namespace Model; - -public class InfoTitle : Title -{ - public Artist Artiste { get; set; } - - public string Description - { - get => description; - - set - { - if (value != null && value.Length < 500) - { - description = value; - } - } - } - - private string description =""; - - private List<Artist> feat = new List<Artist>(); - - public IEnumerable<Artist> Feat - { +using System.Xml.Serialization; +using Model.Stub; + +namespace Model; + +public class InfoTitle : Title +{ + public Artist Artist + { + get + { + return artist; + } + set + { + artist = value; + } + } + + private Artist artist = new Artist(); + + public string Description + { + get => description; + + set + { + if (value != null && value.Length < Manager.MAX_DESCRIPTION_LENGTH) + { + description = value; + } + } + } + + private string description = Manager.DEFAULT_DESC; + + private List<Artist> feat = new List<Artist>(); + + public IEnumerable<Artist> Feat + { get { return feat.ToList(); - } - } - - public Genre Genre { get; set; } - - public InfoTitle(string name, string imageURL, string information, Artist artist, string description, Genre genre) : base(name,imageURL,information) - { - Artiste = artist; - Description = description; - Genre = genre; - } - - public void AddFeat(Artist artist) - { - feat.Add(artist); - } - public void RemoveFeat(Artist artiste) - { - foreach (var item in Feat) - { - feat = Feat.Where(item => item != artiste).ToList(); - } - } - -} + } + } + + public Genre Genre { get; set; } + + public InfoTitle(string name, string imageURL, string information, Artist artist, string description, Genre genre) : base(name,imageURL,information) + { + this.artist = artist; + Description = description; + Genre = genre; + } + + public InfoTitle() : base(Manager.DEFAULT_NAME, Manager.DEFAULT_URL, Manager.DEFAULT_DESC) + { + Artist = new Artist(Manager.DEFAULT_NAME); + } + + public void AddFeat(Artist artist) + { + feat.Add(artist); + } + public void RemoveFeat(Artist artiste) + { + foreach (var item in Feat) + { + feat = Feat.Where(item => item != artiste).ToList(); + } + } + + public override bool Equals(object? obj) + { + if (obj is null) return false; + if (obj.GetType() != typeof(InfoTitle)) return false; + if (obj is InfoTitle infoTitle && ImageURL == infoTitle.ImageURL) return true; + else return false; + } + + public override int GetHashCode() + { + return ImageURL.GetHashCode(); + } + + public override string ToString() + { + return $"Name : {Name}, ImageUrl : {ImageURL}"; + } +} diff --git a/Sources/Model/Manager.cs b/Sources/Model/Manager.cs index cfbfbe1..08c405c 100644 --- a/Sources/Model/Manager.cs +++ b/Sources/Model/Manager.cs @@ -2,6 +2,16 @@ public class Manager { + public static int MAX_NAME_LENGTH = 75; + + public static int MAX_DESCRIPTION_LENGTH = 500; + + public static string DEFAULT_NAME = "Unknown"; + + public static string DEFAULT_URL = "none.png"; + + public static string DEFAULT_DESC = ""; + public IDataManager DataManager { get; set; } private List<Album> albums = new List<Album>(); @@ -89,6 +99,12 @@ public class Manager playlists = DataManager.GetPlaylists(); } + public void AddArtist(Artist artist) + { + DataManager.AddArtist(artist); + artists = DataManager.GetArtists(); + } + public void RemoveAlbum(Album album) { DataManager.RemoveAlbum(album); @@ -113,6 +129,11 @@ public class Manager playlists = DataManager.GetPlaylists(); } + public IEnumerable<Playlist> GetPlaylists() + { + return DataManager.GetPlaylists(); + } + public IEnumerable<Album> GetAlbums() { return DataManager.GetAlbums(); @@ -133,4 +154,14 @@ public class Manager return DataManager.GetArtists(); } + public void LoadSerialization() + { + DataManager.LoadSerialization(); + } + + public void SaveSerialization() + { + DataManager.SaveSerialization(); + } + } diff --git a/Sources/Model/Playlist.cs b/Sources/Model/Playlist.cs index dbe9704..efa68d8 100644 --- a/Sources/Model/Playlist.cs +++ b/Sources/Model/Playlist.cs @@ -1,4 +1,7 @@ -namespace Model; +using Model.Stub; +using System.Xml.Serialization; + +namespace Model; public class Playlist { @@ -8,14 +11,14 @@ public class Playlist set { - if (value != null && value.Length < 75) + if (value != null && value.Length < Manager.MAX_NAME_LENGTH) { name = value; } } } - private string name ="Unknown"; + private string name = Manager.DEFAULT_NAME; public string Description { @@ -23,14 +26,14 @@ public class Playlist set { - if (value != null && value.Length < 500) + if (value != null && value.Length < Manager.MAX_DESCRIPTION_LENGTH) { description = value; } } } - private string description = ""; + private string description = Manager.DEFAULT_DESC; private List<Title> morceaux = new List<Title>(); @@ -54,7 +57,7 @@ public class Playlist } } - private string imageURL = "none.png"; + private string imageURL = Manager.DEFAULT_URL; public int Index { @@ -104,6 +107,10 @@ public class Playlist ImageURL = imageURL; } + public Playlist() + { + } + public void AddTitle(CustomTitle morceau) { morceaux.Add(morceau); @@ -169,4 +176,21 @@ public class Playlist } + public override bool Equals(object? obj) + { + if (obj is null) return false; + if (obj.GetType() != typeof(Playlist)) return false; + if (obj is Playlist playlist && ImageURL == playlist.ImageURL) return true; + else return false; + } + + public override int GetHashCode() + { + return ImageURL.GetHashCode(); + } + + public override string ToString() + { + return $"Name : {Name}"; + } } diff --git a/Sources/Model/Serialization/LINQ_XML_Serialization.cs b/Sources/Model/Serialization/LINQ_XML_Serialization.cs index 37cb1ba..a4f0ed3 100644 --- a/Sources/Model/Serialization/LINQ_XML_Serialization.cs +++ b/Sources/Model/Serialization/LINQ_XML_Serialization.cs @@ -1,203 +1,613 @@ -using Model.Stub; -using System.Linq; -using System.Xml; -using System.Xml.Linq; - -namespace Model.Serialization; - -public class LINQ_XML_Serialization : IDataManager -{ - - private List<Artist> artists; - - public IEnumerable<Artist> Artists - { - get - { - return artists.ToList(); - } - } - - private List<Album> albums; - - public IEnumerable<Album> Albums - { - get - { - return albums.ToList(); - } - } - - private List<Playlist> playlists; - - public IEnumerable<Playlist> Playlists - { - get - { - return playlists.ToList(); - } - } - - private List<InfoTitle> infoTitles; - - public IEnumerable<InfoTitle> InfoTitles - { - get - { - return infoTitles.ToList(); - } - } - - private List<CustomTitle> customTitles; - - public IEnumerable<CustomTitle> CustomTitles - { - get - { - return customTitles.ToList(); - } - } - - public LINQ_XML_Serialization() - { - playlists = new List<Playlist>(); - artists = new List<Artist>(); - albums = new List<Album>(); - infoTitles = new List<InfoTitle>(); - customTitles = new List<CustomTitle>(); - 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<Album> GetAlbums() - { - return albums; - } - - public List<Artist> GetArtists() - { - return artists; - } - - public List<CustomTitle> GetCustomTitles() - { - return customTitles; - } - - public List<InfoTitle> GetInfoTitles() - { - return infoTitles; - } - - public List<Playlist> 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); - } - } - } - +using Model.Stub; +using System.Diagnostics.Metrics; +using System; +using System.Linq; +using System.Xml; +using System.Xml.Linq; +using System.Xml.Serialization; +using static System.Reflection.Metadata.BlobBuilder; +using System.Reflection.Metadata; + +namespace Model.Serialization; + +public class LINQ_XML_Serialization : IDataManager +{ + private static string XMLPATH = @"D:\Data\"; + + private static string XMLFILEPLAYLISTS = "playlists.xml"; + + private static string XMLFILEALBUMS = "albums.xml"; + + private static string XMLFILECUSTOMS = "customs.xml"; + + private static string XMLFILEINFOS = "infos.xml"; + + private static string XMLFILEARTISTS = "artists.xml"; + + private List<Artist> artists; + + public IEnumerable<Artist> Artists + { + get + { + return artists.ToList(); + } + } + + private List<Album> albums; + + public IEnumerable<Album> Albums + { + get + { + return albums.ToList(); + } + } + + private List<Playlist> playlists; + + public IEnumerable<Playlist> Playlists + { + get + { + return playlists.ToList(); + } + } + + private List<InfoTitle> infoTitles; + + public IEnumerable<InfoTitle> InfoTitles + { + get + { + return infoTitles.ToList(); + } + } + + private List<CustomTitle> customTitles; + + public IEnumerable<CustomTitle> CustomTitles + { + get + { + return customTitles.ToList(); + } + } + + public LINQ_XML_Serialization() + { + playlists = new List<Playlist>(); + artists = new List<Artist>(); + albums = new List<Album>(); + infoTitles = new List<InfoTitle>(); + customTitles = new List<CustomTitle>(); + LoadSerialization(); + } + + 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<Album> GetAlbums() + { + return albums; + } + + public List<Artist> GetArtists() + { + return artists; + } + + public List<CustomTitle> GetCustomTitles() + { + return customTitles; + } + + public List<InfoTitle> GetInfoTitles() + { + return infoTitles; + } + + public List<Playlist> 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 LoadSerialization() + { + LoadArtists(); + LoadCustomTitles(); + LoadInfoTitles(); + LoadPlaylists(); + LoadAlbums(); + } + + public void SaveSerialization() + { + SaveArtists(); + SaveCustomTitles(); + SaveInfoTitles(); + SavePlaylists(); + SaveAlbums(); + } + + public void LoadPlaylists() + { + if (!File.Exists(Path.Combine(XMLPATH + XMLFILEPLAYLISTS))) + { + XDocument PlaylistFile = new XDocument(); + Playlist p1 = new Playlist(); + playlists.Add(p1); + + var playlist = playlists.Select(p => new XElement("Playlist", + new XAttribute("Name", p.Name), + new XElement("Description", p.Description), + new XElement("ImageURL", p.ImageURL), + new XElement("Titles", p.Morceaux.Count() > 0 ? p.Morceaux.Select(a => a.ImageURL).Aggregate((albumUrl, nextAlbum) => albumUrl + " " + nextAlbum) : "") + )); + + PlaylistFile.Add(new XElement("Playlists", playlist)); + + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Indent = true; + using (TextWriter tw = File.CreateText(Path.Combine(XMLPATH + XMLFILEPLAYLISTS))) + { + using (XmlWriter writer = XmlWriter.Create(tw, settings)) + { + PlaylistFile.Save(writer); + } + } + } + XDocument PlaylistsFichier = XDocument.Load(Path.Combine(XMLPATH, XMLFILEPLAYLISTS)); + + 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("Titles")!.ToString(); + if (custom == null) + { + continue; + } + + CustomTitle? customTitle = GetCustomTitleByUrl(custom); + + if (customTitle == null) + { + continue; + } + + playlist.AddTitle(customTitle); + } + } + + public void SavePlaylists() + { + Directory.SetCurrentDirectory(XMLPATH); + 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), + new XElement("Titles", playlist.Morceaux.Count() > 0 ? playlist.Morceaux.Select(p => p.ImageURL).Aggregate((playlistUrl, nextPlaylist) => playlistUrl + " " + nextPlaylist) : "") + )); + PlaylistsFichier.Add(new XElement("Playlists", playlist)); + + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Indent = true; + + using(TextWriter tw = File.CreateText(XMLFILEPLAYLISTS)) + { + using(XmlWriter writer = XmlWriter.Create(tw, settings)) + { + PlaylistsFichier.Save(writer); + } + } + } + public void LoadArtists() { - XDocument ArtistsFile = XDocument.Load("artists.xml"); - artists = ArtistsFile.Descendants("artist") - .Select(eltArtist => new Artist( - eltArtist.Attribute("Name")!.Value - )).ToList(); + if (!File.Exists(Path.Combine(XMLPATH + XMLFILEARTISTS))) + { + XDocument ArtistFile = new XDocument(); + Artist a1 = new Artist("a1"); + Artist a2 = new Artist("a2"); + + artists.Add(a1); + artists.Add(a2); + + var artist = artists.Select(artist => new XElement("Artist", + new XAttribute("Name", artist.Name) + )); + + ArtistFile.Add(new XElement("Artists", artist)); + + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Indent = true; + using (TextWriter tw = File.CreateText(Path.Combine(XMLPATH + XMLFILEARTISTS))) + { + using (XmlWriter writer = XmlWriter.Create(tw, settings)) + { + ArtistFile.Save(writer); + } + } + } + + XDocument ArtistsFile = XDocument.Load(Path.Combine(XMLPATH, XMLFILEARTISTS)); + artists = ArtistsFile.Descendants("Artist") + .Select(eltArtist => new Artist( + eltArtist.Attribute("Name")!.Value + )).ToList(); + + } - } - public void SaveArtists() { + Directory.SetCurrentDirectory(XMLPATH); XDocument ArtistsFile = new XDocument(); - var artist = artists.Select(artist => new XElement("artist", + var artist = artists.Select(artist => new XElement("Artist", new XAttribute("Name", artist.Name) )); - } -} + + ArtistsFile.Add(new XElement("Artists", artist)); + + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Indent = true; + + using (TextWriter tw = File.CreateText(XMLFILEARTISTS)) + { + using (XmlWriter writer = XmlWriter.Create(tw, settings)) + { + ArtistsFile.Save(writer); + } + } + + } + + public void LoadCustomTitles() + { + if (!File.Exists(Path.Combine(XMLPATH + XMLFILECUSTOMS))) + { + using (Stream s = File.Create(Path.Combine(XMLPATH, XMLFILECUSTOMS))) + { + XmlSerializer xmlSerializer = new XmlSerializer(typeof(CustomTitle)); + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Indent = true; + xmlSerializer.Serialize(XmlWriter.Create(s, settings), new CustomTitle("test1","url1.png","info1","path1")); + } + } + XDocument CustomsFile = XDocument.Load(Path.Combine(XMLPATH, XMLFILECUSTOMS)); + + customTitles = CustomsFile.Descendants("CustomTitle") + .Select(eltPlaylist => new CustomTitle( + eltPlaylist.Attribute("Name")!.Value, + eltPlaylist.Element("ImageURL")!.Value, + eltPlaylist.Element("Information")!.Value, + eltPlaylist.Element("Path")!.Value + )).ToList(); + } + + public void SaveCustomTitles() + { + Directory.SetCurrentDirectory(XMLPATH); + XDocument CustomsFile = new XDocument(); + + var customs = customTitles.Select(custom => new XElement("CustomTitle", + new XAttribute("Name", custom.Name), + new XElement("ImageURL", custom.ImageURL), + new XElement("Information", custom.Information), + new XElement("Path", custom.Path) + )); + + CustomsFile.Add(new XElement("Customs", customs)); + + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Indent = true; + + using (TextWriter tw = File.CreateText(XMLFILECUSTOMS)) + { + using (XmlWriter writer = XmlWriter.Create(tw, settings)) + { + CustomsFile.Save(writer); + } + } + } + + public void LoadAlbums() + { + if (!File.Exists(Path.Combine(XMLPATH + XMLFILEALBUMS))) + { + XDocument AlbumFile = new XDocument(); + Album a1 = new Album(); + albums.Add(a1); + + var album = albums.Select(p => new XElement("Album", + new XAttribute("Name", p.Name), + new XElement("ImageURL", p.ImageURL), + new XElement("Artist", p.Titles.Count() > 0 ? p.Titles.Select(a => a.Name).Aggregate((artistName, nextArtist) => artistName + " " + nextArtist) : ""), + new XElement("Description", p.Description), + new XElement("Information", p.Information), + new XElement("Titles", p.Titles.Count() > 0 ? p.Titles.Select(a => a.ImageURL).Aggregate((albumUrl, nextAlbum) => albumUrl + " " + nextAlbum) : "") + )); + + AlbumFile.Add(new XElement("Albums", album)); + + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Indent = true; + using (TextWriter tw = File.CreateText(Path.Combine(XMLPATH + XMLFILEALBUMS))) + { + using (XmlWriter writer = XmlWriter.Create(tw, settings)) + { + AlbumFile.Save(writer); + } + } + } + XDocument AlbumsFile = XDocument.Load(Path.Combine(XMLPATH, XMLFILEALBUMS)); + + albums = AlbumsFile.Descendants("Album") + .Select(eltPlaylist => new Album( + eltPlaylist.Attribute("Name")!.Value, + eltPlaylist.Element("ImageURL")!.Value, + GetArtistByName(eltPlaylist.Element("Artist")!.Value) != null ? GetArtistByName(eltPlaylist.Element("Artist")!.Value) : new Artist("Unknown"), + eltPlaylist.Element("Description")!.Value, + eltPlaylist.Element("Information")!.Value + )).ToList(); + + foreach (Album a in albums) + { + var title = AlbumsFile.Descendants("Album") + .Single(ct => ct.Attribute("Name")?.Value == a.Name) + .Element("Titles")!.ToString(); + if (title == null) + { + continue; + } + + InfoTitle? infoTitle = GetInfoTitleByUrl(title); + + if (infoTitle == null) + { + continue; + } + + a.AddTitle(infoTitle); + } + } + + public void SaveAlbums() + { + Directory.SetCurrentDirectory(XMLPATH); + XDocument AlbumsFile = new XDocument(); + + var album = albums.Select(a => new XElement("Album", + new XAttribute("Name", a.Name), + new XElement("ImageURL", a.ImageURL), + new XElement("Artist", a.Artist.Name), + new XElement("Description", a.Description), + new XElement("Information", a.Information), + new XElement("Titles", a.Titles.Count() > 0 ? a.Titles.Select(p => p.ImageURL).Aggregate((albumUrl, nextAlbum) => albumUrl + " " + nextAlbum) : "") + )); + AlbumsFile.Add(new XElement("Albums", album)); + + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Indent = true; + + using (TextWriter tw = File.CreateText(XMLFILEALBUMS)) + { + using (XmlWriter writer = XmlWriter.Create(tw, settings)) + { + AlbumsFile.Save(writer); + } + } + } + + public void LoadInfoTitles() + { + if (!File.Exists(Path.Combine(XMLPATH + XMLFILEINFOS))) + { + XDocument InfoFile = new XDocument(); + InfoTitle it1 = new InfoTitle(); + infoTitles.Add(it1); + + var infoTitle = infoTitles.Select(p => new XElement("InfoTitle", + new XAttribute("Name", p.Name), + new XElement("ImageURL", p.ImageURL), + new XElement("Information", p.Information), + new XElement("Feats", p.Feat.Count() > 0 ? p.Feat.Select(a => a.Name).Aggregate((artistName, nextArtist) => artistName + " " + nextArtist) : ""), + new XElement("Description", p.Description), + new XElement("Genre", p.Genre) + )); + + InfoFile.Add(new XElement("InfoTitles", infoTitle)); + + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Indent = true; + using (TextWriter tw = File.CreateText(Path.Combine(XMLPATH + XMLFILEINFOS))) + { + using (XmlWriter writer = XmlWriter.Create(tw, settings)) + { + InfoFile.Save(writer); + } + } + } + XDocument InfosFile = XDocument.Load(Path.Combine(XMLPATH, XMLFILEINFOS)); + + infoTitles = InfosFile.Descendants("InfoTitle") + .Select(eltPlaylist => new InfoTitle( + eltPlaylist.Attribute("Name")!.Value, + eltPlaylist.Element("ImageURL")!.Value, + eltPlaylist.Element("Information")!.Value, + GetArtistByName(eltPlaylist.Element("Feats")!.Value), + eltPlaylist.Element("Description")!.Value, + GetGenreByName(eltPlaylist.Element("Genre")!.Value) + )).ToList(); + foreach (InfoTitle it in infoTitles) + { + var feat = InfosFile.Descendants("InfoTitle") + .Single(infot => infot.Attribute("Name")?.Value == it.Name) + .Element("Feats")!.ToString(); + if (feat == null) + { + continue; + } + + Artist? Feat = GetArtistByName(feat); + + if (Feat == null) + { + continue; + } + + it.AddFeat(Feat); + } + } + + public void SaveInfoTitles() + { + Directory.SetCurrentDirectory(XMLPATH); + XDocument InfosFile = new XDocument(); + + var info = infoTitles.Select(it => new XElement("InfoTitle", + new XAttribute("Name", it.Name), + new XElement("ImageURL", it.ImageURL), + new XElement("Information", it.Information), + new XElement("Genre", it.Genre.ToString()), + new XElement("Description", it.Description), + new XElement("Feats", it.Feat.Count() > 0 ? it.Feat.Select(p => p.Name).Aggregate((featName, nextFeat) => featName + " " + nextFeat) : "") + )); + InfosFile.Add(new XElement("InfoTitles", info)); + + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Indent = true; + + using (TextWriter tw = File.CreateText(XMLFILEINFOS)) + { + using (XmlWriter writer = XmlWriter.Create(tw, settings)) + { + InfosFile.Save(writer); + } + } + } + public Genre GetGenreByName(string genre) + { + if (genre == "HIP_HOP") return Genre.HIP_HOP; + if (genre == "POP") return Genre.POP; + if (genre == "ROCK") return Genre.ROCK; + if (genre == "ELECTRO") return Genre.ELECTRO; + if (genre == "CLASSIQUE") return Genre.CLASSIQUE; + if (genre == "JAZZ") return Genre.JAZZ; + if (genre == "VARIETE_FRANCAISE") return Genre.VARIETE_FRANCAISE; + if (genre == "VARIETE_INTERNATIONALE") return Genre.VARIETE_INTERNATIONALE; + if (genre == "REGGAE") return Genre.REGGAE; + if (genre == "RAP") return Genre.RAP; + if (genre == "RNB") return Genre.RNB; + if (genre == "DISCO") return Genre.DISCO; + if (genre == "BLUES") return Genre.BLUES; + if (genre == "COUNTRY") return Genre.COUNTRY; + if (genre == "FUNK") return Genre.FUNK; + if (genre == "GOSPEL") return Genre.GOSPEL; + if (genre == "METAL") return Genre.METAL; + else return Genre.K_POP; + } + + public InfoTitle? GetInfoTitleByUrl(string infoUrl) + { + foreach(InfoTitle it in infoTitles) + { + if (it.Name == infoUrl) + { + return it; + } + } + return null; + } + + public Artist? GetArtistByName(string artist) + { + foreach(Artist a in artists) + { + if (a.Name == artist) + { + return a; + } + } + return null; + } + + public Album? GetAlbumByUrl(string album) + { + foreach(Album a in albums) + { + if (a.ImageURL == album) + { + return a; + } + } + return null; + } + + public CustomTitle? GetCustomTitleByUrl(string custom) + { + foreach(CustomTitle customTitle in customTitles) + { + if(customTitle.Name == custom) + { + return customTitle; + } + } + return null; + } +} diff --git a/Sources/Model/Stub/StubAlbum.cs b/Sources/Model/Stub/StubAlbum.cs index 87de42e..9c61a5d 100644 --- a/Sources/Model/Stub/StubAlbum.cs +++ b/Sources/Model/Stub/StubAlbum.cs @@ -4,12 +4,15 @@ namespace Model.Stub; public class StubAlbum { - public List<Artist> Artists + public StubArtist StubArtist { - get => artists; + get + { + return stubArtist; + } } - private List<Artist> artists; + private StubArtist stubArtist; public List<Album> Albums { @@ -20,38 +23,39 @@ public class StubAlbum public StubAlbum() { - albums = new List<Album>(); - StubArtist stubArtist = new StubArtist(); - artists = stubArtist.GetArtists(); - Artist? Artist1 = Artists.FirstOrDefault(a => a.Name == "Critien"); - if (Artist1 != null) - { - Album Album1 = new Album("la street", "lastreet.png", Artist1, "c'est la street", "plein d'infos1"); - Album Album2 = new Album("la jsp", "oui.png", Artist1, "c'est la couri", "plein d'infos2"); - albums.Add(Album1); - albums.Add(Album2); - } - Artist? Artist2 = Artists.FirstOrDefault(a => a.Name == "Gouriet"); - if (Artist2 != null) - { + stubArtist = new StubArtist(); - } - Artist? Artist3 = Artists.FirstOrDefault(a => a.Name == "Poulifer"); - if (Artist3 != null) - { - Album Album3 = new Album("la pas le temps", "non.png", Artist3, "c'est pas la street", "plein d'infos3"); - albums.Add(Album3); - } - Artist? Artist4 = Artists.FirstOrDefault(a => a.Name == "Credian"); - if (Artist4 != null) + Album Album1 = new Album("la street", "lastreet.png", StubArtist.GetArtistByName("Critien"), "c'est la street", "plein d'infos1"); + Album Album2 = new Album("la jsp", "oui.png", StubArtist.GetArtistByName("Critien"), "c'est la couri", "plein d'infos2"); + Album Album3 = new Album("la pas le temps", "non.png", StubArtist.GetArtistByName("Poulifer"), "c'est pas la street", "plein d'infos3"); + Album Album4 = new Album("la pas le choix", "peutetre.png", StubArtist.GetArtistByName("Credian"), "c'est la parterre", "plein d'infos4"); + albums = new List<Album>() { - Album Album4 = new Album("la pas le choix", "peutetre.png", Artist4, "c'est la parterre", "plein d'infos4"); - albums.Add(Album4); - } + Album1, Album2, Album3, Album4 + }; } public List<Album> GetAlbums() { return albums; } + public Album? GetAlbumByUrl(string url) + { + foreach(Album album in albums) + { + if (url == album.ImageURL) + { + return album; + } + } + return null; + } + public void AddAlbum(Album album) + { + albums.Add(album); + } + public void RemoveAlbum(Album album) + { + albums.Remove(album); + } } diff --git a/Sources/Model/Stub/StubArtist.cs b/Sources/Model/Stub/StubArtist.cs index d7bc027..9634124 100644 --- a/Sources/Model/Stub/StubArtist.cs +++ b/Sources/Model/Stub/StubArtist.cs @@ -16,11 +16,6 @@ public class StubArtist Artist Artiste3 = new Artist("Poulifer"); Artist Artiste4 = new Artist("Credian"); - /*Artiste1.AddAlbum(Album1); - Artiste1.AddAlbum(Album2); - Artiste2.AddAlbum(Album3); - Artiste2.AddAlbum(Album4);*/ - artists = new List<Artist>() { Artiste1, Artiste2, Artiste3, Artiste4 @@ -31,4 +26,23 @@ public class StubArtist { return artists; } + public Artist? GetArtistByName(string name) + { + foreach (var artist in artists) + { + if (artist.Name == name) + { + return artist; + } + } + return null; + } + public void AddArtist(Artist artist) + { + artists.Add(artist); + } + public void RemoveArtist(Artist artist) + { + artists.Remove(artist); + } } diff --git a/Sources/Model/Stub/StubCustomTitle.cs b/Sources/Model/Stub/StubCustomTitle.cs index 0137ae2..e8a7cbc 100644 --- a/Sources/Model/Stub/StubCustomTitle.cs +++ b/Sources/Model/Stub/StubCustomTitle.cs @@ -25,4 +25,27 @@ public class StubCustomTitle { return customTitles; } + public List<CustomTitle> GetCustomTitlesByUrl(List<string> urls) + { + List<CustomTitle> Customs = new List<CustomTitle>(); + foreach(var url in urls) + { + foreach (var title in customTitles) + { + if (url == title.ImageURL) + { + Customs.Add(title); + } + } + } + return Customs; + } + public void AddCustomTitle(CustomTitle customTitle) + { + customTitles.Add(customTitle); + } + public void RemoveCustomTitle(CustomTitle customTitle) + { + customTitles.Remove(customTitle); + } } diff --git a/Sources/Model/Stub/StubInfoTitle.cs b/Sources/Model/Stub/StubInfoTitle.cs index 7dba94d..3854697 100644 --- a/Sources/Model/Stub/StubInfoTitle.cs +++ b/Sources/Model/Stub/StubInfoTitle.cs @@ -3,12 +3,15 @@ public class StubInfoTitle { - public List<Artist> Artists + public StubArtist StubArtist { - get => artists; + get + { + return stubArtist; + } } - private List<Artist> artists; + private StubArtist stubArtist; public List<InfoTitle> InfoTitles { @@ -19,39 +22,50 @@ public class StubInfoTitle public StubInfoTitle() { - infoTitles = new List<InfoTitle>(); - StubArtist stubArtist = new StubArtist(); - artists = stubArtist.GetArtists(); - - Artist? Artist1 = Artists.FirstOrDefault(a => a.Name == "Critien"); - if (Artist1 != null) - { - - } - - Artist? Artist2 = Artists.FirstOrDefault(a => a.Name == "Gouriets"); - if (Artist2 != null) - { - InfoTitle InfoTitle1 = new InfoTitle("info1", "url1.png", "info1", Artist2, "desc1", Genre.K_POP); - infoTitles.Add(InfoTitle1); - } + stubArtist = new StubArtist(); - Artist? Artist3 = Artists.FirstOrDefault(a => a.Name == "Poulifer"); - if (Artist3 != null) - { - InfoTitle InfoTitle2 = new InfoTitle("info2", "url2.png", "info2", Artist3, "desc2", Genre.GOSPEL); - infoTitles.Add(InfoTitle2); - } + InfoTitle InfoTitle1 = new InfoTitle("info1", "url1.png", "info1", StubArtist.GetArtistByName("Gouriet"), "desc1", Genre.K_POP); + InfoTitle InfoTitle2 = new InfoTitle("info2", "url2.png", "info2", StubArtist.GetArtistByName("Poulifer"), "desc2", Genre.GOSPEL); - Artist? Artist4 = Artists.FirstOrDefault(a => a.Name == "Credian"); - if (Artist4 != null) + infoTitles = new List<InfoTitle>() { - - } + InfoTitle1, InfoTitle2 + }; } public List<InfoTitle> GetInfoTitles() { return infoTitles; } + public List<InfoTitle> GetInfoTitlesByUrl(List<string> urls) + { + List<InfoTitle> infos = new List<InfoTitle>(); + foreach(var url in urls) + { + foreach(var titles in infoTitles) + { + if (url == titles.ImageURL) + { + infos.Add(titles); + } + } + } + return infos; + } + public void AddInfoTitle(InfoTitle title) + { + infoTitles.Add(title); + } + public void RemoveInfoTitle(InfoTitle title) + { + infoTitles.Remove(title); + } + public void AddFeat(InfoTitle infoTitle, Artist artist) + { + infoTitle.AddFeat(artist); + } + public void RemoveFeat(InfoTitle infoTitle, Artist artist) + { + infoTitle.RemoveFeat(artist); + } } diff --git a/Sources/Model/Stub/StubManager.cs b/Sources/Model/Stub/StubManager.cs index c772bd1..938aef7 100644 --- a/Sources/Model/Stub/StubManager.cs +++ b/Sources/Model/Stub/StubManager.cs @@ -3,240 +3,203 @@ public class StubManager : IDataManager { - private List<Artist> artists; + // Dictionaries - public IEnumerable<Artist> Artists + IDictionary<Album, List<InfoTitle>> DictAlbumInfo { get { - return artists.ToList(); + return dictAlbumInfo; } } - private List<Album> albums; + Dictionary<Album, List<InfoTitle>> dictAlbumInfo; - public IEnumerable<Album> Albums + IDictionary<Playlist, List<CustomTitle>> DictPlaylistTitles { get { - return albums.ToList(); + return dictPlaylistTitles; } } - private List<Playlist> playlists; + Dictionary<Playlist, List<CustomTitle>> dictPlaylistTitles; - public IEnumerable<Playlist> Playlists + // Stubs + + public StubAlbum StubAlbum { get { - return playlists.ToList(); + return stubAlbum; } } - private List<InfoTitle> infoTitles; + private StubAlbum stubAlbum; - public IEnumerable<InfoTitle> InfoTitles + public StubArtist StubArtist { get { - return infoTitles.ToList(); + return stubArtist; } } - private List<CustomTitle> customTitles; + private StubArtist stubArtist; - public IEnumerable<CustomTitle> CustomTitles + public StubCustomTitle StubCustomTitle { get { - return customTitles.ToList(); + return stubCustomTitle; } } - public StubManager() - { - StubAlbum stubAlbum = new StubAlbum(); - albums = stubAlbum.GetAlbums(); - - StubPlaylist stubPlaylist = new StubPlaylist(); - playlists = stubPlaylist.GetPlaylists(); - - StubArtist stubArtist = new StubArtist(); - artists = stubArtist.GetArtists(); - - StubInfoTitle stubInfoTitle = new StubInfoTitle(); - infoTitles = stubInfoTitle.GetInfoTitles(); - - StubCustomTitle stubCustomTitle = new StubCustomTitle(); - customTitles = stubCustomTitle.GetCustomTitles(); - - Artist? Artist1 = Artists.FirstOrDefault(a => a.Name == "Critien"); - Artist? Artist2 = Artists.FirstOrDefault(a => a.Name == "Gouriet"); - Artist? Artist3 = Artists.FirstOrDefault(a => a.Name == "Poulifer"); - Artist? Artist4 = Artists.FirstOrDefault(a => a.Name == "Credian"); - - Album? Album1 = Albums.FirstOrDefault(a => a.Name == "la street"); - Album? Album2 = Albums.FirstOrDefault(a => a.Name == "la jsp"); - Album? Album3 = Albums.FirstOrDefault(a => a.Name == "la pas le temps"); - Album? Album4 = Albums.FirstOrDefault(a => a.Name == "la pas le choix"); + private StubCustomTitle stubCustomTitle; - Playlist? Playlist1 = Playlists.FirstOrDefault(a => a.Name == "Playlist1"); - Playlist? Playlist2 = Playlists.FirstOrDefault(a => a.Name == "Playlist2"); - - CustomTitle? CustomTitle1 = CustomTitles.FirstOrDefault(a => a.Name == "MaMusique"); - CustomTitle? CustomTitle2 = CustomTitles.FirstOrDefault(a => a.Name == "MusiqueGeniale"); - CustomTitle? CustomTitle3 = CustomTitles.FirstOrDefault(a => a.Name == "custom3"); - - InfoTitle? InfoTitle1 = InfoTitles.FirstOrDefault(a => a.Name == "info1"); - InfoTitle? InfoTitle2 = InfoTitles.FirstOrDefault(a => a.Name == "info2"); - - if (Artist1 != null) - { - if (Album1 != null) { - Artist1.AddAlbum(Album1); - } - if(Album2 != null) - { - Artist1.AddAlbum(Album2); - } - } - if (Artist2 != null) + public StubInfoTitle StubInfoTitle + { + get { - if(Album3 != null) - { - Artist2.AddAlbum(Album3); - } - if(Album4 != null) - { - Artist2.AddAlbum(Album4); - } + return stubInfoTitle; } + } - if (Playlist1 != null) - { - if (CustomTitle1 != null) - { - Playlist1.AddTitle(CustomTitle1); - } - if (CustomTitle2 != null) - { - Playlist1.AddTitle(CustomTitle2); - } - } - if (Playlist2 != null) - { - if(CustomTitle2 != null) - { - Playlist2.AddTitle(CustomTitle2); - } - if(CustomTitle3 != null) - { - Playlist2.AddTitle(CustomTitle3); - } - } + private StubInfoTitle stubInfoTitle; - if (Album1 != null) - { - if(InfoTitle1 != null) - { - Album1.AddTitle(InfoTitle1); - } - if(InfoTitle2 != null) - { - Album1.AddTitle(InfoTitle2); - } - } - if (Album2 != null && InfoTitle2 != null) + public StubPlaylist StubPlaylist + { + get { - Album2.AddTitle(InfoTitle2); + return stubPlaylist; } + } + + private StubPlaylist stubPlaylist; + + public StubManager() + { + dictAlbumInfo = new Dictionary<Album, List<InfoTitle>>(); + dictPlaylistTitles = new Dictionary<Playlist, List<CustomTitle>>(); + stubAlbum = new StubAlbum(); + stubArtist = new StubArtist(); + stubCustomTitle = new StubCustomTitle(); + stubInfoTitle = new StubInfoTitle(); + stubPlaylist = new StubPlaylist(); + + dictAlbumInfo.Add(StubAlbum.GetAlbumByUrl("lastreet.png"), StubInfoTitle.GetInfoTitlesByUrl(new List<string>() { "url1.png", "url2.png" })); + dictAlbumInfo.Add(StubAlbum.GetAlbumByUrl("oui.png"), StubInfoTitle.GetInfoTitlesByUrl(new List<string>() { "url2.png" })); + + dictPlaylistTitles.Add(StubPlaylist.GetPlaylistByUrl("url1.png"), StubCustomTitle.GetCustomTitlesByUrl(new List<string>() { "url1.png", "url2.png" })); + dictPlaylistTitles.Add(StubPlaylist.GetPlaylistByUrl("url2.png"), StubCustomTitle.GetCustomTitlesByUrl(new List<string>() { "url2.png", "url3.png" })); } public List<Album> GetAlbums() { - return albums; + return StubAlbum.GetAlbums(); } public List<Artist> GetArtists() { - return artists; + return StubArtist.GetArtists(); } public List<Playlist> GetPlaylists() { - return playlists; + return StubPlaylist.GetPlaylists(); } public List<CustomTitle> GetCustomTitles() { - return customTitles; + return StubCustomTitle.GetCustomTitles(); } public List<InfoTitle> GetInfoTitles() { - return infoTitles; + return StubInfoTitle.GetInfoTitles(); } public void AddAlbum(Album album) { - albums.Add(album); + StubAlbum.AddAlbum(album); } public void AddCustomTitle(CustomTitle title) { - customTitles.Add(title); + StubCustomTitle.AddCustomTitle(title); } public void AddInfoTitle(InfoTitle title) { - infoTitles.Add(title); + StubInfoTitle.AddInfoTitle(title); + } + + public void AddFeat(InfoTitle infoTitle, Artist artist) + { + StubInfoTitle.AddFeat(infoTitle, artist); } public void AddPlaylist(Playlist playlist) { - playlists.Add(playlist); + StubPlaylist.AddPlaylist(playlist); } public void AddArtist(Artist artist) { - artists.Add(artist); + StubArtist.AddArtist(artist); } public void RemoveAlbum(Album album) { - albums.Remove(album); + StubAlbum.RemoveAlbum(album); } public void RemoveCustomTitle(CustomTitle title) { - customTitles.Remove(title); + StubCustomTitle.RemoveCustomTitle(title); } public void RemoveInfoTitle(InfoTitle title) { - infoTitles.Remove(title); + StubInfoTitle.RemoveInfoTitle(title); } public void RemovePlaylist(Playlist playlist) { - playlists.Remove(playlist); + StubPlaylist.RemovePlaylist(playlist); } public void RemoveArtist(Artist artist) { - artists.Remove(artist); + StubArtist.RemoveArtist(artist); } - public void LoadPlaylists() + + + + + public void LoadSerialization() { return; } - public void SavePlaylists() + public void SaveSerialization() { return; } + + public CustomTitle? GetCustomTitleByUrl(string custom) + { + foreach (CustomTitle customTitle in StubCustomTitle.GetCustomTitles()) + { + if (customTitle.Name == custom) + { + return customTitle; + } + } + return null; + } } diff --git a/Sources/Model/Stub/StubPlaylist.cs b/Sources/Model/Stub/StubPlaylist.cs index 6bed9f2..9c11fbb 100644 --- a/Sources/Model/Stub/StubPlaylist.cs +++ b/Sources/Model/Stub/StubPlaylist.cs @@ -24,4 +24,23 @@ public class StubPlaylist { return playlists; } + public Playlist? GetPlaylistByUrl(string url) + { + foreach(var playlist in playlists) + { + if (playlist.ImageURL == url) + { + return playlist; + } + } + return null; + } + public void AddPlaylist(Playlist playlist) + { + playlists.Add(playlist); + } + public void RemovePlaylist(Playlist playlist) + { + playlists.Remove(playlist); + } } diff --git a/Sources/Model/Title.cs b/Sources/Model/Title.cs index 0410f66..bc297a8 100644 --- a/Sources/Model/Title.cs +++ b/Sources/Model/Title.cs @@ -1,4 +1,7 @@ -namespace Model +using Model.Stub; +using System.Xml.Serialization; + +namespace Model { public class Title { @@ -8,14 +11,14 @@ set { - if (value != null && value.Length < 75) + if (value != null && value.Length < Manager.MAX_NAME_LENGTH) { name = value; } } } - private string name = "Unknown"; + private string name = Manager.DEFAULT_NAME; public string ImageURL { @@ -30,7 +33,7 @@ } } - private string imageURL = "none.png"; + private string imageURL = Manager.DEFAULT_URL; public string Information { @@ -38,14 +41,14 @@ set { - if (value != null && value.Length < 500) + if (value != null && value.Length < Manager.MAX_DESCRIPTION_LENGTH) { information = value; } } } - private string information =""; + private string information = Manager.DEFAULT_DESC; public Title(string nom, string file_Name, string informations) { @@ -54,5 +57,22 @@ Information = informations; } + public override bool Equals(object? obj) + { + if (obj is null) return false; + if (obj.GetType() != typeof(Title)) return false; + if (obj is Title title && ImageURL == title.ImageURL) return true; + else return false; + } + + public override int GetHashCode() + { + return ImageURL.GetHashCode(); + } + + public override string ToString() + { + return $"Name : {Name}"; + } } }