From d0f53562e9620b44ba1fbd4b017c178e216e7ff7 Mon Sep 17 00:00:00 2001 From: Jade_VAN_BRABANDT Date: Mon, 5 Jun 2023 17:32:58 +0200 Subject: [PATCH] Feat : On embellit le code --- Sources/Persistance/Persistance.cs | 10 +++++----- Sources/Stim.Model/IPersistance.cs | 4 ++-- Sources/Stim.Model/Manager.cs | 14 +++----------- Sources/Stim/Create.xaml.cs | 24 ++++++++++++------------ Sources/Stub/Stub.cs | 8 ++++---- 5 files changed, 26 insertions(+), 34 deletions(-) diff --git a/Sources/Persistance/Persistance.cs b/Sources/Persistance/Persistance.cs index 37ec0ff..9f6b0d8 100644 --- a/Sources/Persistance/Persistance.cs +++ b/Sources/Persistance/Persistance.cs @@ -17,10 +17,10 @@ namespace StimPersistance Directory.SetCurrentDirectory(chemin); } - public void SaveGame(ObservableCollection games) + public void SaveGame(List games) { XmlWriterSettings settings = new() { Indent = true }; - DataContractSerializer serializer = new(typeof(ObservableCollection)); + DataContractSerializer serializer = new(typeof(List)); using (TextWriter tw = File.CreateText("games.xml")) using (XmlWriter writer = XmlWriter.Create(tw, settings)) serializer.WriteObject(writer, games); @@ -35,12 +35,12 @@ namespace StimPersistance using (XmlWriter writer = XmlWriter.Create(tw, settings)) serializer.WriteObject(writer, users); } - public ObservableCollection LoadGame() + public List LoadGame() { if (File.Exists("games.xml")) { - DataContractSerializer serializer = new(typeof(ObservableCollection)); - using (Stream stream = File.OpenRead("games.xml")) return serializer.ReadObject(stream) as ObservableCollection ?? new(); + DataContractSerializer serializer = new(typeof(List)); + using (Stream stream = File.OpenRead("games.xml")) return serializer.ReadObject(stream) as List ?? new(); } return new(); } diff --git a/Sources/Stim.Model/IPersistance.cs b/Sources/Stim.Model/IPersistance.cs index 36e784f..fbbdb03 100644 --- a/Sources/Stim.Model/IPersistance.cs +++ b/Sources/Stim.Model/IPersistance.cs @@ -4,9 +4,9 @@ namespace Model { public interface IPersistance { - public void SaveGame(ObservableCollection games); + public void SaveGame(List games); public void SaveUser(HashSet users); - public ObservableCollection LoadGame(); + public List LoadGame(); public HashSet LoadUser(); } diff --git a/Sources/Stim.Model/Manager.cs b/Sources/Stim.Model/Manager.cs index 12ee4aa..56dffba 100644 --- a/Sources/Stim.Model/Manager.cs +++ b/Sources/Stim.Model/Manager.cs @@ -11,14 +11,7 @@ namespace Model set { mgrpersistance = value; } } private IPersistance mgrpersistance; - public ObservableCollection GameList { get; set; } - - // dégage ça - // fait une méthode qui te renvoie une liste filtrer avec les params (genre ton nom :D) - // Quand t'ajoute peut être que dasn un certains monde - // il y aura pas le pb car c'est le retour d'une collection Obs - // donc potentiellement si les astres sont alignés ça devrait la mettre à jour - public ObservableCollection ResearchedGame { get; set; } + public List GameList { get; set; } public Game? SelectedGame { get; set; } public User? CurrentUser { get; set; } public HashSet Users { get; set; } @@ -27,7 +20,6 @@ namespace Model { Mgrpersistance = persistance; GameList = persistance.LoadGame(); - ResearchedGame = persistance.LoadGame(); Users = persistance.LoadUser(); } @@ -39,10 +31,10 @@ namespace Model .Where(game => game.Name.IndexOf(filterName, StringComparison.OrdinalIgnoreCase) >= 0 ); if (filterTag1 != null) retList = retList - .Where(game => game.Tags.Any(tag => tag.IndexOf(filterTag1, StringComparison.OrdinalIgnoreCase) >= 0) + .Where(game => game.Tags != null && game.Tags.Any(tag => tag != null && tag.IndexOf(filterTag1, StringComparison.OrdinalIgnoreCase) >= 0) ); if (filterTag2 != null) retList = retList - .Where(game => game.Tags.Any(tag => tag.IndexOf(filterTag2, StringComparison.OrdinalIgnoreCase) >= 0) + .Where(game => game.Tags != null && game.Tags.Any(tag => tag != null && tag.IndexOf(filterTag2, StringComparison.OrdinalIgnoreCase) >= 0) ); return retList; } diff --git a/Sources/Stim/Create.xaml.cs b/Sources/Stim/Create.xaml.cs index 952808c..b317763 100644 --- a/Sources/Stim/Create.xaml.cs +++ b/Sources/Stim/Create.xaml.cs @@ -16,20 +16,20 @@ public partial class Create : ContentPage { if (((App)App.Current).Manager.SearchUser(Username.Text) == null) { - Regex rg = new Regex("^(?=.*[A-Za-z])(?=.*[0-9@$!%*#?&])[A-Za-z-0-9@$!%*#?&]{8,}$"); - if (rg.IsMatch(Pswd.Text)) + Regex rg = new Regex("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$"); + if (rg.IsMatch(Email.Text)) { - ((App)App.Current).Manager.AddUsertoUserList(new("", Username.Text, "", Email.Text, Pswd.Text)); - ((App)App.Current).Manager.CurrentUser = ((App)App.Current).Manager.SearchUser(Username.Text); - Application.Current.MainPage = new AppShell(); - await Shell.Current.GoToAsync("//MainPage"); + rg = new Regex("^(?=.*[A-Za-z])(?=.*[0-9@$!%*#?&])[A-Za-z-0-9@$!%*#?&]{8,}$"); + if (rg.IsMatch(Pswd.Text)) + { + ((App)App.Current).Manager.AddUsertoUserList(new("", Username.Text, "", Email.Text, Pswd.Text)); + ((App)App.Current).Manager.CurrentUser = ((App)App.Current).Manager.SearchUser(Username.Text); + Application.Current.MainPage = new AppShell(); + await Shell.Current.GoToAsync("//MainPage"); + } + else Error.Children.Add(new Label { Text = "Mot de passe invalide, votre mot de passe doit contenir une Majuscule, une minuscule, un chiffre et faire au moins 8 caractères", TextColor = Colors.Red, VerticalTextAlignment = TextAlignment.Start }); } - else Error.Children.Add(new Label { Text = "Mot de passe invalide, votre mot de passe doit contenir une Majuscule, une minuscule, un chiffre et faire au moins 8 caractères", TextColor = Colors.Red, VerticalTextAlignment = TextAlignment.Start }); - rg = new Regex("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$"); - /*if ( rg.IsMatch ) - { - - }*/ + else Error.Children.Add(new Label { Text = "Email invalide", TextColor = Colors.Red, VerticalTextAlignment = TextAlignment.Start }); } else Error.Children.Add(new Label { Text = "Ce nom d'utilisateur est déjà pris", TextColor = Colors.Red, VerticalTextAlignment = TextAlignment.Start }); } diff --git a/Sources/Stub/Stub.cs b/Sources/Stub/Stub.cs index e5bdff0..01337d0 100644 --- a/Sources/Stub/Stub.cs +++ b/Sources/Stub/Stub.cs @@ -7,21 +7,21 @@ namespace StimStub [ExcludeFromCodeCoverage] public class Stub : IPersistance { - public ObservableCollection Games = new(); + public List Games = new(); public Stub() { Games = LoadGame(); } - public void SaveGame(ObservableCollection games) + public void SaveGame(List games) { foreach (Game game in games) if (!Games.Contains(game)) Games.Add(game); } - public ObservableCollection LoadGame() + public List LoadGame() { - ObservableCollection tmp = new(); + List tmp = new(); tmp.Add(new("Elden Ring", "Elden Ring est un jeu de rôle d'action de 2022 qui a été développé par FromSoftware, publié par Bandai Namco Entertainment et réalisé par Hidetaka Miyazaki avec la construction du monde fournie par l'écrivain fantastique George R. R. Martin. Il est sorti sur PlayStation 4, PlayStation 5, Microsoft Windows, Xbox One et Xbox Series X / S le 25 février. Les joueurs contrôlent un personnage de joueur personnalisable qui est en quête de réparer l'Elden Ring et de devenir le nouveau Elden Lord.\r\n\r\nElden Ring est présenté à travers une perspective à la troisième personne; les joueurs parcourent librement son monde ouvert interactif. Les six zones principales sont traversées en utilisant le coursier Torrent du personnage du joueur comme principal mode de déplacement. Des donjons cachés linéaires peuvent être explorés pour trouver des objets utiles. Les joueurs peuvent utiliser plusieurs types d'armes et de sorts magiques, y compris l'engagement non direct activé par la mécanique furtive. Partout dans le monde du jeu, les points de contrôle permettent des déplacements rapides et permettent aux joueurs d'améliorer leurs attributs en utilisant une monnaie du jeu appelée Runes. Elden Ring propose un mode multijoueur en ligne dans lequel les joueurs peuvent se rejoindre pour des combats coopératifs et joueur contre joueur.\r\n\r\nLors de la planification, FromSoftware voulait créer un jeu en monde ouvert avec un gameplay similaire à Dark Souls ; la société voulait qu'Elden Ring agisse comme une évolution du premier titre éponyme de la série. Miyazaki admirait le travail de Martin, dont il espérait que les contributions produiraient un récit plus accessible que ceux des jeux précédents de la société. Martin a eu la liberté illimitée de concevoir la trame de fond tandis que Miyazaki était l'auteur principal du récit du jeu. Les développeurs se sont concentrés sur l'échelle environnementale, le jeu de rôle et l'histoire ; l'échelle a nécessité la construction de plusieurs structures à l'intérieur du monde ouvert.\r\n\r\nElden Ring a été acclamé par la critique; les critiques ont loué son monde ouvert, ses systèmes de jeu et son cadre, mais certains ont critiqué ses performances techniques. Il a remporté plusieurs prix du jeu de l'année et s'est vendu à plus de 20 millions d'exemplaires en un an. Une extension appelée Shadow of the Erdtree a été annoncée en février 2023.", 2022, new List { "Action", "Solo", "RPG" }, "elden_ring.jpg", "https://www.instant-gaming.com/fr/4824-acheter-elden-ring-pc-jeu-steam-europe/")); tmp[0].AddReview(new("User 1", 5, "C'est trop bien"));