diff --git a/MusiLib/MusiLib/App.xaml.cs b/MusiLib/MusiLib/App.xaml.cs index 2d76cf3..7c7b857 100644 --- a/MusiLib/MusiLib/App.xaml.cs +++ b/MusiLib/MusiLib/App.xaml.cs @@ -6,15 +6,33 @@ public partial class App : Application { public Manager MyManager { get; private set; } = new Manager(new Stub.Stub()); + + public string FileNameFU { get; set; } = "favorisUtilisateurs.xml"; + public string FileNameP { get; set; } = "partitions.xml"; + public string FilePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory); + public App() { - MyManager.chargeDonnees(); - MyManager.Persistance = new DataContractPersistance.DataContractPers(); - MyManager.sauvegardeDonnees(); - - InitializeComponent(); + string favorisUtilisateursFilePath = Path.Combine(FilePath, FileNameFU); + string partitionsFilePath = Path.Combine(FilePath, FileNameP); + + if (File.Exists(partitionsFilePath) && File.Exists(favorisUtilisateursFilePath)) + { + MyManager = new Manager(new DataContractPersistance.DataContractPers()); + } + + MyManager.chargeDonnees(); + MainPage = new AppShell(); + + if (!File.Exists(partitionsFilePath) && !File.Exists(favorisUtilisateursFilePath)) + { + MyManager.Persistance = new DataContractPersistance.DataContractPers(); + } + + MyManager.sauvegardeDonnees(); + } } diff --git a/MusiLib/MusiLib/DataContractPersistance/DataContractPers.cs b/MusiLib/MusiLib/DataContractPersistance/DataContractPers.cs index 50e80ca..075f93c 100644 --- a/MusiLib/MusiLib/DataContractPersistance/DataContractPers.cs +++ b/MusiLib/MusiLib/DataContractPersistance/DataContractPers.cs @@ -8,65 +8,102 @@ using System.Linq; using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; +using System.Xml; namespace MusiLib.DataContractPersistance { public class DataContractPers : IPersistanceManager { - public string FilePath { get; set; } = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "/musilib"; - public string FileNameP { get; set; } = "UserFavoris.xml"; - public string FileNameU { get; set; } = "UserData.xml"; + public string FilePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory); + public string FileNameFU { get; set; } = "favorisUtilisateurs.xml"; + public string FileNameP { get; set; } = "partitions.xml"; - public (List, List) chargeDonnees() + public (List, List, List) chargeDonnees() { - var serializerP = new DataContractSerializer(typeof(List)); - var serializerU = new DataContractSerializer(typeof(List), new[] { typeof(Partition) }); + var partitionsSerializer = new DataContractSerializer(typeof(List)); + var favorisUtilisateursSerializer = new DataContractSerializer(typeof(DataToPersist)); List partitions = new List(); List utilisateurs = new List(); + List favoris = new List(); - string pathP = Path.Combine(FilePath, FileNameP); - if (File.Exists(pathP)) + using (Stream partitionsStream = File.OpenRead(Path.Combine(FilePath, "partitions.xml"))) { - using (Stream stream = File.OpenRead(pathP)) - { - partitions = serializerP.ReadObject(stream) as List; - } + partitions = partitionsSerializer.ReadObject(partitionsStream) as List; } - string pathU = Path.Combine(FilePath, FileNameU); - if (File.Exists(pathU)) + using (Stream favorisUtilisateursStream = File.OpenRead(Path.Combine(FilePath, "favorisUtilisateurs.xml"))) { - using (Stream stream = File.OpenRead(pathU)) - { - utilisateurs = serializerU.ReadObject(stream) as List; - } + DataToPersist data = favorisUtilisateursSerializer.ReadObject(favorisUtilisateursStream) as DataToPersist; + utilisateurs = data.utilisateurs; + favoris = data.favoris; } - return (partitions, utilisateurs); + return (partitions, utilisateurs, favoris); } - public void sauvegardeDonnees(List p, List u) + + public void sauvegardeDonnees(List p, List u, List f) { - var serializerP = new DataContractSerializer(typeof(List)); - var serializerU = new DataContractSerializer(typeof(List), new[] { typeof(Partition) }); + var partitionsSerializer = new DataContractSerializer(typeof(List)); + var favorisUtilisateursSerializer = new DataContractSerializer(typeof(DataToPersist)); if (!Directory.Exists(FilePath)) { - System.Diagnostics.Debug.WriteLine("Directory créé à l'instant"); - System.Diagnostics.Debug.WriteLine(FilePath); + Debug.WriteLine("Directory créé à l'instant"); + Debug.WriteLine(Directory.GetDirectoryRoot(FilePath)); + Debug.WriteLine(FilePath); Directory.CreateDirectory(FilePath); } - using (Stream stream = File.Create(Path.Combine(FilePath, FileNameP))) + using (Stream partitionsStream = File.Create(Path.Combine(FilePath, FileNameP))) { - serializerP.WriteObject(stream, p); + partitionsSerializer.WriteObject(partitionsStream, p); } - using (Stream stream = File.Create(Path.Combine(FilePath, FileNameU))) + DataToPersist data = new DataToPersist(); + data.utilisateurs = u; + data.favoris = f; + + using (Stream favorisUtilisateursStream = File.Create(Path.Combine(FilePath, FileNameFU))) { - serializerU.WriteObject(stream, u); + favorisUtilisateursSerializer.WriteObject(favorisUtilisateursStream, data); } } + + public void sauvegardeFavori(Partition fav) + { + var favorisUtilisateursSerializer = new DataContractSerializer(typeof(DataToPersist)); + + if (!Directory.Exists(FilePath)) + { + Debug.WriteLine("Directory créé à l'instant"); + Debug.WriteLine(Directory.GetDirectoryRoot(FilePath)); + Debug.WriteLine(FilePath); + Directory.CreateDirectory(FilePath); + } + + List favoris = new List(); + using (Stream favorisUtilisateursStream = File.OpenRead(Path.Combine(FilePath, FileNameFU))) + { + DataToPersist data = favorisUtilisateursSerializer.ReadObject(favorisUtilisateursStream) as DataToPersist; + if (data != null && data.favoris != null) + { + favoris = data.favoris; + } + } + + favoris.Add(fav); + + using (Stream favorisUtilisateursStream = File.Create(Path.Combine(FilePath, FileNameFU))) + { + DataToPersist data = new DataToPersist(); + data.favoris = favoris; + favorisUtilisateursSerializer.WriteObject(favorisUtilisateursStream, data); + } + + Debug.WriteLine("Nouveau favori sauvegardé !"); + } + } } \ No newline at end of file diff --git a/MusiLib/MusiLib/DataContractPersistance/DataToPersist.cs b/MusiLib/MusiLib/DataContractPersistance/DataToPersist.cs index 89bb7f6..d869fd4 100644 --- a/MusiLib/MusiLib/DataContractPersistance/DataToPersist.cs +++ b/MusiLib/MusiLib/DataContractPersistance/DataToPersist.cs @@ -9,7 +9,8 @@ namespace MusiLib.DataContractPersistance { public class DataToPersist { - public List utilisateurs = new List(); - public List partitions = new List(); + public List utilisateurs { get; set; } = new List(); + public List partitions { get; set; } = new List(); + public List favoris { get; set; } = new List(); } } diff --git a/MusiLib/MusiLib/Model/IPersistanceManager.cs b/MusiLib/MusiLib/Model/IPersistanceManager.cs index 435d4ac..6e400ca 100644 --- a/MusiLib/MusiLib/Model/IPersistanceManager.cs +++ b/MusiLib/MusiLib/Model/IPersistanceManager.cs @@ -8,8 +8,10 @@ namespace MusiLib.Model { public interface IPersistanceManager { - (List, List) chargeDonnees(); + (List, List, List) chargeDonnees(); - void sauvegardeDonnees(List p, List u); + void sauvegardeDonnees(List p, List u, List f); + + void sauvegardeFavori(Partition fav); } } diff --git a/MusiLib/MusiLib/Model/Manager.cs b/MusiLib/MusiLib/Model/Manager.cs index 99b388c..3d41170 100644 --- a/MusiLib/MusiLib/Model/Manager.cs +++ b/MusiLib/MusiLib/Model/Manager.cs @@ -13,11 +13,13 @@ namespace MusiLib.Model public IPersistanceManager Persistance { get; set; } public List utilisateurs { get; private set; } public List partitions { get; private set; } + public List favoris { get; private set; } public Manager() { utilisateurs = new List(); partitions = new List(); + favoris = new List(); } public Manager(IPersistanceManager persistance) @@ -25,6 +27,7 @@ namespace MusiLib.Model Persistance = persistance; utilisateurs = new List(); partitions = new List(); + favoris = new List(); } public void ajouterUtilisateur(Utilisateur utilisateur) @@ -40,19 +43,20 @@ namespace MusiLib.Model public void chargeDonnees() { var donnees = Persistance.chargeDonnees(); - utilisateurs.AddRange(donnees.Item2); partitions.AddRange(donnees.Item1); + utilisateurs.AddRange(donnees.Item2); + favoris.AddRange(donnees.Item3); } public void sauvegardeDonnees() { - Persistance.sauvegardeDonnees(partitions, utilisateurs); + Persistance.sauvegardeDonnees(partitions, utilisateurs, favoris); } - - - - + public void sauvegardeFavori(Partition fav) + { + Persistance.sauvegardeFavori(fav); + } } } diff --git a/MusiLib/MusiLib/MusiLib.csproj b/MusiLib/MusiLib/MusiLib.csproj index 4a6c318..0261ade 100644 --- a/MusiLib/MusiLib/MusiLib.csproj +++ b/MusiLib/MusiLib/MusiLib.csproj @@ -15,7 +15,7 @@ MusiLib - com.companyname.musilib + fr.iut.musilib c2deb312-b3f3-425c-8e4b-18b5328ffd7c @@ -24,7 +24,7 @@ 14.2 14.0 - 21.0 + 23.0 10.0.17763.0 10.0.17763.0 6.5 diff --git a/MusiLib/MusiLib/Platforms/Android/MainActivity.cs b/MusiLib/MusiLib/Platforms/Android/MainActivity.cs index 0c91508..1313faa 100644 --- a/MusiLib/MusiLib/Platforms/Android/MainActivity.cs +++ b/MusiLib/MusiLib/Platforms/Android/MainActivity.cs @@ -4,7 +4,8 @@ using Android.OS; namespace MusiLib; -[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)] + +[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density, ScreenOrientation = ScreenOrientation.Portrait)] public class MainActivity : MauiAppCompatActivity { } diff --git a/MusiLib/MusiLib/Stub/Stub.cs b/MusiLib/MusiLib/Stub/Stub.cs index cedbf64..8bc4f2b 100644 --- a/MusiLib/MusiLib/Stub/Stub.cs +++ b/MusiLib/MusiLib/Stub/Stub.cs @@ -12,10 +12,12 @@ namespace MusiLib.Stub { public class Stub : IPersistanceManager { - public (List, List) chargeDonnees() + public (List, List, List) chargeDonnees() { List partitions = new List(); List utilisateurs = new List(); + List favoris = new List(); + Utilisateur kevin = new Utilisateur("Kevin"); Utilisateur michel = new Utilisateur("Michel"); utilisateurs.Add(kevin); @@ -40,12 +42,17 @@ namespace MusiLib.Stub partitions.Add(ode_a_la_joie); partitions.Add(fais_dodo_colas); partitions.Add(Frere_Jacques); - return (partitions, utilisateurs); + return (partitions, utilisateurs, favoris); } - public void sauvegardeDonnees(List p, List u) + public void sauvegardeDonnees(List p, List u, List f) { } + + public void sauvegardeFavori(Partition fav) + { + + } } } diff --git a/MusiLib/MusiLib/Views/Favoris.xaml.cs b/MusiLib/MusiLib/Views/Favoris.xaml.cs index e5c8c1b..6acc823 100644 --- a/MusiLib/MusiLib/Views/Favoris.xaml.cs +++ b/MusiLib/MusiLib/Views/Favoris.xaml.cs @@ -15,7 +15,7 @@ public partial class Favoris : ContentPage, IAllowClick public Favoris() { InitializeComponent(); - partitionsInitiales = Utilisateur.Favoris.ToList(); + partitionsInitiales = MyManager.favoris.ToList(); partitionsFiltrees = new List(partitionsInitiales); chargerFavoris(); } @@ -125,7 +125,7 @@ public partial class Favoris : ContentPage, IAllowClick protected override void OnAppearing() { base.OnAppearing(); - partitionsInitiales = Utilisateur.Favoris.ToList(); + partitionsInitiales = MyManager.favoris.ToList(); partitionsFiltrees = new List(partitionsInitiales); chargerFavoris(); } diff --git a/MusiLib/MusiLib/Views/PartitionView.xaml.cs b/MusiLib/MusiLib/Views/PartitionView.xaml.cs index 4eb6f57..eda95a4 100644 --- a/MusiLib/MusiLib/Views/PartitionView.xaml.cs +++ b/MusiLib/MusiLib/Views/PartitionView.xaml.cs @@ -1,5 +1,6 @@ using Microsoft.Maui.Controls.PlatformConfiguration; using MusiLib.Model; +using System.Collections.Concurrent; using System.Diagnostics; namespace MusiLib.Views; @@ -84,7 +85,7 @@ public partial class PartitionView : ContentPage private void InitializeButton() { - if (Utilisateur.Favoris.Contains(MyManager.partitions[IdTab])) + if (MyManager.favoris.Contains(MyManager.partitions[IdTab])) { favoriButton.Source = "etoile.png"; } @@ -98,14 +99,15 @@ public partial class PartitionView : ContentPage { ImageButton button = (ImageButton)sender; - if (!Utilisateur.Favoris.Contains(MyManager.partitions[IdTab])) + if (!MyManager.favoris.Contains(MyManager.partitions[IdTab])) { - Utilisateur.Favoris.Add(MyManager.partitions[IdTab]); + MyManager.favoris.Add(MyManager.partitions[IdTab]); + MyManager.sauvegardeFavori(MyManager.partitions[IdTab]); button.Source = "etoile.png"; } else { - Utilisateur.Favoris.Remove(MyManager.partitions[IdTab]); + MyManager.favoris.Remove(MyManager.partitions[IdTab]); button.Source = "etoile_vide.png"; } }