diff --git a/MangaMap/App.xaml.cs b/MangaMap/App.xaml.cs
index ca385c8..a13dace 100644
--- a/MangaMap/App.xaml.cs
+++ b/MangaMap/App.xaml.cs
@@ -4,22 +4,41 @@ using MangaMap.Views;
namespace MangaMap;
+///
+/// Classe représentant l'application principale.
+///
public partial class App : Application
{
+ ///
+ /// Nom du fichier de sauvegarde des données.
+ ///
public string FileName { get; set; } = "SauvegardeDonnees.xml";
+
+ ///
+ /// Chemin du fichier de sauvegarde des données.
+ ///
public string FilePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory);
- public Manager MyManager { get; private set; } = new Manager(new Stub.Stub()); //pour utiliser le stub comme moyen de persistance.
+ ///
+ /// Gestionnaire principal de l'application.
+ ///
+ public Manager MyManager { get; private set; } = new Manager(new Stub.Stub()); // Utilise le Stub comme moyen de persistance.
+ ///
+ /// Administrateur principal de l'application.
+ ///
public Admin MyAdmin { get; private set; } = new Admin("test", "test@test.ts", "Pseudo_test");
+ ///
+ /// Constructeur de l'application.
+ ///
public App()
{
InitializeComponent();
if (File.Exists(Path.Combine(FilePath, FileName)))
{
- MyManager = new Manager(new Stub.DataContract()); //pour utiliser le dataContract comme moyen de persistance.
+ MyManager = new Manager(new Stub.DataContract()); // Utilise le DataContract comme moyen de persistance.
}
MyManager.charger();
@@ -29,10 +48,10 @@ public partial class App : Application
if (!File.Exists(Path.Combine(FilePath, FileName)))
{
- MyManager.Persistance = new DataContract(); //pour utiliser le stub comme moyen de persistance.
+ MyManager.Persistance = new DataContract(); // Utilise le Stub comme moyen de persistance.
}
MyManager.sauvegarder();
- Console.WriteLine("sauvegarde faite");
+ Console.WriteLine("Sauvegarde effectuée.");
}
}
\ No newline at end of file
diff --git a/MangaMap/AppShell.xaml.cs b/MangaMap/AppShell.xaml.cs
index ce60124..07a2440 100644
--- a/MangaMap/AppShell.xaml.cs
+++ b/MangaMap/AppShell.xaml.cs
@@ -2,12 +2,19 @@
namespace MangaMap;
+///
+/// Classe représentant le Shell.
+///
public partial class AppShell : Shell
{
- public AppShell()
- {
- InitializeComponent();
+ ///
+ /// Constructeur du shell de l'application.
+ ///
+ public AppShell()
+ {
+ InitializeComponent();
+ // Enregistrement des routes pour les pages de l'application
Routing.RegisterRoute("homePagedetails", typeof(homePage));
Routing.RegisterRoute("inscriptionPagedetails", typeof(signUpPage));
Routing.RegisterRoute("connexionPagedetails", typeof(loginPage));
diff --git a/MangaMap/CustomHeader.xaml.cs b/MangaMap/CustomHeader.xaml.cs
index ea77c51..f62f384 100644
--- a/MangaMap/CustomHeader.xaml.cs
+++ b/MangaMap/CustomHeader.xaml.cs
@@ -4,33 +4,58 @@ using MangaMap.Model;
using System.ComponentModel;
using INotifyPropertyChanged = System.ComponentModel.INotifyPropertyChanged;
+///
+/// Classe représentant le contenu d'en-tête personnalisé (CustomHeader).
+///
public partial class NewContent1 : ContentView, INotifyPropertyChanged
{
public Manager my_manager => (App.Current as App).MyManager;
+
+ ///
+ /// Constructeur du contenu d'en-tête personnalisé.
+ ///
public NewContent1()
{
InitializeComponent();
-
}
+
+ ///
+ /// Gère l'événement de clic sur le bouton d'accueil.
+ ///
+ /// L'objet déclencheur de l'événement.
+ /// Les arguments de l'événement.
async void ImageButton_Clicked(System.Object sender, System.EventArgs e)
{
- //Navigation.PushAsync(new homePage());
await Shell.Current.GoToAsync("//page/homePage");
}
+ ///
+ /// Gère l'événement de clic sur le bouton de paramètres.
+ ///
+ /// L'objet déclencheur de l'événement.
+ /// Les arguments de l'événement.
async void SettingButton_Clicked(object sender, System.EventArgs e)
{
await Shell.Current.GoToAsync("//page/secondaire/settingsPage");
}
+ ///
+ /// Gère l'événement de clic sur le bouton de compte.
+ ///
+ /// L'objet déclencheur de l'événement.
+ /// Les arguments de l'événement.
async void AccountButton_Clicked(object sender, System.EventArgs e)
{
await Shell.Current.GoToAsync("//page/secondaire/connexionPage");
}
+ ///
+ /// Gère l'événement de clic sur le bouton de liste.
+ ///
+ /// L'objet déclencheur de l'événement.
+ /// Les arguments de l'événement.
async void ListButton_Clicked(object sender, System.EventArgs e)
{
- //await Shell.Current.GoToAsync("//page/secondaire/listPage");
await Navigation.PushAsync(new listPage());
}
}
\ No newline at end of file
diff --git a/MangaMap/Stub/DataToPersist.cs b/MangaMap/Stub/DataToPersist.cs
index a747a77..0f30580 100644
--- a/MangaMap/Stub/DataToPersist.cs
+++ b/MangaMap/Stub/DataToPersist.cs
@@ -8,11 +8,19 @@ using System.Collections.ObjectModel;
namespace MangaMap.Stub
{
- //Cette classe permet de définir ce qui doit être enregistrer par la persistance.
+ ///
+ /// Classe de données pour la persistance contenant les listes des oeuvres et des utilisateurs.
+ ///
public class DataToPersist
{
+ ///
+ /// Obtient ou définit la liste des oeuvres à persister.
+ ///
public ObservableCollection Oeuvres { get; set; } = new ObservableCollection();
+
+ ///
+ /// Obtient ou définit la liste des utilisateurs à persister.
+ ///
public List Utilisateurs { get; set; } = new List();
-
}
}
diff --git a/MangaMap/Stub/IPersistanceManager.cs b/MangaMap/Stub/IPersistanceManager.cs
index 8ce3354..784f4a6 100644
--- a/MangaMap/Stub/IPersistanceManager.cs
+++ b/MangaMap/Stub/IPersistanceManager.cs
@@ -8,10 +8,22 @@ using MangaMap.Model;
namespace MangaMap.Stub
{
+ ///
+ /// Interface pour la gestion de la persistance des données.
+ ///
public interface IPersistanceManager
{
+ ///
+ /// Charge les données persistantes et renvoie les listes des oeuvres et des utilisateurs.
+ ///
+ /// Un tuple contenant la liste des oeuvres et la liste des utilisateurs.
(ObservableCollection, List) chargeDonne();
+ ///
+ /// Sauvegarde les listes des oeuvres et des utilisateurs.
+ ///
+ /// La liste des oeuvres à sauvegarder.
+ /// La liste des utilisateurs à sauvegarder.
void sauvegarder(ObservableCollection o, List u);
}
}
diff --git a/MangaMap/Stub/Stub.cs b/MangaMap/Stub/Stub.cs
index 4160251..db3f7b3 100644
--- a/MangaMap/Stub/Stub.cs
+++ b/MangaMap/Stub/Stub.cs
@@ -8,11 +8,15 @@ using System.Threading.Tasks;
namespace MangaMap.Stub
{
+ ///
+ /// Classe de stub pour la gestion de la persistance des données.
+ ///
public class Stub : IPersistanceManager
-
- //Cette classe sert à faire charger un jeu de données qui n'est pas celui enregistrer dans le fichier sur l'ordinateur.
- //Il permet de faire des transistion entre différent moyen de persister.
{
+ ///
+ /// Charge un jeu de données en mémoire.
+ ///
+ /// Un tuple contenant la liste des oeuvres et la liste des utilisateurs.
public (ObservableCollection, List) chargeDonne()
{
ObservableCollection l1 = new ObservableCollection();
@@ -39,9 +43,14 @@ namespace MangaMap.Stub
return (l1, l2);
}
+ ///
+ /// Méthode non implémentée pour la sauvegarde des données.
+ ///
+ /// La liste des oeuvres à sauvegarder.
+ /// La liste des utilisateurs à sauvegarder.
public void sauvegarder(ObservableCollection o, List u)
{
throw new NotImplementedException();
}
}
-}
\ No newline at end of file
+}
diff --git a/MangaMap/Views/Composants/ListOeuvre.xaml.cs b/MangaMap/Views/Composants/ListOeuvre.xaml.cs
index b7d133f..9c8d065 100644
--- a/MangaMap/Views/Composants/ListOeuvre.xaml.cs
+++ b/MangaMap/Views/Composants/ListOeuvre.xaml.cs
@@ -6,12 +6,20 @@ public partial class ListOeuvre : ContentView
{
public Manager my_manager => (App.Current as App).MyManager;
+ ///
+ /// Constructeur de la liste d'oeuvres.
+ ///
public ListOeuvre()
- {
- InitializeComponent();
+ {
+ InitializeComponent();
BindingContext = this;
}
+ ///
+ /// Gère l'événement de clic sur l'image de l'anime dans la liste.
+ ///
+ /// L'objet déclencheur de l'événement.
+ /// Les arguments de l'événement.
private async void AnimeImageClickedList(object sender, EventArgs e)
{
var selectedAnime = (sender as ImageButton)?.BindingContext as Oeuvre;
@@ -21,4 +29,4 @@ public partial class ListOeuvre : ContentView
await Navigation.PushAsync(new ficheAnime(selectedAnime));
}
}
-}
\ No newline at end of file
+}
diff --git a/MangaMap/Views/Composants/StyleBouton.xaml.cs b/MangaMap/Views/Composants/StyleBouton.xaml.cs
index 165852d..9ae2237 100644
--- a/MangaMap/Views/Composants/StyleBouton.xaml.cs
+++ b/MangaMap/Views/Composants/StyleBouton.xaml.cs
@@ -1,23 +1,39 @@
-namespace MangaMap.Views.Composants;
using MangaMap.Model;
-public partial class StyleBouton : ContentView
+namespace MangaMap.Views.Composants
{
- public Manager my_manager => (App.Current as App).MyManager;
+ ///
+ /// Code-behind pour le UserControl StyleBouton.xaml.
+ ///
+ public partial class StyleBouton : ContentView
+ {
+ ///
+ /// Instance du manager pour accéder aux données.
+ ///
+ public Manager my_manager => (App.Current as App).MyManager;
- public StyleBouton()
- {
- InitializeComponent();
- BindingContext = my_manager;
- }
+ ///
+ /// Constructeur de la classe StyleBouton.
+ ///
+ public StyleBouton()
+ {
+ InitializeComponent();
+ BindingContext = my_manager;
+ }
- private async void AnimeImageClickedList(object sender, EventArgs e)
- {
- var selectedAnime = (sender as ImageButton)?.BindingContext as Oeuvre;
- if (selectedAnime != null)
+ ///
+ /// Gère l'événement lorsqu'une image d'anime est cliquée.
+ ///
+ /// L'objet déclenchant l'événement.
+ /// Les arguments de l'événement.
+ private async void AnimeImageClickedList(object sender, EventArgs e)
{
- // Naviguez vers la page de la fiche d'anime en passant l'objet sélectionné
- await Navigation.PushAsync(new ficheAnime(selectedAnime));
+ var selectedAnime = (sender as ImageButton)?.BindingContext as Oeuvre;
+ if (selectedAnime != null)
+ {
+ // Naviguez vers la page de la fiche d'anime en passant l'objet sélectionné
+ await Navigation.PushAsync(new ficheAnime(selectedAnime));
+ }
}
}
-}
\ No newline at end of file
+}
diff --git a/MangaMap/Views/CreateOeuvre.xaml.cs b/MangaMap/Views/CreateOeuvre.xaml.cs
index fd60ff4..4fa4d98 100644
--- a/MangaMap/Views/CreateOeuvre.xaml.cs
+++ b/MangaMap/Views/CreateOeuvre.xaml.cs
@@ -11,13 +11,21 @@ public partial class createOeuvre : ContentPage
public Manager my_manager => (App.Current as App).MyManager;
private string imagePath;
+ ///
+ /// Constructeur de la page de création d'oeuvre.
+ ///
public createOeuvre()
- {
- InitializeComponent();
+ {
+ InitializeComponent();
BindingContext = this;
- }
+ }
- async void SelectImageClicked(object sender, EventArgs e)
+ ///
+ /// Gère l'événement de clic sur le bouton de sélection d'image.
+ ///
+ /// L'objet déclencheur de l'événement.
+ /// Les arguments de l'événement.
+ private async void SelectImageClicked(object sender, EventArgs e)
{
var result = await FilePicker.PickAsync(new PickOptions
{
@@ -33,7 +41,12 @@ public partial class createOeuvre : ContentPage
}
}
- async void AddClicked(object sender, System.EventArgs e)
+ ///
+ /// Gère l'événement de clic sur le bouton d'ajout d'oeuvre.
+ ///
+ /// L'objet déclencheur de l'événement.
+ /// Les arguments de l'événement.
+ private async void AddClicked(object sender, System.EventArgs e)
{
// Récupérer les valeurs des entrées
string nom = nameEntry.Text;
@@ -51,7 +64,7 @@ public partial class createOeuvre : ContentPage
}
if (string.IsNullOrWhiteSpace(nom) ||
- string.IsNullOrWhiteSpace(description) || string.IsNullOrWhiteSpace(type))
+ string.IsNullOrWhiteSpace(description) || string.IsNullOrWhiteSpace(type))
{
await DisplayAlert("Erreur", "Veuillez remplir tous les champs.", "OK");
return;
@@ -59,7 +72,7 @@ public partial class createOeuvre : ContentPage
if (nbEp < 0)
{
- await DisplayAlert("Erreur", "Il faut avoir au 1 épisode pour l'application.", "OK");
+ await DisplayAlert("Erreur", "Il faut avoir au moins 1 épisode pour l'application.", "OK");
return;
}
@@ -69,4 +82,4 @@ public partial class createOeuvre : ContentPage
await Navigation.PushAsync(new homePage());
return;
}
-}
\ No newline at end of file
+}
diff --git a/MangaMap/Views/FicheAnime.xaml.cs b/MangaMap/Views/FicheAnime.xaml.cs
index 2c6b3b6..ab40e22 100644
--- a/MangaMap/Views/FicheAnime.xaml.cs
+++ b/MangaMap/Views/FicheAnime.xaml.cs
@@ -1,265 +1,294 @@
-namespace MangaMap.Views;
-
-using Model;
-using System.ComponentModel;
-using System.Diagnostics;
-using System.Drawing;
-using System.Windows.Input;
-using System.Xml.Linq;
-using Microsoft.Maui.Graphics;
-
-
-public partial class ficheAnime : ContentPage, INotifyPropertyChanged
+namespace MangaMap.Views
{
- public Manager my_manager => (App.Current as App).MyManager;
- public Oeuvre AnimeModel { get; set; }
-
- public ficheAnime()
+ using Model;
+ using System.ComponentModel;
+ using System.Diagnostics;
+ using System.Drawing;
+ using System.Windows.Input;
+ using System.Xml.Linq;
+ using Microsoft.Maui.Graphics;
+
+ public partial class ficheAnime : ContentPage, INotifyPropertyChanged
{
- InitializeComponent();
+ public Manager my_manager => (App.Current as App).MyManager;
+ public Oeuvre AnimeModel { get; set; }
- BindingContext = this;
+ ///
+ /// Constructeur par défaut de la page ficheAnime.
+ ///
+ public ficheAnime()
+ {
+ InitializeComponent();
- }
+ BindingContext = this;
+ }
- public ficheAnime(Oeuvre anime)
- {
- AnimeModel = anime;
+ ///
+ /// Constructeur de la page ficheAnime prenant en paramètre un objet Oeuvre.
+ ///
+ /// L'objet Oeuvre à afficher dans la fiche.
+ public ficheAnime(Oeuvre anime)
+ {
+ AnimeModel = anime;
- InitializeComponent();
+ InitializeComponent();
- BindingContext = this;
+ BindingContext = this;
- SetNote();
- }
-
- public async void AjouterListe(object sender, EventArgs e)
- {
- if (my_manager.UtilisateurActuel.Email == null)
- {
- await DisplayAlert("Erreur", "Vous n'êtes pas connecté.", "OK");
- return;
+ SetNote();
}
- // Si la série est déjà dans la liste il faut bloquer l'ajout.
- foreach (Oeuvre oeuvre in my_manager.UtilisateurActuel.ListeOeuvreEnVisionnage)
+ ///
+ /// Gère l'événement lorsqu'on clique sur le bouton d'ajout à la liste.
+ ///
+ /// L'objet déclenchant l'événement.
+ /// Les arguments de l'événement.
+ public async void AjouterListe(object sender, EventArgs e)
{
- if (oeuvre.Nom == AnimeModel.Nom)
+ if (my_manager.UtilisateurActuel.Email == null)
{
- await DisplayAlert("Erreur", "Avez déjà cette série dans une la liste 'En visionnage'.", "OK");
+ await DisplayAlert("Erreur", "Vous n'êtes pas connecté.", "OK");
return;
}
- }
- foreach (Oeuvre oeuvre in my_manager.UtilisateurActuel.ListeOeuvreDejaVu)
- {
- if (oeuvre.Nom == AnimeModel.Nom)
+
+ // Si la série est déjà dans la liste il faut bloquer l'ajout.
+ foreach (Oeuvre oeuvre in my_manager.UtilisateurActuel.ListeOeuvreEnVisionnage)
{
- await DisplayAlert("Erreur", "Avez déjà cette série dans une la liste 'Déjà vu'.", "OK");
- return;
+ if (oeuvre.Nom == AnimeModel.Nom)
+ {
+ await DisplayAlert("Erreur", "Avez déjà cette série dans une la liste 'En visionnage'.", "OK");
+ return;
+ }
}
- }
- foreach (Oeuvre oeuvre in my_manager.UtilisateurActuel.ListeOeuvreFavorites)
- {
- if (oeuvre.Nom == AnimeModel.Nom)
+ foreach (Oeuvre oeuvre in my_manager.UtilisateurActuel.ListeOeuvreDejaVu)
{
- await DisplayAlert("Erreur", "Avez déjà cette série dans une la liste 'En favoris'.", "OK");
- return;
+ if (oeuvre.Nom == AnimeModel.Nom)
+ {
+ await DisplayAlert("Erreur", "Avez déjà cette série dans une la liste 'Déjà vu'.", "OK");
+ return;
+ }
}
- }
- foreach (Oeuvre oeuvre in my_manager.UtilisateurActuel.ListeOeuvrePourPlusTard)
- {
- if (oeuvre.Nom == AnimeModel.Nom)
+ foreach (Oeuvre oeuvre in my_manager.UtilisateurActuel.ListeOeuvreFavorites)
{
- await DisplayAlert("Erreur", "Avez déjà cette série dans une la liste 'Pour plus tard'.", "OK");
- return;
+ if (oeuvre.Nom == AnimeModel.Nom)
+ {
+ await DisplayAlert("Erreur", "Avez déjà cette série dans une la liste 'En favoris'.", "OK");
+ return;
+ }
+ }
+ foreach (Oeuvre oeuvre in my_manager.UtilisateurActuel.ListeOeuvrePourPlusTard)
+ {
+ if (oeuvre.Nom == AnimeModel.Nom)
+ {
+ await DisplayAlert("Erreur", "Avez déjà cette série dans une la liste 'Pour plus tard'.", "OK");
+ return;
+ }
}
- }
-
- string selectedOption = await DisplayActionSheet("Ajouter à quelle liste ?", "Annuler", null, "En Visionnage", "Déjà Vu", "Pour Plus Tard", "Favoris");
-
- if (selectedOption == "Annuler" || selectedOption == null)
- return;
- Debug.WriteLine("Selected Option: " + selectedOption);
+ string selectedOption = await DisplayActionSheet("Ajouter à quelle liste ?", "Annuler", null, "En Visionnage", "Déjà Vu", "Pour Plus Tard", "Favoris");
- // Ajouter l'anime à la liste sélectionnée
- switch (selectedOption)
- {
- case "En Visionnage":
- Debug.WriteLine("Ajout à la liste En Visionnage");
- my_manager.UtilisateurActuel.ListeOeuvreEnVisionnage.Add(AnimeModel);
- break;
- case "Déjà Vu":
- Debug.WriteLine("Ajout à la liste Déjà Vu");
- my_manager.UtilisateurActuel.ListeOeuvreDejaVu.Add(AnimeModel);
- break;
- case "Pour Plus Tard":
- Debug.WriteLine("Ajout à la liste Pour Plus Tard");
- my_manager.UtilisateurActuel.ListeOeuvrePourPlusTard.Add(AnimeModel);
- break;
- case "Favoris":
- Debug.WriteLine("Ajout à la liste Favoris");
- my_manager.UtilisateurActuel.ListeOeuvreFavorites.Add(AnimeModel);
- break;
- }
+ if (selectedOption == "Annuler" || selectedOption == null)
+ return;
- my_manager.sauvegarder();
+ Debug.WriteLine("Selected Option: " + selectedOption);
- await Navigation.PushAsync(new listPage());
- }
+ // Ajouter l'anime à la liste sélectionnée
+ switch (selectedOption)
+ {
+ case "En Visionnage":
+ Debug.WriteLine("Ajout à la liste En Visionnage");
+ my_manager.UtilisateurActuel.ListeOeuvreEnVisionnage.Add(AnimeModel);
+ break;
+ case "Déjà Vu":
+ Debug.WriteLine("Ajout à la liste Déjà Vu");
+ my_manager.UtilisateurActuel.ListeOeuvreDejaVu.Add(AnimeModel);
+ break;
+ case "Pour Plus Tard":
+ Debug.WriteLine("Ajout à la liste Pour Plus Tard");
+ my_manager.UtilisateurActuel.ListeOeuvrePourPlusTard.Add(AnimeModel);
+ break;
+ case "Favoris":
+ Debug.WriteLine("Ajout à la liste Favoris");
+ my_manager.UtilisateurActuel.ListeOeuvreFavorites.Add(AnimeModel);
+ break;
+ }
- public async void SupprimerListe(object sender, EventArgs e)
- {
- if (my_manager.UtilisateurActuel.ListeOeuvreEnVisionnage.Remove(AnimeModel) ||
- my_manager.UtilisateurActuel.ListeOeuvreDejaVu.Remove(AnimeModel) ||
- my_manager.UtilisateurActuel.ListeOeuvreFavorites.Remove(AnimeModel) ||
- my_manager.UtilisateurActuel.ListeOeuvrePourPlusTard.Remove(AnimeModel))
my_manager.sauvegarder();
- else
- {
- await DisplayAlert("Erreur", "Avez n'avez pas cette série dans une liste.", "OK");
- return;
+ await Navigation.PushAsync(new listPage());
}
- }
- private void SetNote()
- {
- stars.Children.Clear();
- bool test = my_manager.UtilisateurActuel.notesNombres.ContainsKey(AnimeModel.Nom);
- List x;
+ ///
+ /// Gère l'événement lorsqu'on clique sur le bouton de suppression de la liste.
+ ///
+ /// L'objet déclenchant l'événement.
+ /// Les arguments de l'événement.
+ public async void SupprimerListe(object sender, EventArgs e)
+ {
+ if (my_manager.UtilisateurActuel.ListeOeuvreEnVisionnage.Remove(AnimeModel) ||
+ my_manager.UtilisateurActuel.ListeOeuvreDejaVu.Remove(AnimeModel) ||
+ my_manager.UtilisateurActuel.ListeOeuvreFavorites.Remove(AnimeModel) ||
+ my_manager.UtilisateurActuel.ListeOeuvrePourPlusTard.Remove(AnimeModel))
+ my_manager.sauvegarder();
+ else
+ {
+ await DisplayAlert("Erreur", "Avez n'avez pas cette série dans une liste.", "OK");
+ return;
+ }
+ await DisplayAlert("Succès", "La série a bien été supprimée de la liste.", "OK");
+ }
- for (int i = 0; i < 5; i++)
+ ///
+ /// Affiche les étoiles de notation de l'anime.
+ ///
+ private void SetNote()
{
- if (my_manager.UtilisateurActuel.notesNombres.TryGetValue(AnimeModel.Nom,out x) && i < x[0])
+ stars.Children.Clear();
+ bool test = my_manager.UtilisateurActuel.notesNombres.ContainsKey(AnimeModel.Nom);
+ List x;
+
+ for (int i = 0; i < 5; i++)
{
- ImageButton imageButton = new ImageButton
+ if (my_manager.UtilisateurActuel.notesNombres.TryGetValue(AnimeModel.Nom, out x) && i < x[0])
+ {
+ ImageButton imageButton = new ImageButton
+ {
+ Source = "star_full.png",
+ BackgroundColor = Microsoft.Maui.Graphics.Color.FromHex("1E1E1E"),
+ WidthRequest = 50,
+ HeightRequest = 50,
+ AutomationId = i.ToString(),
+ Margin = 10,
+ };
+
+ imageButton.Clicked += StarClicked;
+
+ Grid.SetRow(imageButton, 0);
+ Grid.SetColumn(imageButton, i);
+ stars.Children.Add(imageButton);
+ }
+ else if (!test && i < AnimeModel.Note)
{
- Source = "star_full.png",
- BackgroundColor = Microsoft.Maui.Graphics.Color.FromHex("1E1E1E"),
- WidthRequest = 50,
- HeightRequest = 50,
- AutomationId = i.ToString(),
- Margin = 10,
- };
-
- imageButton.Clicked += StarClicked;
-
- Grid.SetRow(imageButton, 0);
- Grid.SetColumn(imageButton, i);
- stars.Children.Add(imageButton);
+ ImageButton imageButton = new ImageButton
+ {
+ Source = "star_full.png",
+ BackgroundColor = Microsoft.Maui.Graphics.Color.FromHex("1E1E1E"),
+ WidthRequest = 50,
+ HeightRequest = 50,
+ AutomationId = i.ToString(),
+ Margin = 10,
+ };
+
+ imageButton.Clicked += StarClicked;
+
+ Grid.SetRow(imageButton, 0);
+ Grid.SetColumn(imageButton, i);
+ stars.Children.Add(imageButton);
+ }
+ else
+ {
+ ImageButton imageButton = new ImageButton
+ {
+ Source = "star_empty.png",
+ BackgroundColor = Microsoft.Maui.Graphics.Color.FromHex("1E1E1E"),
+ WidthRequest = 50,
+ HeightRequest = 50,
+ AutomationId = i.ToString(),
+ Margin = 10,
+ };
+
+ imageButton.Clicked += StarClicked;
+
+ Grid.SetRow(imageButton, 0);
+ Grid.SetColumn(imageButton, i);
+ stars.Children.Add(imageButton);
+ }
}
- else if (!test && i < AnimeModel.Note)
+ }
+
+ ///
+ /// Gère l'événement lorsqu'on clique sur une étoile.
+ ///
+ /// L'objet déclenchant l'événement.
+ /// Les arguments de l'événement.
+ private async void StarClicked(object sender, EventArgs e)
+ {
+ if (my_manager.UtilisateurActuel.Email == null)
{
- ImageButton imageButton = new ImageButton
- {
- Source = "star_full.png",
- BackgroundColor = Microsoft.Maui.Graphics.Color.FromHex("1E1E1E"),
- WidthRequest = 50,
- HeightRequest = 50,
- AutomationId = i.ToString(),
- Margin = 10,
- };
-
- imageButton.Clicked += StarClicked;
-
- Grid.SetRow(imageButton, 0);
- Grid.SetColumn(imageButton, i);
- stars.Children.Add(imageButton);
+ await DisplayAlert("Erreur", "Vous n'êtes pas connecté.", "OK");
+ return;
}
- else
+
+ var button = (ImageButton)sender;
+ var idAutomation = button.AutomationId;
+ List x = new List();
+ int somme = 0;
+ int compteur = 0;
+
+ if (int.TryParse(idAutomation, out int id))
{
- ImageButton imageButton = new ImageButton
+ if (my_manager.UtilisateurActuel.notesNombres.ContainsKey(AnimeModel.Nom))
+ {
+ my_manager.UtilisateurActuel.notesNombres.Remove(AnimeModel.Nom, out x);
+ x[0] = id + 1;
+ my_manager.UtilisateurActuel.notesNombres.Add(AnimeModel.Nom, x);
+ BackgroundColor = Microsoft.Maui.Graphics.Color.FromHex("1E1E1E");
+ }
+ else
+ {
+ x.Add(id + 1);
+ x.Add(0);
+ my_manager.UtilisateurActuel.notesNombres.Add(AnimeModel.Nom, x);
+ //BackgroundColor = Microsoft.Maui.Graphics.Color.FromHex("1E1E1E");
+ }
+
+ SetNote();
+
+ foreach (Utilisateur u in my_manager.Utilisateurs)
{
- Source = "star_empty.png",
- BackgroundColor = Microsoft.Maui.Graphics.Color.FromHex("1E1E1E"),
- WidthRequest = 50,
- HeightRequest = 50,
- AutomationId = i.ToString(),
- Margin = 10,
- };
-
- imageButton.Clicked += StarClicked;
-
- Grid.SetRow(imageButton, 0);
- Grid.SetColumn(imageButton, i);
- stars.Children.Add(imageButton);
+ if (u.notesNombres.TryGetValue(AnimeModel.Nom, out x) && x[0] != 0)
+ {
+ compteur = compteur + 1;
+ somme = somme + x[0];
+ }
+ }
+
+ AnimeModel.Note = somme / compteur;
+ my_manager.sauvegarder();
}
}
- }
- private async void StarClicked(object sender, EventArgs e)
- {
- if (my_manager.UtilisateurActuel.Email == null)
+ ///
+ /// Gère l'événement lorsqu'on clique sur le bouton de validation du nombre d'épisodes.
+ ///
+ /// L'objet déclenchant l'événement.
+ /// Les arguments de l'événement.
+ private async void NbEpCheck(object sender, EventArgs e)
{
- await DisplayAlert("Erreur", "Vous n'êtes pas connecté.", "OK");
- return;
- }
+ if (my_manager.UtilisateurActuel.Email == null)
+ {
+ await DisplayAlert("Erreur", "Vous n'êtes pas connecté.", "OK");
+ return;
+ }
- var button = (ImageButton)sender;
- var idAutomation = button.AutomationId;
- List x = new List();
- int somme = 0;
- int compteur = 0;
+ List x = new List();
+ int nb = Convert.ToInt32(nombreEP.Text);
- if (int.TryParse(idAutomation, out int id))
- {
if (my_manager.UtilisateurActuel.notesNombres.ContainsKey(AnimeModel.Nom))
{
my_manager.UtilisateurActuel.notesNombres.Remove(AnimeModel.Nom, out x);
- x[0] = id + 1;
+ x[1] = nb;
my_manager.UtilisateurActuel.notesNombres.Add(AnimeModel.Nom, x);
- BackgroundColor = Microsoft.Maui.Graphics.Color.FromHex("1E1E1E");
+ return;
}
else
{
- x.Add(id + 1);
x.Add(0);
+ x.Add(nb);
my_manager.UtilisateurActuel.notesNombres.Add(AnimeModel.Nom, x);
- //BackgroundColor = Microsoft.Maui.Graphics.Color.FromHex("1E1E1E");
- }
-
- SetNote();
-
- foreach (Utilisateur u in my_manager.Utilisateurs)
- {
- if(u.notesNombres.TryGetValue(AnimeModel.Nom, out x) && x[0] != 0)
- {
- compteur = compteur + 1;
- somme = somme + x[0];
- }
}
- AnimeModel.Note = somme / compteur;
my_manager.sauvegarder();
}
}
-
- private async void NbEpCheck(object sender, EventArgs e)
- {
- if (my_manager.UtilisateurActuel.Email == null)
- {
- await DisplayAlert("Erreur", "Vous n'êtes pas connecté.", "OK");
- return;
- }
-
- List x = new List();
- int nb = Convert.ToInt32(nombreEP.Text);
-
- if (my_manager.UtilisateurActuel.notesNombres.ContainsKey(AnimeModel.Nom))
- {
- my_manager.UtilisateurActuel.notesNombres.Remove(AnimeModel.Nom, out x);
- x[1] = nb;
- my_manager.UtilisateurActuel.notesNombres.Add(AnimeModel.Nom, x);
- return;
- }
- else
- {
- x.Add(0);
- x.Add(nb);
- my_manager.UtilisateurActuel.notesNombres.Add(AnimeModel.Nom, x);
- }
-
- my_manager.sauvegarder();
- }
-}
\ No newline at end of file
+}
diff --git a/MangaMap/Views/homePage.xaml.cs b/MangaMap/Views/homePage.xaml.cs
index a6d5e14..8cdc9c4 100644
--- a/MangaMap/Views/homePage.xaml.cs
+++ b/MangaMap/Views/homePage.xaml.cs
@@ -1,83 +1,104 @@
-namespace MangaMap.Views;
-
-using MangaMap.Model;
-using System.Collections.ObjectModel;
-
-public partial class homePage : ContentPage
+namespace MangaMap.Views
{
- public Manager my_manager => (App.Current as App).MyManager;
+ using MangaMap.Model;
+ using System.Collections.ObjectModel;
- public homePage()
+ ///
+ /// Classe représentant la page d'accueil de l'application.
+ ///
+ public partial class homePage : ContentPage
{
- InitializeComponent();
- BindingContext = my_manager;
- searchResults.ItemsSource = my_manager.Oeuvres;
- //chargerSerie();
- }
+ ///
+ /// Référence au gestionnaire de l'application.
+ ///
+ public Manager my_manager => (App.Current as App).MyManager;
- private async void AnimeImageClicked(object sender, EventArgs e)
- {
- var selectedAnime = (sender as ImageButton)?.BindingContext as Oeuvre;
- if (selectedAnime != null)
+ ///
+ /// Constructeur de la page d'accueil.
+ ///
+ public homePage()
{
- // Naviguez vers la page de la fiche d'anime en passant l'objet sélectionné
- await Navigation.PushAsync(new ficheAnime(selectedAnime));
+ InitializeComponent();
+ BindingContext = my_manager;
+ searchResults.ItemsSource = my_manager.Oeuvres;
+ //chargerSerie();
}
- /*var button = (ImageButton)sender;
- var idAutomation = button.AutomationId;
-
- if (int.TryParse(idAutomation, out int id))
+ ///
+ /// Gestionnaire d'événement lorsqu'une image d'anime est cliquée.
+ ///
+ /// L'objet qui a déclenché l'événement.
+ /// Arguments de l'événement.
+ private async void AnimeImageClicked(object sender, EventArgs e)
{
- await Navigation.PushAsync(new ficheAnime(my_manager.Oeuvres[id]));
- }*/
- }
+ var selectedAnime = (sender as ImageButton)?.BindingContext as Oeuvre;
+ if (selectedAnime != null)
+ {
+ // Naviguer vers la page de la fiche d'anime en passant l'objet sélectionné
+ await Navigation.PushAsync(new ficheAnime(selectedAnime));
+ }
- /*private void chargerSerie()
- {
- int imagesParLigne = 4;
- int indice = 0;
+ /*var button = (ImageButton)sender;
+ var idAutomation = button.AutomationId;
- for (int i = 0; i < my_manager.Oeuvres.Count; i++)
+ if (int.TryParse(idAutomation, out int id))
+ {
+ await Navigation.PushAsync(new ficheAnime(my_manager.Oeuvres[id]));
+ }*/
+ }
+
+ /*private void chargerSerie()
{
- Oeuvre favoris = my_manager.Oeuvres[i];
+ int imagesParLigne = 4;
+ int indice = 0;
- ImageButton imageButton = new ImageButton
+ for (int i = 0; i < my_manager.Oeuvres.Count; i++)
{
- Source = favoris.Affiche,
- WidthRequest = 170,
- MaximumHeightRequest = 190,
- MinimumHeightRequest = 190,
- HeightRequest = 190,
- CornerRadius = 15,
- Aspect = Aspect.Fill,
- AutomationId = indice.ToString(),
- Margin = 90
- };
+ Oeuvre favoris = my_manager.Oeuvres[i];
- imageButton.Clicked += AnimeImageClicked;
+ ImageButton imageButton = new ImageButton
+ {
+ Source = favoris.Affiche,
+ WidthRequest = 170,
+ MaximumHeightRequest = 190,
+ MinimumHeightRequest = 190,
+ HeightRequest = 190,
+ CornerRadius = 15,
+ Aspect = Aspect.Fill,
+ AutomationId = indice.ToString(),
+ Margin = 90
+ };
- int ligne = 1 + (indice / imagesParLigne);
- int colonne = indice % imagesParLigne;
+ imageButton.Clicked += AnimeImageClicked;
- Grid.SetRow(imageButton, ligne);
- Grid.SetColumn(imageButton, colonne);
- grille.Children.Add(imageButton);
+ int ligne = 1 + (indice / imagesParLigne);
+ int colonne = indice % imagesParLigne;
- indice++;
- }
- }*/
+ Grid.SetRow(imageButton, ligne);
+ Grid.SetColumn(imageButton, colonne);
+ grille.Children.Add(imageButton);
- private void OnTextChanged(object sender, TextChangedEventArgs e)
- {
+ indice++;
+ }
+ }*/
- if(string.IsNullOrWhiteSpace(e.NewTextValue))
+ ///
+ /// Gestionnaire d'événement lorsqu'un texte est modifié dans la zone de recherche.
+ ///
+ /// L'objet qui a déclenché l'événement.
+ /// Arguments de l'événement contenant le nouveau texte.
+ private void OnTextChanged(object sender, TextChangedEventArgs e)
{
- searchResults.ItemsSource = my_manager.Oeuvres;
- }
- else
- {
- searchResults.ItemsSource = my_manager.Oeuvres.Where(i => i.Nom.ToLower().Contains(e.NewTextValue.ToLower()));
+ if (string.IsNullOrWhiteSpace(e.NewTextValue))
+ {
+ // Afficher toutes les œuvres si le champ de recherche est vide
+ searchResults.ItemsSource = my_manager.Oeuvres;
+ }
+ else
+ {
+ // Filtrer les œuvres en fonction du texte de recherche
+ searchResults.ItemsSource = my_manager.Oeuvres.Where(i => i.Nom.ToLower().Contains(e.NewTextValue.ToLower()));
+ }
}
}
}
diff --git a/MangaMap/Views/listPage.xaml.cs b/MangaMap/Views/listPage.xaml.cs
index 4edf59a..2a5ed04 100644
--- a/MangaMap/Views/listPage.xaml.cs
+++ b/MangaMap/Views/listPage.xaml.cs
@@ -2,11 +2,17 @@ namespace MangaMap.Views;
using MangaMap.Model;
using static System.Net.Mime.MediaTypeNames;
+
+///
+/// Classe représentant la page de liste de l'application.
+///
public partial class listPage : ContentPage
{
-
+ ///
+ /// Constructeur de la page de liste.
+ ///
public listPage()
{
- InitializeComponent();
- }
+ InitializeComponent();
+ }
}
\ No newline at end of file
diff --git a/MangaMap/Views/loginAdminPage.xaml.cs b/MangaMap/Views/loginAdminPage.xaml.cs
index 58e550d..bd4f519 100644
--- a/MangaMap/Views/loginAdminPage.xaml.cs
+++ b/MangaMap/Views/loginAdminPage.xaml.cs
@@ -4,20 +4,39 @@ using System.Threading.Tasks;
using MangaMap.Stub;
using MangaMap.Model;
+///
+/// Classe représentant la page de connexion administrateur de l'application.
+///
public partial class loginAdminPage : ContentPage
{
+ ///
+ /// Référence au gestionnaire de l'application.
+ ///
public Manager my_manager => (App.Current as App).MyManager;
+ ///
+ /// Constructeur de la page de connexion administrateur.
+ ///
public loginAdminPage()
- {
- InitializeComponent();
- }
+ {
+ InitializeComponent();
+ }
+ ///
+ /// Gestionnaire d'événement lorsqu'un utilisateur clique sur le bouton "Utilisateur".
+ ///
+ /// L'objet qui a déclenché l'événement.
+ /// Arguments de l'événement.
async void userClicked(object sender, EventArgs e)
{
await Shell.Current.GoToAsync("//page/secondaire/inscriptionPage");
}
+ ///
+ /// Gestionnaire d'événement lorsqu'un utilisateur clique sur le bouton "Connexion".
+ ///
+ /// L'objet qui a déclenché l'événement.
+ /// Arguments de l'événement.
async void OnLoginClicked(object sender, EventArgs e)
{
// Récupération du pseudo et du mot de passe entrés
@@ -39,7 +58,7 @@ public partial class loginAdminPage : ContentPage
return;
}
- // On garde la connection admin
+ // On garde la connexion admin
my_manager.isAdmin = true;
// Rediriger l'utilisateur vers la page principale
await Shell.Current.GoToAsync("//page/homePage");
diff --git a/MangaMap/Views/loginPage.xaml.cs b/MangaMap/Views/loginPage.xaml.cs
index ce85f37..ac3565c 100644
--- a/MangaMap/Views/loginPage.xaml.cs
+++ b/MangaMap/Views/loginPage.xaml.cs
@@ -4,23 +4,42 @@ using System.Threading.Tasks;
using MangaMap.Stub;
using MangaMap.Model;
+///
+/// Classe représentant la page de connexion de l'application.
+///
public partial class loginPage : ContentPage
{
+ ///
+ /// Référence au gestionnaire de l'application.
+ ///
public Manager my_manager => (App.Current as App).MyManager;
+ ///
+ /// Constructeur de la page de connexion.
+ ///
public loginPage()
- {
- InitializeComponent();
- }
+ {
+ InitializeComponent();
+ }
+ ///
+ /// Gestionnaire d'événement lorsqu'un utilisateur clique sur le bouton "Inscription".
+ ///
+ /// L'objet qui a déclenché l'événement.
+ /// Arguments de l'événement.
async void OnSignUpClicked(object sender, EventArgs e)
{
await Shell.Current.GoToAsync("//page/secondaire/inscriptionPage");
}
+ ///
+ /// Gestionnaire d'événement lorsqu'un utilisateur clique sur le bouton "Connexion".
+ ///
+ /// L'objet qui a déclenché l'événement.
+ /// Arguments de l'événement.
async void OnLoginClicked(object sender, EventArgs e)
{
- // Récupération de l'email et du mot de passe entrés
+ // Récupération de l'e-mail et du mot de passe entrés
string email = emailEntry.Text;
string password = passwordEntry.Text;
@@ -34,7 +53,7 @@ public partial class loginPage : ContentPage
// Vérifier que l'e-mail a la bonne forme
//if (!Regex.IsMatch(email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$"))
//{
- // await DisplayAlert("Erreur", "L'email n'est pas valide.", "OK");
+ // await DisplayAlert("Erreur", "L'e-mail n'est pas valide.", "OK");
// return;
//}
@@ -50,7 +69,6 @@ public partial class loginPage : ContentPage
my_manager.UtilisateurActuel = utilisateur;
// Rediriger l'utilisateur vers la page principale
- await Shell.Current.GoToAsync("//page/homePage");
+ await Shell.Current.GoToAsync("//page/homePage");
}
-
}
diff --git a/MangaMap/Views/settingsPage.xaml.cs b/MangaMap/Views/settingsPage.xaml.cs
index 89986c2..6d007c7 100644
--- a/MangaMap/Views/settingsPage.xaml.cs
+++ b/MangaMap/Views/settingsPage.xaml.cs
@@ -1,15 +1,29 @@
namespace MangaMap.Views;
using Model;
+///
+/// Classe représentant la page des paramètres de l'application.
+///
public partial class settingsPage : ContentPage
{
+ ///
+ /// Référence au gestionnaire de l'application.
+ ///
public Manager my_manager => (App.Current as App).MyManager;
- public settingsPage()
- {
- InitializeComponent();
- }
+ ///
+ /// Constructeur de la page des paramètres.
+ ///
+ public settingsPage()
+ {
+ InitializeComponent();
+ }
+ ///
+ /// Gestionnaire d'événement lorsqu'un utilisateur clique sur le bouton "Déconnexion".
+ ///
+ /// L'objet qui a déclenché l'événement.
+ /// Arguments de l'événement.
private async void OnDisconnectClicked(object sender, EventArgs e)
{
my_manager.UtilisateurActuel = new Utilisateur();
@@ -17,14 +31,24 @@ public partial class settingsPage : ContentPage
await Shell.Current.GoToAsync("//page/secondaire/connexionPage");
}
+ ///
+ /// Gestionnaire d'événement lorsqu'un utilisateur clique sur le bouton "Connexion Administrateur".
+ ///
+ /// L'objet qui a déclenché l'événement.
+ /// Arguments de l'événement.
private async void LoginAdminClicked(object sender, EventArgs e)
{
await Shell.Current.Navigation.PushAsync(new loginAdminPage());
}
+ ///
+ /// Gestionnaire d'événement lorsqu'un utilisateur clique sur le bouton "Ajouter".
+ ///
+ /// L'objet qui a déclenché l'événement.
+ /// Arguments de l'événement.
private async void AddClicked(object sender, EventArgs e)
{
- if(!my_manager.isAdmin)
+ if (!my_manager.isAdmin)
{
await DisplayAlert("Erreur", "Vous n'êtes pas connecté en tant qu'Administrateur.", "OK");
return;
diff --git a/MangaMap/Views/signUpPage.xaml.cs b/MangaMap/Views/signUpPage.xaml.cs
index b3df9bd..8c87c23 100644
--- a/MangaMap/Views/signUpPage.xaml.cs
+++ b/MangaMap/Views/signUpPage.xaml.cs
@@ -4,21 +4,39 @@ using MangaMap.Model;
using System.Text.RegularExpressions;
using static System.Runtime.InteropServices.JavaScript.JSType;
+///
+/// Classe représentant la page d'inscription de l'application.
+///
public partial class signUpPage : ContentPage
{
-
+ ///
+ /// Référence au gestionnaire de l'application.
+ ///
public Manager my_manager => (App.Current as App).MyManager;
- public signUpPage()
- {
+ ///
+ /// Constructeur de la page d'inscription.
+ ///
+ public signUpPage()
+ {
InitializeComponent();
- }
+ }
+ ///
+ /// Gestionnaire d'événement lorsqu'un utilisateur clique sur le bouton "Connexion".
+ ///
+ /// L'objet qui a déclenché l'événement.
+ /// Arguments de l'événement.
async void OnLoginClicked(object sender, EventArgs e)
{
await Shell.Current.GoToAsync("//page/secondaire/connexionPage");
}
+ ///
+ /// Gestionnaire d'événement lorsqu'un utilisateur clique sur le bouton "Inscription".
+ ///
+ /// L'objet qui a déclenché l'événement.
+ /// Arguments de l'événement.
async void OnSignUpClicked(object sender, System.EventArgs e)
{
// Récupérer les valeurs des entrées
@@ -32,7 +50,7 @@ public partial class signUpPage : ContentPage
foreach (Utilisateur u in my_manager.Utilisateurs)
{
- if (u.Email == email ||u.Pseudo==pseudo)
+ if (u.Email == email || u.Pseudo == pseudo)
{
await DisplayAlert("Erreur", "L'utilisateur existe déjà.", "OK");
return;
@@ -40,7 +58,7 @@ public partial class signUpPage : ContentPage
}
if (string.IsNullOrWhiteSpace(email) ||
- string.IsNullOrWhiteSpace(password) || string.IsNullOrWhiteSpace(confirmPassword))
+ string.IsNullOrWhiteSpace(password) || string.IsNullOrWhiteSpace(confirmPassword))
{
await DisplayAlert("Erreur", "Veuillez remplir tous les champs.", "OK");
return;
@@ -83,6 +101,11 @@ public partial class signUpPage : ContentPage
}
}
+ ///
+ /// Vérifie si un mot de passe est suffisamment fort.
+ ///
+ /// Le mot de passe à vérifier.
+ /// True si le mot de passe est suffisamment fort, sinon False.
bool IsPasswordStrong(string password)
{
// Vérifier si le mot de passe est assez long