using System; using System.Collections.Generic; using System.Text; using System.Diagnostics.CodeAnalysis; using System.ComponentModel; using System.Runtime.Serialization; namespace Modele { /// /// Classe Titre implementant IEquatable et INotifyPropertyChanged /// [DataContract] //Permet de dire a la classe qu'elle peut etre serializer public class Titre : IEquatable, INotifyPropertyChanged { /// /// String contenant l'Id du Titre avec un getter et un setter public /// [DataMember] public string Id { get; set; } /// /// String contenant le Nom du Titre avec un getter et un setter public /// private string nom; [DataMember] public string Nom { get { return nom; } set { if(nom == value) return; nom = value; OnPropertyChanged(nameof(Nom)); } } /// /// String contenant le Nom de l'album contenant Titre avec un getter et un setter public /// private string nomAlbum; [DataMember] public string NomAlbum { get { return nomAlbum; } set { if(nomAlbum == value) return; nomAlbum = value; OnPropertyChanged(nameof (NomAlbum)); } } /// /// Video du clip du Titre (la classe Video contient un string Lien) avec un getter et un setter public /// private Video lienVideo; [DataMember] public Video LienVideo { get { return lienVideo; } set { if(lienVideo == value) return; lienVideo = value; OnPropertyChanged(nameof(LienVideo)); } } /// /// Artiste qui a compose le Titre (la classe Artiste contient un string Nom) avec un getter et un setter public /// private Artiste nomArtiste; [DataMember] public Artiste NomArtiste { get { return nomArtiste; } set { if(nomArtiste == value) return; nomArtiste = value; OnPropertyChanged(nameof(NomArtiste)); } } /// /// Chemin de l'Image associe au Titre (la classe Image contient un string Chemin) avec un getter et un setter public /// private Image cheminImage; [DataMember] public Image CheminImage { get { return cheminImage; } set { if(cheminImage == value) return; cheminImage = value; OnPropertyChanged(nameof(CheminImage)); } } /// /// String contenant la Biographie du Titre (Texte disant quelques mots sur la musique) avec un getter et un setter public /// [DataMember] public string Bio { get { return bio; } set { if(bio == value) return; bio = value; OnPropertyChanged(nameof(Bio)); } } private string bio; /// /// Booleen permettant de gerer les favoris dans les vues de l'application (Charge par l'application a chaque lancement) avec un getter et un setter public /// private bool isFavoris; [DataMember] public bool IsFavoris { get { return isFavoris; } set { if(isFavoris == value) return; isFavoris = value; OnPropertyChanged(nameof(IsFavoris)); } } public event PropertyChangedEventHandler PropertyChanged; /// /// OnPropertyChanged est un evenement permettant de mettre a jour les données quand elles sont modifiées /// /// Nom de la propriete a mettre a jour protected virtual void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); /// /// Construit un Titre en prenant que des strings en parametres /// /// Id du Titre /// Nom du Titre /// Nom de l'album du Titre /// Lien de la video du Titre /// Nom de l'artiste du Titre /// Chemin de l'Image du Titre /// Biographie du Titre public Titre(string id,string Nom, string NomAlbum,string value, string NomArt, string cheminImage, string Bio ) { this.Id = id; if( Id == null) { throw new ArgumentNullException(); } this.Nom = Nom; this.NomAlbum = NomAlbum; this.LienVideo = new Video(value); this.NomArtiste = new Artiste(NomArt); this.CheminImage = new Image(cheminImage); this.Bio = Bio; } /// /// Construit un Titre en prenant des strings et les classes Video, Artiste et Image en parametre /// /// Id du Titre /// Nom du Titre /// Nom de l'album du Titre /// Video du Titre (De type Video) /// Artiste du Titre (De type Artiste) /// Image du Titre (De type Image) /// Boigraphie du Titre public Titre(string id,string Nom, string NomAlbum, Video value, Artiste Art, Image img, string Bio) { this.Id=id; this.Nom = Nom; this.NomAlbum = NomAlbum; this.LienVideo = value; this.NomArtiste = Art; this.CheminImage = img; this.Bio = Bio; } /// /// Fonction permettant de comparer deux Titres (Autorise un Titre null) /// /// Titre a comparer /// True si le Titre est le meme, False sinon public bool Equals([AllowNull] Titre other) { return Id.Equals(other.Id); } /// /// Fonction permettant de comparer des objets /// /// Objet a comparer avec le Titre /// Renvoie True si le Titre est le meme, sinon renvoie false public override bool Equals(object obj) { if (ReferenceEquals(obj, null)) return false; if (ReferenceEquals(obj, this)) return true; if (GetType() != obj.GetType()) return false; return Equals(obj as Titre); } /// /// Transforme un Titre en string (utilise par l'affichage console) /// /// Un string contenant les informations a afficher pour un Titre public override string ToString() { return $"{Nom} - {NomAlbum} - {NomArtiste} - {LienVideo} - {CheminImage} - {Bio}"; } /// /// Hache le Titre /// /// L'id du Titre hache public override int GetHashCode() { return Id.GetHashCode(); } } }