diff --git a/Sources/AppConsole/Program.cs b/Sources/AppConsole/Program.cs index aae9261..fbbf4b5 100644 --- a/Sources/AppConsole/Program.cs +++ b/Sources/AppConsole/Program.cs @@ -1,5 +1,31 @@ using Model; using StimPersistance; -using Stub; +using StimStub; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using System.Xml; -IPersistance persistance = new Persistance(); \ No newline at end of file +namespace ConsoleApp +{ + class Program + { + static void Main(string[] args) + { + ObservableCollection games = new ObservableCollection(); + games.Add(new("Elden Ring", "description", 2010, new List { "1", "2", "3" }, "elden_ring.jpg")); + games[0].AddReview(new(5, "C'est trop bien")); + games[0].AddReview(new(3.5f, "C'est bien")); + games[0].AddReview(new(1.5f, "C'est pas bien")); + games[0].AddReview(new(4, "C'est trop bien")); + games[0].AddReview(new(3f, "C'est bien")); + games[0].AddReview(new(2.5f, "C'est pas bien")); + games.Add(new("Minecraft", "description", 2010, new List { "1", "2", "3" }, "minecraft.jpeg")); + games.Add(new("Celeste", "description", 2010, new List { "1", "2" }, "celeste.png")); + games.Add(new("GTA V", "description", 2010, new List { "1", "2", "3" }, "gta_v.png")); + + IPersistance stub = new Stub(); + + stub.SaveGame(games); + } + } +} diff --git a/Sources/Persistance/Persistance.cs b/Sources/Persistance/Persistance.cs index 933f5ee..e30ccce 100644 --- a/Sources/Persistance/Persistance.cs +++ b/Sources/Persistance/Persistance.cs @@ -1,27 +1,40 @@ -using Model; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using System.Xml; +using Model; namespace StimPersistance { public class Persistance : IPersistance { - public List LoadGame() + public Persistance() { - return null; - } - - public List LoadUser() - { - return null; + Directory.SetCurrentDirectory("C:\\Users\\Admin\\source\\repos\\Projet_IHM\\Sources\\XML"); } - public void SaveGame(List games) + public void SaveGame(ObservableCollection games) { + XmlWriterSettings settings = new() { Indent = true }; + DataContractSerializer serializer = new(typeof(ObservableCollection)); + using (TextWriter tw = File.CreateText("games.xml")) + using (XmlWriter writer = XmlWriter.Create(tw, settings)) serializer.WriteObject(writer, games); } public void SaveUser(List users) { + + } + public ObservableCollection LoadGame() + { + DataContractSerializer serializer = new(typeof(ObservableCollection)); + using (Stream stream = File.OpenRead("games.xml")) return serializer.ReadObject(stream) as ObservableCollection; } + + public List LoadUser() + { + return null; + } } } \ No newline at end of file diff --git a/Sources/Stim.Model/Game.cs b/Sources/Stim.Model/Game.cs index cd0ae57..532633d 100644 --- a/Sources/Stim.Model/Game.cs +++ b/Sources/Stim.Model/Game.cs @@ -67,6 +67,7 @@ namespace Model } private ObservableCollection tags; + [DataMember] public List Reviews { get; private init; } [DataMember] @@ -104,7 +105,14 @@ namespace Model public override string ToString() { - return $"{Name} : {Description} : {Year} : {Cover}"; + string s = $"{Name} : {Description} : {Year} : {Cover}\n"; + + foreach(Review review in Reviews) + { + s += review; + } + + return s+"\n"; } public float GetAvgRate() diff --git a/Sources/Stim.Model/IPersistance.cs b/Sources/Stim.Model/IPersistance.cs index 8106660..2d59346 100644 --- a/Sources/Stim.Model/IPersistance.cs +++ b/Sources/Stim.Model/IPersistance.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -8,9 +9,9 @@ namespace Model { public interface IPersistance { - public List LoadGame(); - public List LoadUser(); + public void SaveGame(ObservableCollection games); public void SaveUser(List users); - public void SaveGame(List games); + public ObservableCollection LoadGame(); + public List LoadUser(); } } diff --git a/Sources/Stim.Model/Manager.cs b/Sources/Stim.Model/Manager.cs index 9c82f83..748da89 100644 --- a/Sources/Stim.Model/Manager.cs +++ b/Sources/Stim.Model/Manager.cs @@ -15,13 +15,7 @@ namespace Model public Manager(IPersistance persistance) { _persistance = persistance; - Games.Add(new("Elden Ring", "description", 2010, new List { "1","2","3"}, "elden_ring.jpg")); - Games[0].AddReview(new(5, "C'est trop bien")); - Games[0].AddReview(new(3.5f, "C'est bien")); - Games[0].AddReview(new(1.5f, "C'est pas bien")); - Games.Add(new("Minecraft", "description", 2010, new List { "1", "2", "3" }, "minecraft.jpeg")); - Games.Add(new("Celeste", "description", 2010, new List { "1", "2" }, "celeste.png")); - Games.Add(new("GTA V", "description", 2010, new List { "1", "2", "3" }, "gta_v.png")); + Games = _persistance.LoadGame(); } } } diff --git a/Sources/Stim.Model/Review.cs b/Sources/Stim.Model/Review.cs index ec32a32..434c10b 100644 --- a/Sources/Stim.Model/Review.cs +++ b/Sources/Stim.Model/Review.cs @@ -1,13 +1,16 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; namespace Model { + [DataContract] public class Review { + [DataMember] public float Rate { get @@ -22,6 +25,7 @@ namespace Model } private float rate; + [DataMember] public string Text { get @@ -36,6 +40,7 @@ namespace Model } private string text; + [DataMember] public string AuthorName { get { return authorName; } @@ -51,6 +56,13 @@ namespace Model Text = text; } + public Review() { } + + public override string ToString() + { + return $"{AuthorName} : {Rate} : {Text}\n"; + } + public void EditReview(string text) { Text = text+" (Modifié)"; diff --git a/Sources/Stim.Model/User.cs b/Sources/Stim.Model/User.cs index c8351e9..7d1ddc4 100644 --- a/Sources/Stim.Model/User.cs +++ b/Sources/Stim.Model/User.cs @@ -1,18 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; +using System.Text.RegularExpressions; namespace Model { public class User { - static int nbUser = 0; - private int id; - public string Username { get { return username; } @@ -70,9 +61,6 @@ namespace Model public User(string username, string biographie, string email, string password) { - nbUser++; - id = nbUser; - Username = username; Biographie = biographie; Email = email; diff --git a/Sources/Stub/Stub.cs b/Sources/Stub/Stub.cs index a4cb6e8..4614e8d 100644 --- a/Sources/Stub/Stub.cs +++ b/Sources/Stub/Stub.cs @@ -1,27 +1,40 @@ using Model; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using System.Xml; -namespace Stub +namespace StimStub { public class Stub : IPersistance { - public List LoadGame() + public Stub() { - return null; + Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "..//..//..//..//XML//")); } - public List LoadUser() + public void SaveGame(ObservableCollection games) { - return null; + XmlWriterSettings settings = new() { Indent = true }; + DataContractSerializer serializer = new(typeof(ObservableCollection)); + + using (TextWriter tw = File.CreateText("games.xml")) + using (XmlWriter writer = XmlWriter.Create(tw, settings)) serializer.WriteObject(writer, games); } - public void SaveGame(List games) + public void SaveUser(List users) { } - public void SaveUser(List users) + public ObservableCollection LoadGame() { + DataContractSerializer serializer = new(typeof(ObservableCollection)); + using (Stream stream = File.OpenRead("games.xml")) return serializer.ReadObject(stream) as ObservableCollection; + } + public List LoadUser() + { + return null; } } } \ No newline at end of file diff --git a/Sources/XML/games.xml b/Sources/XML/games.xml new file mode 100644 index 0000000..6c760c5 --- /dev/null +++ b/Sources/XML/games.xml @@ -0,0 +1,85 @@ + + + + 3.5 + elden_ring.jpg + description + Elden Ring + + + + 5 + C'est trop bien + + + + 3.5 + C'est bien + + + + 1.5 + C'est pas bien + + + + 4 + C'est trop bien + + + + 3 + C'est bien + + + + 2.5 + C'est pas bien + + + + 1 + 2 + 3 + + 2010 + + + 0 + minecraft.jpeg + description + Minecraft + + + 1 + 2 + 3 + + 2010 + + + 0 + celeste.png + description + Celeste + + + 1 + 2 + + 2010 + + + 0 + gta_v.png + description + GTA V + + + 1 + 2 + 3 + + 2010 + + \ No newline at end of file