modif pour save les favoris / user / partitions (marche presque, juste un problème qui fait qu'on peut pas lancer un favori chargé)

pull/8/head
Vivien DUFOUR 2 years ago
parent c2ade2ee20
commit 9fae7086a2

@ -6,15 +6,33 @@ public partial class App : Application
{ {
public Manager MyManager { get; private set; } = new Manager(new Stub.Stub()); 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() public App()
{ {
MyManager.chargeDonnees();
MyManager.Persistance = new DataContractPersistance.DataContractPers();
MyManager.sauvegardeDonnees();
InitializeComponent(); 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(); MainPage = new AppShell();
if (!File.Exists(partitionsFilePath) && !File.Exists(favorisUtilisateursFilePath))
{
MyManager.Persistance = new DataContractPersistance.DataContractPers();
}
MyManager.sauvegardeDonnees();
} }
} }

@ -8,65 +8,102 @@ using System.Linq;
using System.Runtime.Serialization; using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml;
namespace MusiLib.DataContractPersistance namespace MusiLib.DataContractPersistance
{ {
public class DataContractPers : IPersistanceManager public class DataContractPers : IPersistanceManager
{ {
public string FilePath { get; set; } = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "/musilib"; public string FilePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory);
public string FileNameP { get; set; } = "UserFavoris.xml"; public string FileNameFU { get; set; } = "favorisUtilisateurs.xml";
public string FileNameU { get; set; } = "UserData.xml"; public string FileNameP { get; set; } = "partitions.xml";
public (List<Partition>, List<Utilisateur>) chargeDonnees() public (List<Partition>, List<Utilisateur>, List<Partition>) chargeDonnees()
{ {
var serializerP = new DataContractSerializer(typeof(List<Partition>)); var partitionsSerializer = new DataContractSerializer(typeof(List<Partition>));
var serializerU = new DataContractSerializer(typeof(List<Utilisateur>), new[] { typeof(Partition) }); var favorisUtilisateursSerializer = new DataContractSerializer(typeof(DataToPersist));
List<Partition> partitions = new List<Partition>(); List<Partition> partitions = new List<Partition>();
List<Utilisateur> utilisateurs = new List<Utilisateur>(); List<Utilisateur> utilisateurs = new List<Utilisateur>();
List<Partition> favoris = new List<Partition>();
string pathP = Path.Combine(FilePath, FileNameP); using (Stream partitionsStream = File.OpenRead(Path.Combine(FilePath, "partitions.xml")))
if (File.Exists(pathP))
{ {
using (Stream stream = File.OpenRead(pathP)) partitions = partitionsSerializer.ReadObject(partitionsStream) as List<Partition>;
{
partitions = serializerP.ReadObject(stream) as List<Partition>;
}
} }
string pathU = Path.Combine(FilePath, FileNameU); using (Stream favorisUtilisateursStream = File.OpenRead(Path.Combine(FilePath, "favorisUtilisateurs.xml")))
if (File.Exists(pathU))
{ {
using (Stream stream = File.OpenRead(pathU)) DataToPersist data = favorisUtilisateursSerializer.ReadObject(favorisUtilisateursStream) as DataToPersist;
{ utilisateurs = data.utilisateurs;
utilisateurs = serializerU.ReadObject(stream) as List<Utilisateur>; favoris = data.favoris;
}
} }
return (partitions, utilisateurs); return (partitions, utilisateurs, favoris);
} }
public void sauvegardeDonnees(List<Partition> p, List<Utilisateur> u)
public void sauvegardeDonnees(List<Partition> p, List<Utilisateur> u, List<Partition> f)
{ {
var serializerP = new DataContractSerializer(typeof(List<Partition>)); var partitionsSerializer = new DataContractSerializer(typeof(List<Partition>));
var serializerU = new DataContractSerializer(typeof(List<Utilisateur>), new[] { typeof(Partition) }); var favorisUtilisateursSerializer = new DataContractSerializer(typeof(DataToPersist));
if (!Directory.Exists(FilePath)) if (!Directory.Exists(FilePath))
{ {
System.Diagnostics.Debug.WriteLine("Directory créé à l'instant"); Debug.WriteLine("Directory créé à l'instant");
System.Diagnostics.Debug.WriteLine(FilePath); Debug.WriteLine(Directory.GetDirectoryRoot(FilePath));
Debug.WriteLine(FilePath);
Directory.CreateDirectory(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<Partition> favoris = new List<Partition>();
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é !");
}
} }
} }

@ -9,7 +9,8 @@ namespace MusiLib.DataContractPersistance
{ {
public class DataToPersist public class DataToPersist
{ {
public List<Utilisateur> utilisateurs = new List<Utilisateur>(); public List<Utilisateur> utilisateurs { get; set; } = new List<Utilisateur>();
public List<Partition> partitions = new List<Partition>(); public List<Partition> partitions { get; set; } = new List<Partition>();
public List<Partition> favoris { get; set; } = new List<Partition>();
} }
} }

@ -8,8 +8,10 @@ namespace MusiLib.Model
{ {
public interface IPersistanceManager public interface IPersistanceManager
{ {
(List<Partition>, List<Utilisateur>) chargeDonnees(); (List<Partition>, List<Utilisateur>, List<Partition>) chargeDonnees();
void sauvegardeDonnees(List<Partition> p, List<Utilisateur> u); void sauvegardeDonnees(List<Partition> p, List<Utilisateur> u, List<Partition> f);
void sauvegardeFavori(Partition fav);
} }
} }

@ -13,11 +13,13 @@ namespace MusiLib.Model
public IPersistanceManager Persistance { get; set; } public IPersistanceManager Persistance { get; set; }
public List<Utilisateur> utilisateurs { get; private set; } public List<Utilisateur> utilisateurs { get; private set; }
public List<Partition> partitions { get; private set; } public List<Partition> partitions { get; private set; }
public List<Partition> favoris { get; private set; }
public Manager() public Manager()
{ {
utilisateurs = new List<Utilisateur>(); utilisateurs = new List<Utilisateur>();
partitions = new List<Partition>(); partitions = new List<Partition>();
favoris = new List<Partition>();
} }
public Manager(IPersistanceManager persistance) public Manager(IPersistanceManager persistance)
@ -25,6 +27,7 @@ namespace MusiLib.Model
Persistance = persistance; Persistance = persistance;
utilisateurs = new List<Utilisateur>(); utilisateurs = new List<Utilisateur>();
partitions = new List<Partition>(); partitions = new List<Partition>();
favoris = new List<Partition>();
} }
public void ajouterUtilisateur(Utilisateur utilisateur) public void ajouterUtilisateur(Utilisateur utilisateur)
@ -40,19 +43,20 @@ namespace MusiLib.Model
public void chargeDonnees() public void chargeDonnees()
{ {
var donnees = Persistance.chargeDonnees(); var donnees = Persistance.chargeDonnees();
utilisateurs.AddRange(donnees.Item2);
partitions.AddRange(donnees.Item1); partitions.AddRange(donnees.Item1);
utilisateurs.AddRange(donnees.Item2);
favoris.AddRange(donnees.Item3);
} }
public void sauvegardeDonnees() public void sauvegardeDonnees()
{ {
Persistance.sauvegardeDonnees(partitions, utilisateurs); Persistance.sauvegardeDonnees(partitions, utilisateurs, favoris);
} }
public void sauvegardeFavori(Partition fav)
{
Persistance.sauvegardeFavori(fav);
}
} }
} }

