diff --git a/MusiLib/MusiLib/App.xaml.cs b/MusiLib/MusiLib/App.xaml.cs index 5c4bae3..2d76cf3 100644 --- a/MusiLib/MusiLib/App.xaml.cs +++ b/MusiLib/MusiLib/App.xaml.cs @@ -5,10 +5,13 @@ namespace MusiLib; public partial class App : Application { - public Manager MyManager { get; private set; } = new Manager(); + public Manager MyManager { get; private set; } = new Manager(new Stub.Stub()); public App() { - /*MyManager.chargerDonnees();*/ + MyManager.chargeDonnees(); + MyManager.Persistance = new DataContractPersistance.DataContractPers(); + MyManager.sauvegardeDonnees(); + InitializeComponent(); diff --git a/MusiLib/MusiLib/DataContractPersistance/DataContractPers.cs b/MusiLib/MusiLib/DataContractPersistance/DataContractPers.cs new file mode 100644 index 0000000..e5328ac --- /dev/null +++ b/MusiLib/MusiLib/DataContractPersistance/DataContractPers.cs @@ -0,0 +1,72 @@ +using Android; +using AndroidX.Core.App; +using AndroidX.Core.Content; +using Android.OS; +using Java.Security; +using MusiLib.Model; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; +using Android.Content.PM; +using Android.App; + +namespace MusiLib.DataContractPersistance +{ + public class DataContractPers : IPersistanceManager + { + private static readonly int requestCode = 100; + public string FilePath { get; set; } = Path.Combine(Android.OS.Environment.DataDirectory.AbsolutePath, "fr.vivienmaxime.musilib"); + public string FileNameP { get; set; } = "UserFavoris.xml"; + public string FileNameU { get; set; } = "UserData.xml"; + + public (List, List) chargeDonnees() + { + + var serializerU = new DataContractSerializer(typeof(Utilisateur)); + + List util = new List(); + + using (Stream stream = File.OpenRead(Path.Combine(FilePath, FileNameU))) + { + util = serializerU.ReadObject(stream) as List; + } + + return (new List(), util); + } + + public void sauvegardeDonnees(List p, List u) + { + + // Vérifiez si l'application a l'autorisation de lire/écrire des fichiers + if (ContextCompat.CheckSelfPermission(Android.App.Application.Context, Manifest.Permission.ReadExternalStorage) == Android.Content.PM.Permission.Denied || + ContextCompat.CheckSelfPermission(Android.App.Application.Context, Manifest.Permission.WriteExternalStorage) == Android.Content.PM.Permission.Denied) + { + // Demandez à l'utilisateur la permission d'accéder aux fichiers + ActivityCompat.RequestPermissions((Android.App.Activity)Android.App.Application.Context, + new string[] { Manifest.Permission.ReadExternalStorage, Manifest.Permission.WriteExternalStorage }, + requestCode); + } + + var serializerU = new DataContractSerializer(typeof(Utilisateur)); + + if (!Directory.Exists(FilePath)) + { + System.Diagnostics.Debug.WriteLine("Directory créé à l'instant"); + System.Diagnostics.Debug.WriteLine(Directory.GetDirectoryRoot); + System.Diagnostics.Debug.WriteLine(FilePath); + Directory.CreateDirectory(FilePath); + } + else + { + using (Stream stream = File.Create(Path.Combine(FilePath, FileNameU))) + { + serializerU.WriteObject(stream, u); + } + } + } + } +} diff --git a/MusiLib/MusiLib/MauiProgram.cs b/MusiLib/MusiLib/MauiProgram.cs index e8bf409..5399d33 100644 --- a/MusiLib/MusiLib/MauiProgram.cs +++ b/MusiLib/MusiLib/MauiProgram.cs @@ -17,9 +17,8 @@ public static class MauiProgram fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); }); - builder.Services.AddSingleton(AudioManager.Current); - builder.Services.AddTransient(); + builder.Services.AddSingleton(AudioManager.Current); - return builder.Build(); + return builder.Build(); } } diff --git a/MusiLib/MusiLib/Model/IPersistenceManager.cs b/MusiLib/MusiLib/Model/IPersistanceManager.cs similarity index 87% rename from MusiLib/MusiLib/Model/IPersistenceManager.cs rename to MusiLib/MusiLib/Model/IPersistanceManager.cs index 4948fb7..435d4ac 100644 --- a/MusiLib/MusiLib/Model/IPersistenceManager.cs +++ b/MusiLib/MusiLib/Model/IPersistanceManager.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace MusiLib.Model { - public interface IPersistenceManager + public interface IPersistanceManager { (List, List) chargeDonnees(); diff --git a/MusiLib/MusiLib/Model/Manager.cs b/MusiLib/MusiLib/Model/Manager.cs index 319ffc5..99b388c 100644 --- a/MusiLib/MusiLib/Model/Manager.cs +++ b/MusiLib/MusiLib/Model/Manager.cs @@ -10,14 +10,23 @@ namespace MusiLib.Model { public class Manager { + public IPersistanceManager Persistance { get; set; } public List utilisateurs { get; private set; } public List partitions { get; private set; } - public Manager() { + public Manager() + { utilisateurs = new List(); partitions = new List(); } + public Manager(IPersistanceManager persistance) + { + Persistance = persistance; + utilisateurs = new List(); + partitions = new List(); + } + public void ajouterUtilisateur(Utilisateur utilisateur) { utilisateurs.Add(utilisateur); @@ -28,39 +37,22 @@ namespace MusiLib.Model partitions.Add(partition); } - - /*public class Manager + public void chargeDonnees() { - - public IPersistenceManager Persistence { get; set; } - - public Manager(IPersistenceManager manager) - { - utilisateurs = new ReadOnlyCollection<> - public List partitions { get; private set; } + var donnees = Persistance.chargeDonnees(); + utilisateurs.AddRange(donnees.Item2); + partitions.AddRange(donnees.Item1); } - public Manager() + public void sauvegardeDonnees() { - utilisateurs = new List(); - partitions = new List(); + Persistance.sauvegardeDonnees(partitions, utilisateurs); } - public void ajouterUtilisateur(Utilisateur utilisateur) - { - utilisateurs.Add(utilisateur); - } - public void ajouterPartition(Partition partition) - { - partitions.Add(partition); - } - private void chargeDonnees() - { - var donnees = Persistence chargeDonnees(); - }*/ + } } diff --git a/MusiLib/MusiLib/Platforms/Android/AndroidManifest.xml b/MusiLib/MusiLib/Platforms/Android/AndroidManifest.xml index e9937ad..c33b7e6 100644 --- a/MusiLib/MusiLib/Platforms/Android/AndroidManifest.xml +++ b/MusiLib/MusiLib/Platforms/Android/AndroidManifest.xml @@ -3,4 +3,8 @@ + + + + \ No newline at end of file diff --git a/MusiLib/MusiLib/Stub/Stub.cs b/MusiLib/MusiLib/Stub/Stub.cs index 77fc311..e39dd11 100644 --- a/MusiLib/MusiLib/Stub/Stub.cs +++ b/MusiLib/MusiLib/Stub/Stub.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace MusiLib.Stub { - public class Stub : IPersistenceManager + public class Stub : IPersistanceManager { public (List, List) chargeDonnees() { diff --git a/MusiLib/MusiLib/Views/Accueil.xaml b/MusiLib/MusiLib/Views/Accueil.xaml index af4befe..023ceeb 100644 --- a/MusiLib/MusiLib/Views/Accueil.xaml +++ b/MusiLib/MusiLib/Views/Accueil.xaml @@ -85,12 +85,6 @@ BackgroundColor="Blue" Clicked="GoToPartitionButton"/> -