doxygen
continuous-integration/drone/push Build is passing Details

master
Anthony RICHARD 2 years ago
parent f6a58fd818
commit 7d4366326f

@ -55,8 +55,8 @@ steps:
- name: docs - name: docs
path: /docs path: /docs
commands: commands:
#- cd Documentation/doxygen - cd Documentation/doxygen
#- doxygen Doxyfile - doxygen Doxyfile
- /entrypoint.sh - /entrypoint.sh
when: when:
branch: branch:

@ -6,10 +6,16 @@ using System.Text;
namespace Model namespace Model
{ {
/// <summary>
/// Représente un jeu.
/// </summary>
[DataContract] [DataContract]
public sealed class Game : INotifyPropertyChanged, IEquatable<Game> public sealed class Game : INotifyPropertyChanged, IEquatable<Game>
{ {
[DataMember] [DataMember]
/// <summary>
/// Obtient ou définit le nom du jeu.
/// </summary>
public string Name public string Name
{ {
get => name; get => name;
@ -23,6 +29,9 @@ namespace Model
private string name = default!; private string name = default!;
[DataMember] [DataMember]
/// <summary>
/// Obtient ou définit la description du jeu.
/// </summary>
public string Description public string Description
{ {
get => description; get => description;
@ -36,6 +45,9 @@ namespace Model
private string description = default!; private string description = default!;
[DataMember] [DataMember]
/// <summary>
/// Obtient ou définit l'année de sortie du jeu.
/// </summary>
public int Year public int Year
{ {
get => year; get => year;
@ -49,6 +61,9 @@ namespace Model
private int year = default!; private int year = default!;
[DataMember] [DataMember]
/// <summary>
/// Obtient ou définit la couverture du jeu.
/// </summary>
public string Cover public string Cover
{ {
get => cover; get => cover;
@ -60,7 +75,10 @@ namespace Model
} }
} }
private string cover = default!; private string cover = default!;
/// <summary>
/// Obtient les étiquettes du jeu.
/// </summary>
public ReadOnlyCollection<string> Tags public ReadOnlyCollection<string> Tags
{ {
get => tags.AsReadOnly(); get => tags.AsReadOnly();
@ -74,15 +92,25 @@ namespace Model
[DataMember] [DataMember]
private List<string> tags; private List<string> tags;
/// <summary>
/// Obtient les avis sur le jeu.
/// </summary>
public ReadOnlyCollection<Review> Reviews => reviews.AsReadOnly(); public ReadOnlyCollection<Review> Reviews => reviews.AsReadOnly();
[DataMember] [DataMember]
private readonly List<Review> reviews; private readonly List<Review> reviews;
/// <summary>
/// Obtient la note moyenne du jeu.
/// </summary>
public double Average => Reviews.Any() ? Math.Round(Reviews.Select(review => review.Rate).Average(), 1) : 0; public double Average => Reviews.Any() ? Math.Round(Reviews.Select(review => review.Rate).Average(), 1) : 0;
[DataMember] [DataMember]
public string Lien { /// <summary>
/// Obtient ou définit le lien du jeu.
/// </summary>
public string Lien
{
get => lien; get => lien;
private set private set
{ {
@ -93,6 +121,15 @@ namespace Model
} }
private string lien = default!; private string lien = default!;
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="Game"/> avec les valeurs spécifiées.
/// </summary>
/// <param name="name">Le nom du jeu.</param>
/// <param name="description">La description du jeu.</param>
/// <param name="year">L'année de sortie du jeu.</param>
/// <param name="c_tags">Les étiquettes du jeu.</param>
/// <param name="cover">La couverture du jeu.</param>
/// <param name="c_lien">Le lien du jeu.</param>
public Game(string name, string description, int year, List<string> c_tags, string cover, string c_lien) public Game(string name, string description, int year, List<string> c_tags, string cover, string c_lien)
{ {
if (string.IsNullOrWhiteSpace(name)) Name = "Default"; if (string.IsNullOrWhiteSpace(name)) Name = "Default";
@ -109,17 +146,29 @@ namespace Model
reviews = new List<Review>(); reviews = new List<Review>();
} }
/// <summary>
/// Événement déclenché lorsque la valeur d'une propriété change.
/// </summary>
public event PropertyChangedEventHandler? PropertyChanged; public event PropertyChangedEventHandler? PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
/// <summary>
/// Retourne le code de hachage pour l'objet.
/// </summary>
/// <returns>Le code de hachage calculé.</returns>
public override int GetHashCode() public override int GetHashCode()
{ {
if (string.IsNullOrWhiteSpace(Name)) return 0; if (string.IsNullOrWhiteSpace(Name)) return 0;
return Name.GetHashCode(); return Name.GetHashCode();
} }
/// <summary>
/// Détermine si l'objet spécifié est égal à l'objet actuel.
/// </summary>
/// <param name="obj">L'objet à comparer avec l'objet actuel.</param>
/// <returns>True si les objets sont égaux, sinon False.</returns>
public override bool Equals(object? obj) public override bool Equals(object? obj)
{ {
if (object.ReferenceEquals(obj, null)) return false; if (object.ReferenceEquals(obj, null)) return false;
@ -128,12 +177,21 @@ namespace Model
return this.Equals(obj as Game); return this.Equals(obj as Game);
} }
/// <summary>
/// Détermine si l'objet spécifié est égal à l'objet actuel.
/// </summary>
/// <param name="other">L'objet à comparer avec l'objet actuel.</param>
/// <returns>True si les objets sont égaux, sinon False.</returns>
public bool Equals(Game? other) public bool Equals(Game? other)
{ {
if (string.IsNullOrWhiteSpace(Name)) return false; if (string.IsNullOrWhiteSpace(Name)) return false;
return other != null && Name.Equals(other.Name); return other != null && Name.Equals(other.Name);
} }
/// <summary>
/// Retourne une chaîne qui représente l'objet courant.
/// </summary>
/// <returns>Une chaîne qui représente l'objet courant.</returns>
public override string ToString() public override string ToString()
{ {
StringBuilder builder = new(); StringBuilder builder = new();
@ -147,36 +205,69 @@ namespace Model
return builder.ToString(); return builder.ToString();
} }
/// <summary>
/// Ajoute un avis sur le jeu.
/// </summary>
/// <param name="review">L'avis à ajouter.</param>
public void AddReview(Review review) public void AddReview(Review review)
{ {
reviews.Add(review); reviews.Add(review);
UpdateReviews(); UpdateReviews();
} }
/// <summary>
/// Supprime un avis du jeu.
/// </summary>
/// <param name="review">L'avis à supprimer.</param>
public void RemoveReview(Review review) public void RemoveReview(Review review)
{ {
reviews.Remove(review); reviews.Remove(review);
UpdateReviews(); UpdateReviews();
} }
/// <summary>
/// Met à jour la liste des avis et la note moyenne.
/// </summary>
public void UpdateReviews() public void UpdateReviews()
{ {
NotifyPropertyChanged(nameof(Reviews)); NotifyPropertyChanged(nameof(Reviews));
NotifyPropertyChanged(nameof(Average)); NotifyPropertyChanged(nameof(Average));
} }
/// <summary>
/// Modifie la description du jeu.
/// </summary>
/// <param name="newdesc">La nouvelle description.</param>
public void DescChange(string newdesc) public void DescChange(string newdesc)
{ {
description = newdesc; description = newdesc;
} }
/// <summary>
/// Modifie les étiquettes du jeu.
/// </summary>
/// <param name="newtag">La nouvelle liste d'étiquettes.</param>
public void TagChange(List<string> newtag) public void TagChange(List<string> newtag)
{ {
if (newtag != null && newtag.Count<=3) tags = new List<string>(newtag); if (newtag != null && newtag.Count <= 3) tags = new List<string>(newtag);
} }
/// <summary>
/// Modifie le nom du jeu.
/// </summary>
/// <param name="newname">Le nouveau nom.</param>
public void NameChange(string newname) public void NameChange(string newname)
{ {
name = newname; name = newname;
} }
/// <summary>
/// Modifie l'année de sortie du jeu.
/// </summary>
/// <param name="newyear">La nouvelle année.</param>
public void YearChange(int newyear) public void YearChange(int newyear)
{ {
year = newyear; year = newyear;
} }
} }
} }

@ -1,13 +1,32 @@
using System.Collections.ObjectModel; namespace Model
namespace Model
{ {
/// <summary>
/// Interface pour la persistance des données.
/// </summary>
public interface IPersistance public interface IPersistance
{ {
/// <summary>
/// Sauvegarde la liste des jeux.
/// </summary>
/// <param name="games">La liste des jeux à sauvegarder.</param>
public void SaveGame(List<Game> games); public void SaveGame(List<Game> games);
/// <summary>
/// Sauvegarde la liste des utilisateurs.
/// </summary>
/// <param name="users">La liste des utilisateurs à sauvegarder.</param>
public void SaveUser(HashSet<User> users); public void SaveUser(HashSet<User> users);
/// <summary>
/// Charge la liste des jeux.
/// </summary>
/// <returns>La liste des jeux chargée.</returns>
public List<Game> LoadGame(); public List<Game> LoadGame();
public HashSet<User> LoadUser();
/// <summary>
/// Charge la liste des utilisateurs.
/// </summary>
/// <returns>La liste des utilisateurs chargée.</returns>
public HashSet<User> LoadUser();
} }
} }

@ -1,18 +1,43 @@
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Linq;
namespace Model namespace Model
{ {
/// <summary>
/// Classe responsable de la gestion des jeux et des utilisateurs.
/// </summary>
public class Manager public class Manager
{ {
/// <summary>
/// Le type de persistance utilisé par le gestionnaire.
/// </summary>
public readonly IPersistance mgrpersistance; public readonly IPersistance mgrpersistance;
/// <summary>
/// La liste des jeux disponibles.
/// </summary>
public ReadOnlyCollection<Game> GameList => gameList.AsReadOnly(); public ReadOnlyCollection<Game> GameList => gameList.AsReadOnly();
private readonly List<Game> gameList; private readonly List<Game> gameList;
/// <summary>
/// Le jeu sélectionné actuellement.
/// </summary>
public Game? SelectedGame { get; set; } public Game? SelectedGame { get; set; }
/// <summary>
/// L'utilisateur actuellement connecté.
/// </summary>
public User? CurrentUser { get; set; } public User? CurrentUser { get; set; }
/// <summary>
/// La liste des utilisateurs enregistrés.
/// </summary>
public HashSet<User> Users { get; private set; } public HashSet<User> Users { get; private set; }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="Manager"/> avec un objet de persistance spécifié.
/// </summary>
/// <param name="persistance">Le type de persistance utilisé pour charger/sauvegarder les jeux et les utilisateurs.</param>
public Manager(IPersistance persistance) public Manager(IPersistance persistance)
{ {
mgrpersistance = persistance; mgrpersistance = persistance;
@ -20,6 +45,13 @@ namespace Model
Users = persistance.LoadUser(); Users = persistance.LoadUser();
} }
/// <summary>
/// Filtre les jeux en fonction des critères de filtrage donnés.
/// </summary>
/// <param name="filterName">Nom du jeu à filtrer.</param>
/// <param name="filterTag1">Première étiquette à filtrer.</param>
/// <param name="filterTag2">Deuxième étiquette à filtrer.</param>
/// <returns>Une liste de jeux filtrée.</returns>
public IEnumerable<Game> FilterGames(string? filterName, string? filterTag1, string? filterTag2) public IEnumerable<Game> FilterGames(string? filterName, string? filterTag1, string? filterTag2)
{ {
IEnumerable<Game> retList; IEnumerable<Game> retList;
@ -36,28 +68,51 @@ namespace Model
return retList; return retList;
} }
/// <summary>
/// Ajoute un jeu à la liste des jeux.
/// </summary>
/// <param name="game">Le jeu à ajouter.</param>
public void AddGametoGamesList(Game game) public void AddGametoGamesList(Game game)
{ {
if (!gameList.Contains(game)) gameList.Add(game); if (!gameList.Contains(game)) gameList.Add(game);
mgrpersistance.SaveGame(gameList); mgrpersistance.SaveGame(gameList);
} }
/// <summary>
/// Ajoute un utilisateur à la liste des utilisateurs.
/// </summary>
/// <param name="user">L'utilisateur à ajouter.</param>
public void AddUsertoUserList(User user) public void AddUsertoUserList(User user)
{ {
if (!Users.Contains(user)) Users.Add(user); if (!Users.Contains(user)) Users.Add(user);
mgrpersistance.SaveUser(Users); mgrpersistance.SaveUser(Users);
} }
/// <summary>
/// Supprime un jeu de la liste des jeux.
/// </summary>
/// <param name="game">Le jeu à supprimer.</param>
public void RemoveGameFromGamesList(Game game) public void RemoveGameFromGamesList(Game game)
{ {
SelectedGame = null; SelectedGame = null;
gameList.Remove(game); gameList.Remove(game);
mgrpersistance.SaveGame(gameList); mgrpersistance.SaveGame(gameList);
} }
/// <summary>
/// Sauvegarde les jeux.
/// </summary>
[ExcludeFromCodeCoverage] [ExcludeFromCodeCoverage]
public void SaveGames() public void SaveGames()
{ {
mgrpersistance.SaveGame(gameList); mgrpersistance.SaveGame(gameList);
} }
/// <summary>
/// Recherche un utilisateur par son nom d'utilisateur.
/// </summary>
/// <param name="username">Le nom d'utilisateur à rechercher.</param>
/// <returns>L'utilisateur correspondant, ou null s'il n'est pas trouvé.</returns>
public User? SearchUser(string username) public User? SearchUser(string username)
{ {
foreach (User user in Users) foreach (User user in Users)
@ -66,12 +121,19 @@ namespace Model
} }
return null; return null;
} }
/// <summary>
/// Sauvegarde les utilisateurs.
/// </summary>
[ExcludeFromCodeCoverage] [ExcludeFromCodeCoverage]
public void SaveUser() public void SaveUser()
{ {
mgrpersistance.SaveUser(Users); mgrpersistance.SaveUser(Users);
} }
/// <summary>
/// Met à jour les références des jeux suivis par l'utilisateur actuel.
/// </summary>
[ExcludeFromCodeCoverage] [ExcludeFromCodeCoverage]
public void UpdateReferences() public void UpdateReferences()
{ {

@ -4,10 +4,16 @@ using System.Runtime.Serialization;
namespace Model namespace Model
{ {
/// <summary>
/// Représente un commentaire.
/// </summary>
[DataContract] [DataContract]
public class Review :INotifyPropertyChanged public class Review : INotifyPropertyChanged
{ {
[DataMember] [DataMember]
/// <summary>
/// Obtient ou définit la note du commentaire.
/// </summary>
public double Rate public double Rate
{ {
get => rate; get => rate;
@ -21,6 +27,9 @@ namespace Model
private double rate; private double rate;
[DataMember] [DataMember]
/// <summary>
/// Obtient ou définit le texte du commentaire.
/// </summary>
public string? Text public string? Text
{ {
get => text; get => text;
@ -33,13 +42,26 @@ namespace Model
} }
private string? text; private string? text;
/// <summary>
/// Événement déclenché lorsque les propriétés de l'objet changent.
/// </summary>
public event PropertyChangedEventHandler? PropertyChanged; public event PropertyChangedEventHandler? PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
[DataMember] [DataMember]
/// <summary>
/// Obtient ou définit le nom de l'auteur du commentaire.
/// </summary>
public string AuthorName { get; set; } public string AuthorName { get; set; }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="Review"/> avec le nom de l'auteur, la note et le texte du commentaire.
/// </summary>
/// <param name="username">Le nom de l'auteur du commentaire.</param>
/// <param name="rate">La note du commentaire.</param>
/// <param name="text">Le texte du commentaire.</param>
public Review(string username, double rate, string text) public Review(string username, double rate, string text)
{ {
AuthorName = username; AuthorName = username;
@ -47,18 +69,31 @@ namespace Model
Text = text; Text = text;
} }
/// <summary>
/// Retourne une représentation sous forme de chaîne de l'objet courant.
/// </summary>
/// <returns>La représentation sous forme de chaîne de l'objet courant.</returns>
public override string ToString() public override string ToString()
{ {
return $"{AuthorName} : {Rate} : {Text}"; return $"{AuthorName} : {Rate} : {Text}";
} }
/// <summary>
/// Modifie le texte du commentaire.
/// </summary>
/// <param name="text">Le nouveau texte du commentaire.</param>
public void EditReview(string text) public void EditReview(string text)
{ {
if (!string.IsNullOrWhiteSpace(text)) Text = text+" (Modifié)"; if (!string.IsNullOrWhiteSpace(text)) Text = text + " (Modifié)";
} }
/// <summary>
/// Modifie la note du commentaire.
/// </summary>
/// <param name="newval">La nouvelle valeur de la note.</param>
public void EditRate(double newval) public void EditRate(double newval)
{ {
if (newval >= 0 && newval <= 5) Rate= newval; if (newval >= 0 && newval <= 5) Rate = newval;
} }
} }
} }

@ -7,9 +7,15 @@ using System.Text.RegularExpressions;
namespace Model namespace Model
{ {
/// <summary>
/// Représente un utilisateur.
/// </summary>
[DataContract] [DataContract]
public sealed class User : INotifyPropertyChanged , IEquatable<User> public sealed class User : INotifyPropertyChanged, IEquatable<User>
{ {
/// <summary>
/// Obtient ou définit la photo de profil de l'utilisateur.
/// </summary>
[DataMember] [DataMember]
public string UserImage public string UserImage
{ {
@ -22,6 +28,10 @@ namespace Model
} }
} }
private string userImage = default!; private string userImage = default!;
/// <summary>
/// Obtient ou définit le nom d'utilisateur.
/// </summary>
[DataMember] [DataMember]
public string? Username public string? Username
{ {
@ -33,11 +43,15 @@ namespace Model
NotifyPropertyChanged(); NotifyPropertyChanged();
} }
} }
private string username=default!; private string username = default!;
/// <summary>
/// Obtient ou définit la biographie de l'utilisateur.
/// </summary>
[DataMember] [DataMember]
public string Biographie public string Biographie
{ {
get => biographie; get => biographie;
set set
{ {
if (string.IsNullOrWhiteSpace(value)) biographie = "Pas de biographie"; if (string.IsNullOrWhiteSpace(value)) biographie = "Pas de biographie";
@ -46,6 +60,10 @@ namespace Model
} }
} }
private string biographie = default!; private string biographie = default!;
/// <summary>
/// Obtient ou définit l'adresse e-mail de l'utilisateur.
/// </summary>
[DataMember] [DataMember]
public string Email public string Email
{ {
@ -62,6 +80,10 @@ namespace Model
} }
} }
private string email = default!; private string email = default!;
/// <summary>
/// Obtient ou définit le mot de passe de l'utilisateur.
/// </summary>
[DataMember] [DataMember]
public string Password public string Password
{ {
@ -79,16 +101,30 @@ namespace Model
} }
private string password = default!; private string password = default!;
/// <summary>
/// Événement déclenché lorsqu'une propriété de l'utilisateur change.
/// </summary>
public event PropertyChangedEventHandler? PropertyChanged; public event PropertyChangedEventHandler? PropertyChanged;
/// <summary>
/// Obtient la liste des jeux suivis par l'utilisateur.
/// </summary>
public ReadOnlyCollection<Game> Followed_Games => followed_Games.AsReadOnly(); public ReadOnlyCollection<Game> Followed_Games => followed_Games.AsReadOnly();
[DataMember] [DataMember]
private readonly List<Game> followed_Games; private readonly List<Game> followed_Games;
public User(string userImage,string username, string biographie, string email, string password) /// <summary>
/// Initialise une nouvelle instance de la classe <see cref="User"/>.
/// </summary>
/// <param name="userImage">La photo de profil de l'utilisateur.</param>
/// <param name="username">Le nom d'utilisateur.</param>
/// <param name="biographie">La biographie de l'utilisateur.</param>
/// <param name="email">L'adresse e-mail de l'utilisateur.</param>
/// <param name="password">Le mot de passe de l'utilisateur.</param>
public User(string userImage, string username, string biographie, string email, string password)
{ {
if (userImage == null) UserImage="no_cover.png"; if (userImage == null) UserImage = "no_cover.png";
else UserImage = userImage; else UserImage = userImage;
if (username == null) Username = "Default"; if (username == null) Username = "Default";
else Username = username; else Username = username;
@ -100,15 +136,26 @@ namespace Model
else Password = password; else Password = password;
followed_Games = new List<Game>(); followed_Games = new List<Game>();
} }
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
/// <summary>
/// Détermine si l'objet spécifié est égal à l'objet courant.
/// </summary>
/// <param name="other">L'objet à comparer avec l'objet courant.</param>
/// <returns>true si l'objet spécifié est égal à l'objet courant ; sinon, false.</returns>
public bool Equals(User? other) public bool Equals(User? other)
{ {
if (string.IsNullOrWhiteSpace(Username)) return false; if (string.IsNullOrWhiteSpace(Username)) return false;
return other != null && Username.Equals(other.Username); return other != null && Username.Equals(other.Username);
} }
/// <summary>
/// Détermine si l'objet spécifié est égal à l'objet courant.
/// </summary>
/// <param name="obj">L'objet à comparer avec l'objet courant.</param>
/// <returns>true si l'objet spécifié est égal à l'objet courant ; sinon, false.</returns>
public override bool Equals(object? obj) public override bool Equals(object? obj)
{ {
if (obj == null) return false; if (obj == null) return false;
@ -117,16 +164,33 @@ namespace Model
return this.Equals((User)obj); return this.Equals((User)obj);
} }
/// <summary>
/// Retourne le code de hachage de l'objet.
/// </summary>
/// <returns>Code de hachage.</returns>
public override int GetHashCode() public override int GetHashCode()
{ {
if (Username!=null) return Username.GetHashCode(); if (Username != null) return Username.GetHashCode();
return 0; return 0;
} }
/// <summary>
/// Ajoute une critique d'utilisateur pour un jeu spécifié.
/// </summary>
/// <param name="game">Le jeu pour lequel ajouter la critique.</param>
/// <param name="rate">La note de la critique.</param>
/// <param name="text">Le texte de la critique.</param>
public void AddReview(Game game, double rate, string text) public void AddReview(Game game, double rate, string text)
{ {
game.AddReview(new Review(Username, rate, text)); game.AddReview(new Review(Username, rate, text));
} }
/// <summary>
/// Supprime la critique de l'utilisateur pour un jeu spécifié.
/// </summary>
/// <param name="game">Le jeu pour lequel supprimer la critique.</param>
/// <param name="rate">La note de la critique.</param>
/// <param name="text">Le texte de la critique.</param>
public void RemoveSelfReview(Game game, float rate, string text) public void RemoveSelfReview(Game game, float rate, string text)
{ {
for (int i = game.Reviews.Count - 1; i >= 0; i--) for (int i = game.Reviews.Count - 1; i >= 0; i--)
@ -138,12 +202,22 @@ namespace Model
} }
} }
} }
/// <summary>
/// Suit un jeu spécifié.
/// </summary>
/// <param name="game">Le jeu à suivre.</param>
public void FollowAGame(Game game) public void FollowAGame(Game game)
{ {
if (Followed_Games.Contains(game)) return; if (Followed_Games.Contains(game)) return;
followed_Games.Add(game); followed_Games.Add(game);
NotifyPropertyChanged(nameof(Followed_Games)); NotifyPropertyChanged(nameof(Followed_Games));
} }
/// <summary>
/// Ne suit plus un jeu spécifié.
/// </summary>
/// <param name="game">Le jeu à ne plus suivre.</param>
public void RemoveAGame(Game game) public void RemoveAGame(Game game)
{ {
if (!Followed_Games.Contains(game)) return; if (!Followed_Games.Contains(game)) return;
@ -151,6 +225,10 @@ namespace Model
NotifyPropertyChanged(nameof(Followed_Games)); NotifyPropertyChanged(nameof(Followed_Games));
} }
/// <summary>
/// Retourne une représentation sous forme de chaîne de l'objet.
/// </summary>
/// <returns>La représentation sous forme de chaîne de l'objet.</returns>
public override string ToString() public override string ToString()
{ {
StringBuilder builder = new(); StringBuilder builder = new();
@ -159,4 +237,4 @@ namespace Model
return builder.ToString(); return builder.ToString();
} }
} }
} }

@ -16,15 +16,13 @@
IsPassword="False" IsPassword="False"
x:Name="Username" x:Name="Username"
HeightRequest="50" HeightRequest="50"
ClearButtonVisibility="WhileEditing" ClearButtonVisibility="WhileEditing"/>
Text="anthony"/>
<Entry Placeholder="Mot de passe" <Entry Placeholder="Mot de passe"
PlaceholderColor="{StaticResource Primary}" PlaceholderColor="{StaticResource Primary}"
IsPassword="True" x:Name="Pswd" IsPassword="True" x:Name="Pswd"
HeightRequest="50" HeightRequest="50"
Grid.Row="1" Grid.Row="1"
ClearButtonVisibility="WhileEditing" ClearButtonVisibility="WhileEditing"/>
Text="anthony5"/>
<Grid Grid.Row="2" <Grid Grid.Row="2"
Margin="10,0,0,10" ColumnDefinitions="3*, *"> Margin="10,0,0,10" ColumnDefinitions="3*, *">

Loading…
Cancel
Save