@ -15,7 +15,7 @@
<ApplicationTitle>MusiLib</ApplicationTitle> <ApplicationTitle>MusiLib</ApplicationTitle>
<!-- App Identifier --> <!-- App Identifier -->
<ApplicationId>com.companyname.musilib</ApplicationId> <ApplicationId>fr.iut.musilib</ApplicationId>
<ApplicationIdGuid>c2deb312-b3f3-425c-8e4b-18b5328ffd7c</ApplicationIdGuid> <ApplicationIdGuid>c2deb312-b3f3-425c-8e4b-18b5328ffd7c</ApplicationIdGuid>
<!-- Versions --> <!-- Versions -->
@ -24,7 +24,7 @@
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">14.2</SupportedOSPlatformVersion> <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">14.2</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">14.0</SupportedOSPlatformVersion> <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">14.0</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion> <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">23.0</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</SupportedOSPlatformVersion> <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</SupportedOSPlatformVersion>
<TargetPlatformMinVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</TargetPlatformMinVersion> <TargetPlatformMinVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</TargetPlatformMinVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'tizen'">6.5</SupportedOSPlatformVersion> <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'tizen'">6.5</SupportedOSPlatformVersion>

@ -4,7 +4,8 @@ using Android.OS;
namespace MusiLib; 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 public class MainActivity : MauiAppCompatActivity
{ {
} }

@ -12,10 +12,12 @@ namespace MusiLib.Stub
{ {
public class Stub : IPersistanceManager public class Stub : IPersistanceManager
{ {
public (List<Partition>, List<Utilisateur>) chargeDonnees() public (List<Partition>, List<Utilisateur>, List<Partition>) chargeDonnees()
{ {
List<Partition> partitions = new List<Partition>(); List<Partition> partitions = new List<Partition>();
List<Utilisateur> utilisateurs = new List<Utilisateur>(); List<Utilisateur> utilisateurs = new List<Utilisateur>();
List<Partition> favoris = new List<Partition>();
Utilisateur kevin = new Utilisateur("Kevin"); Utilisateur kevin = new Utilisateur("Kevin");
Utilisateur michel = new Utilisateur("Michel"); Utilisateur michel = new Utilisateur("Michel");
utilisateurs.Add(kevin); utilisateurs.Add(kevin);
@ -40,12 +42,17 @@ namespace MusiLib.Stub
partitions.Add(ode_a_la_joie); partitions.Add(ode_a_la_joie);
partitions.Add(fais_dodo_colas); partitions.Add(fais_dodo_colas);
partitions.Add(Frere_Jacques); partitions.Add(Frere_Jacques);
return (partitions, utilisateurs); return (partitions, utilisateurs, favoris);
} }
public void sauvegardeDonnees(List<Partition> p, List<Utilisateur> u) public void sauvegardeDonnees(List<Partition> p, List<Utilisateur> u, List<Partition> f)
{ {
} }
public void sauvegardeFavori(Partition fav)
{
}
} }
} }

@ -15,7 +15,7 @@ public partial class Favoris : ContentPage, IAllowClick
public Favoris() public Favoris()
{ {
InitializeComponent(); InitializeComponent();
partitionsInitiales = Utilisateur.Favoris.ToList(); partitionsInitiales = MyManager.favoris.ToList();
partitionsFiltrees = new List<Partition>(partitionsInitiales); partitionsFiltrees = new List<Partition>(partitionsInitiales);
chargerFavoris(); chargerFavoris();
} }
@ -125,7 +125,7 @@ public partial class Favoris : ContentPage, IAllowClick
protected override void OnAppearing() protected override void OnAppearing()
{ {
base.OnAppearing(); base.OnAppearing();
partitionsInitiales = Utilisateur.Favoris.ToList(); partitionsInitiales = MyManager.favoris.ToList();
partitionsFiltrees = new List<Partition>(partitionsInitiales); partitionsFiltrees = new List<Partition>(partitionsInitiales);
chargerFavoris(); chargerFavoris();
} }

@ -1,5 +1,6 @@
using Microsoft.Maui.Controls.PlatformConfiguration; using Microsoft.Maui.Controls.PlatformConfiguration;
using MusiLib.Model; using MusiLib.Model;
using System.Collections.Concurrent;
using System.Diagnostics; using System.Diagnostics;
namespace MusiLib.Views; namespace MusiLib.Views;
@ -84,7 +85,7 @@ public partial class PartitionView : ContentPage
private void InitializeButton() private void InitializeButton()
{ {
if (Utilisateur.Favoris.Contains(MyManager.partitions[IdTab])) if (MyManager.favoris.Contains(MyManager.partitions[IdTab]))
{ {
favoriButton.Source = "etoile.png"; favoriButton.Source = "etoile.png";
} }
@ -98,14 +99,15 @@ public partial class PartitionView : ContentPage
{ {
ImageButton button = (ImageButton)sender; 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"; button.Source = "etoile.png";
} }
else else
{ {
Utilisateur.Favoris.Remove(MyManager.partitions[IdTab]); MyManager.favoris.Remove(MyManager.partitions[IdTab]);
button.Source = "etoile_vide.png"; button.Source = "etoile_vide.png";
} }
} }

Loading…
Cancel
Save