Fix Doxygen logo size, fix doxygen namespaces mistakes
continuous-integration/drone/push Build is passing Details

pull/39/head
Corentin LEMAIRE 2 years ago
parent 88057275dc
commit b26c622685

@ -5,7 +5,7 @@ DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "Linaris"
PROJECT_NUMBER = 1.0.0
PROJECT_BRIEF = "Music player and manager"
PROJECT_LOGO = appicon.svg
PROJECT_LOGO = appicon.png
OUTPUT_DIRECTORY = /docs/doxygen
CREATE_SUBDIRS = NO
ALLOW_UNICODE_NAMES = NO

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

@ -13,10 +13,6 @@
<None Remove="xml\**" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Plugin.Maui.Audio" Version="1.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Model\Model.csproj" />
</ItemGroup>

@ -177,8 +177,7 @@ public partial class FooterPage : ContentView, INotifyPropertyChanged
Manager.NextTitle();
Dispatcher.DispatchAsync(() =>
{
string encodedFilePath = Manager.CurrentPlaying.Path.Replace(" ", "\\ ");
music.Source = encodedFilePath;
music.Source = Manager.CurrentPlaying.Path;
Duration = music.Duration.ToString(@"hh\:mm\:ss");
});
}

@ -53,9 +53,6 @@
<ItemGroup>
<PackageReference Include="CommunityToolkit.Maui.MediaElement" Version="1.0.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="7.0.0" />
<PackageReference Include="NAudio" Version="2.1.0" />
<PackageReference Include="Plugin.Maui.Audio" Version="1.0.0" />
<PackageReference Include="Xamarin.Essentials" Version="1.7.5" />
</ItemGroup>
<ItemGroup>

@ -1,5 +1,6 @@
using CommunityToolkit.Maui.Views;
using Model;
using Model.Stub;
using System.Collections.ObjectModel;
using System.Diagnostics;
@ -87,11 +88,15 @@ public partial class LocalFilesPage : ContentPage
return;
}
if (sender is Button button)
foreach (var result in results)
{
foreach (var result in results)
string path = Path.Combine(FileSystem.Current.AppDataDirectory, "customs");
if (!Path.Exists(path)) Directory.CreateDirectory(path);
string fullPath = Path.Combine(path, result.FileName);
if (!File.Exists(fullPath))
{
CustomTitle custom = new (result.FileName, "none.png", "", result.FullPath);
File.Copy(result.FullPath, fullPath);
CustomTitle custom = new(result.FileName, "none.png", "", fullPath);
if (!IsCustomTitleInCollection(custom))
{
AddCustomTitle(custom);
@ -149,6 +154,7 @@ public partial class LocalFilesPage : ContentPage
{
(Application.Current as App).Manager.RemoveCustomTitle(titleToRemove);
customTitles.Remove(titleToRemove);
File.Delete(titleToRemove.Path);
}
}
}

@ -36,7 +36,7 @@
<MenuItem Text="Supprimer" Clicked="RemoveCustomTitle"/>
</ViewCell.ContextActions>
<Frame Style="{StaticResource Song}" Padding="0">
<Label Text="{Binding Name}" FontSize="20" TextColor="white" HorizontalTextAlignment="Center" VerticalOptions="Center"/>
<Label Text="{Binding Name}" FontSize="20" TextColor="white" HorizontalTextAlignment="Center" VerticalOptions="Center" LineBreakMode="TailTruncation"/>
</Frame>
</ViewCell>
</DataTemplate>

@ -2,7 +2,6 @@
using System.Collections.ObjectModel;
namespace Model
{
/// <remarks>
/// Classe Album

@ -1,74 +1,75 @@
using Model.Stub;
using System.Xml.Serialization;
namespace Model;
public class Artist
namespace Model
{
/// <remarks>
/// Classe Artist
/// </remarks>
public string Name
public class Artist
{
get => name;
set
public string Name
{
if (value != null && value.Length < Manager.MAX_NAME_LENGTH)
get => name;
set
{
name = value;
if (value != null && value.Length < Manager.MAX_NAME_LENGTH)
{
name = value;
}
}
}
}
private string name = Manager.DEFAULT_NAME;
private string name = Manager.DEFAULT_NAME;
/// <summary>
/// Constructeur de la classe Artist
/// </summary>
/// <param name="name">Nom de l'artiste</param>
public Artist(string name)
{
Name = name;
}
/// <summary>
/// Constructeur de la classe Artist
/// </summary>
/// <param name="name">Nom de l'artiste</param>
public Artist(string name)
{
Name = name;
}
/// <summary>
/// Constructeur par défaut de la classe Artist
/// </summary>
public Artist()
{
/// <summary>
/// Constructeur par défaut de la classe Artist
/// </summary>
public Artist()
{
}
}
/// <summary>
/// Fonction qui permet de déterminer si deux objets Artist sont égaux
/// </summary>
/// <param name="obj"></param>
/// <returns>Un booléen indiquant si l'objet est égal</returns>
public override bool Equals(object obj)
{
if(obj == null) return false;
if(obj.GetType() != typeof(Artist)) return false;
if(obj is Artist artist && Name == artist.Name) return true;
else return false;
}
/// <summary>
/// Fonction qui permet de déterminer si deux objets Artist sont égaux
/// </summary>
/// <param name="obj"></param>
/// <returns>Un booléen indiquant si l'objet est égal</returns>
public override bool Equals(object obj)
{
if (obj == null) return false;
if (obj.GetType() != typeof(Artist)) return false;
if (obj is Artist artist && Name == artist.Name) return true;
else return false;
}
/// <summary>
/// Permet de déterminer le hash d'un objet Artist
/// </summary>
/// <returns>Hash de l'attribut Name</returns>
public override int GetHashCode()
{
return Name.GetHashCode();
}
/// <summary>
/// Permet de déterminer le hash d'un objet Artist
/// </summary>
/// <returns>Hash de l'attribut Name</returns>
public override int GetHashCode()
{
return Name.GetHashCode();
}
/// <summary>
/// Permet de convertir un objet Artist en string
/// </summary>
/// <returns>Une nouvelle chaîne caractères contenant le nom de l'Artist</returns>
public override string ToString()
{
return $"{Name}";
/// <summary>
/// Permet de convertir un objet Artist en string
/// </summary>
/// <returns>Une nouvelle chaîne caractères contenant le nom de l'Artist</returns>
public override string ToString()
{
return $"{Name}";
}
}
}
}

@ -2,128 +2,128 @@
using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace Model;
public class CustomTitle : Title, INotifyPropertyChanged
namespace Model
{
/// <remarks>
/// Classe CustomTitle
/// </remarks>
public string Path
/// </remarks>
public class CustomTitle : Title, INotifyPropertyChanged
{
get => path;
set
public string Path
{
if (value != null && value.Length < Manager.MAX_DESCRIPTION_LENGTH)
get => path;
set
{
path = value;
if (value != null && value.Length < Manager.MAX_DESCRIPTION_LENGTH)
{
path = value;
}
OnPropertyChanged();
}
OnPropertyChanged();
}
}
private string path = Manager.DEFAULT_URL;
private string path = Manager.DEFAULT_URL;
public bool IsSubMenuVisible
{
get => isSubMenuVisible;
set
public bool IsSubMenuVisible
{
if (isSubMenuVisible != value)
get => isSubMenuVisible;
set
{
isSubMenuVisible = value;
if (isSubMenuVisible != value)
{
isSubMenuVisible = value;
}
OnPropertyChanged();
}
OnPropertyChanged();
}
}
private bool isSubMenuVisible = false;
private bool isSubMenuVisible = false;
public bool IsPlaylistMenuVisible
{
get => isPlaylistMenuVisible;
set
public bool IsPlaylistMenuVisible
{
if (isPlaylistMenuVisible != value)
get => isPlaylistMenuVisible;
set
{
isPlaylistMenuVisible = value;
if (isPlaylistMenuVisible != value)
{
isPlaylistMenuVisible = value;
}
OnPropertyChanged();
}
OnPropertyChanged();
}
}
private bool isPlaylistMenuVisible = false;
private bool isPlaylistMenuVisible = false;
public bool IsNewPlaylistMenuVisible
{
get => isNewPlaylistMenuVisible;
set
public bool IsNewPlaylistMenuVisible
{
if (isNewPlaylistMenuVisible != value)
get => isNewPlaylistMenuVisible;
set
{
isNewPlaylistMenuVisible = value;
if (isNewPlaylistMenuVisible != value)
{
isNewPlaylistMenuVisible = value;
}
OnPropertyChanged();
}
OnPropertyChanged();
}
}
private bool isNewPlaylistMenuVisible = false;
/// <summary>
/// Constructeur de la classe Album
/// </summary>
/// <param name="name">Nom du CustomTitle</param>
/// <param name="imageURL">Chemin d'accès de l'image du CustomTitle</param>
/// <param name="information">Informations sur un CustomTitle</param>
/// <param name="path">Chemin d'accès du CustomTitle</param>
public CustomTitle(string name, string imageURL, string information, string path) : base(name, imageURL, information)
{
Path = path;
}
/// <summary>
/// Constructeur par défaut de la classe CustomTitle
/// </summary>
public CustomTitle() : base(Manager.DEFAULT_NAME, Manager.DEFAULT_URL, Manager.DEFAULT_DESC) { }
private bool isNewPlaylistMenuVisible = false;
/// <summary>
/// Fonction qui permet de déterminer si deux objets CustomTitle sont égaux selon leurs chemin d'accès
/// </summary>
/// <param name="other"></param>
/// <returns>Un booléen indiquant si les chemins d'accès sont égaux</returns>
public bool Equals(CustomTitle other)
=> Path.Equals(other?.Path);
/// <summary>
/// Constructeur de la classe Album
/// </summary>
/// <param name="name">Nom du CustomTitle</param>
/// <param name="imageURL">Chemin d'accès de l'image du CustomTitle</param>
/// <param name="information">Informations sur un CustomTitle</param>
/// <param name="path">Chemin d'accès du CustomTitle</param>
public CustomTitle(string name, string imageURL, string information, string path) : base(name, imageURL, information)
{
Path = path;
}
/// <summary>
/// Fonction qui permet de déterminer si deux objets CustomTitle sont égaux
/// </summary>
/// <param name="obj"></param>
/// <returns>Un booléen indiquant si l'objet est égal</returns>
public override bool Equals(object obj)
{
if (ReferenceEquals(obj, null)) return false;
if (ReferenceEquals(this, obj)) return true;
if (GetType() != obj.GetType()) return false;
return Equals(obj as CustomTitle);
}
/// <summary>
/// Constructeur par défaut de la classe CustomTitle
/// </summary>
public CustomTitle() : base(Manager.DEFAULT_NAME, Manager.DEFAULT_URL, Manager.DEFAULT_DESC) { }
/// <summary>
/// Fonction qui permet de déterminer si deux objets CustomTitle sont égaux selon leurs chemin d'accès
/// </summary>
/// <param name="other"></param>
/// <returns>Un booléen indiquant si les chemins d'accès sont égaux</returns>
public bool Equals(CustomTitle other)
=> Path.Equals(other?.Path);
/// <summary>
/// Fonction qui permet de déterminer si deux objets CustomTitle sont égaux
/// </summary>
/// <param name="obj"></param>
/// <returns>Un booléen indiquant si l'objet est égal</returns>
public override bool Equals(object obj)
{
if (ReferenceEquals(obj, null)) return false;
if (ReferenceEquals(this, obj)) return true;
if (GetType() != obj.GetType()) return false;
return Equals(obj as CustomTitle);
}
/// <summary>
/// Permet de déterminer le hash d'un objet CustomTitle
/// </summary>
/// <returns>Hash de l'attribut Path</returns>
public override int GetHashCode()
{
return Path.GetHashCode();
}
/// <summary>
/// Permet de déterminer le hash d'un objet CustomTitle
/// </summary>
/// <returns>Hash de l'attribut Path</returns>
public override int GetHashCode()
{
return Path.GetHashCode();
}
/// <summary>
/// Permet de convertir un objet CustomTitle en string
/// </summary>
/// <returns>Une nouvelle chaîne caractères contenant le nom du CustomTitle et le chemin d'accès</returns>
public override string ToString()
{
return $"Name : {Name}, Path : {Path}";
/// <summary>
/// Permet de convertir un objet CustomTitle en string
/// </summary>
/// <returns>Une nouvelle chaîne caractères contenant le nom du CustomTitle et le chemin d'accès</returns>
public override string ToString()
{
return $"Name : {Name}, Path : {Path}";
}
}
}
}

@ -1,10 +1,11 @@
namespace Model;
public enum Genre
namespace Model
{
/// <remarks>
/// Enum des diffénres genres référencés.
/// </remarks>
HIP_HOP, POP, ROCK, ELECTRO, CLASSIQUE, JAZZ, VARIETE_FRANCAISE, VARIETE_INTERNATIONALE, REGGAE, RAP, RNB, DISCO, BLUES, COUNTRY, FUNK, GOSPEL,
METAL, K_POP
}
public enum Genre
{
HIP_HOP, POP, ROCK, ELECTRO, CLASSIQUE, JAZZ, VARIETE_FRANCAISE, VARIETE_INTERNATIONALE, REGGAE, RAP, RNB, DISCO, BLUES, COUNTRY, FUNK, GOSPEL,
METAL, K_POP
}
}

@ -1,421 +1,422 @@
using System.Collections.ObjectModel;
namespace Model;
public interface IDataManager
namespace Model
{
// Create
/// <summary>
/// Permet d'ajouter un objet Album à l'application
/// </summary>
/// <param name="album">Album à ajouter</param>
void AddAlbum(Album album);
/// <summary>
/// Permet d'ajouter des objets Album à l'application
/// </summary>
/// <param name="albumsList">Liste d'Album à ajouter</param>
void AddAlbums(List<Album> albumsList);
/// <summary>
/// Permet d'ajouter un objet Artist à l'application
/// </summary>
/// <param name="artist">Artist à ajouter</param>
void AddArtist(Artist artist);
/// <summary>
/// Permet d'ajouter des objets Artist à l'application
/// </summary>
/// <param name="artistsList">Liste d'Artist à ajouter</param>
void AddArtists(List<Artist> artistsList);
/// <summary>
/// Permet d'ajouter un objet Playlist à l'application
/// </summary>
/// <param name="playlist">Playlist à ajouter</param>
void AddPlaylist(Playlist playlist);
/// <summary>
/// Permet d'ajouter des objets Playlist à l'application
/// </summary>
/// <param name="playlistsList">Liste de Playlist à ajouter</param>
void AddPlaylists(List<Playlist> playlistsList);
/// <summary>
/// Permet d'ajouter un objet CustomTitle à l'application
/// </summary>
/// <param name="title">CustomTitle à ajouter</param>
void AddCustomTitle(CustomTitle title);
/// <summary>
/// Permet d'ajouter des objets CustomTitle à l'application
/// </summary>
/// <param name="customTitlesList">Liste de CustomTitle à ajouter</param>
void AddCustomTitles(List<CustomTitle> customTitlesList);
/// <summary>
/// Permet d'ajouter un objet InfoTitle à l'application
/// </summary>
/// <param name="title">InfoTitle à ajouter</param>
void AddInfoTitle(InfoTitle title);
/// <summary>
/// Permet d'ajouter des objets InfoTitle à l'application
/// </summary>
/// <param name="infoTitlesList">Liste d'InfoTitle à ajouter</param>
void AddInfoTitles(List<InfoTitle> infoTitlesList);
// Read
/// <summary>
/// Permet d'obtenir une liste d'objets CustomTitle
/// </summary>
/// <returns>Retourne une liste d'objets CustomTitle</returns>
ObservableCollection<CustomTitle> GetCustomTitles();
/// <summary>
/// Permet d'obtenir un objet CustomTitle à partir de son chemin d'accès
/// </summary>
/// <param name="custom">Chemin d'accès de l'objet CustomTitle</param>
/// <returns>Retourne l'objet CustomTitle avec un chemin d'accès équivalent à celui donné en paramètre</returns>
CustomTitle GetCustomTitleByPath(string custom);
/// <summary>
/// Permet d'obtenir une liste d'objets InfoTitle
/// </summary>
/// <returns>Retourne une liste d'objets InfoTitle</returns>
ObservableCollection<InfoTitle> GetInfoTitles();
/// <summary>
/// Permet d'obtenir un objet InfoTitle à partir de son nom
/// </summary>
/// <param name="name">Nom de l'objet InfoTitle</param>
/// <returns>Retourne l'objet InfoTitle avec un nom équivalent à celui donné en paramètre</returns>
InfoTitle GetInfoTitleByName(string name);
/// <summary>
/// Permet d'obtenir une liste d'objets Album
/// </summary>
/// <returns>Retourne une liste d'objets Album</returns>
ObservableCollection<Album> GetAlbums();
/// <summary>
/// Permet d'obtenir un objet Album à partir de son nom
/// </summary>
/// <param name="name">Nom de l'objet Album</param>
/// <returns>Retourne l'objet Album avec un nom équivalent à celui donné en paramètre</returns>
Album GetAlbumByName(string name);
/// <summary>
/// Permet d'obtenir un objet Album à partir de son ID
/// </summary>
/// <param name="id">ID de l'objet Album</param>
/// <returns>Retourne l'objet Album avec un ID équivalent à celui donné en paramètre</returns>
Album GetAlbumById(long id);
/// <summary>
/// Permet d'obtenir une liste d'objets Artist
/// </summary>
/// <returns>Retourne une liste d'objets Artist</returns>
List<Artist> GetArtists();
/// <summary>
/// Permet d'obtenir un objet Artist à partir de son nom
/// </summary>
/// <param name="name">Nom de l'objet Artist</param>
/// <returns>Retourne l'objet Artist avec un nom équivalent à celui donné en paramètre</returns>
Artist GetArtistByName(string name);
/// <summary>
/// Permet d'obtenir une liste d'objets Playlist
/// </summary>
/// <returns>Retourne une liste d'objets Playlist</returns>
ObservableCollection<Playlist> GetPlaylists();
/// <summary>
/// Permet d'obtenir un objet Playlist à partir de son nom
/// </summary>
/// <param name="name">Nom de l'objet Playlist</param>
/// <returns>Retourne l'objet Playlist avec un nom équivalent à celui donné en paramètre</returns>
Playlist GetPlaylistByName(string name);
// Update
/// <summary>
/// Modifie un objet CustomTitle avec les informations données en paramètre
/// </summary>
/// <param name="title">CustomTitle à modifier</param>
/// <param name="name">Nom de l'objet CustomTitle</param>
/// <param name="url">Chemin d'accès de l'image de l'objet CustomTitle</param>
/// <param name="info">Informations de l'objet CustomTitle</param>
/// <param name="path">Chemin d'accès de l'objet CustomTitle</param>
void UpdateCustomTitle(CustomTitle title, string name, string url, string info, string path);
/// <summary>
/// Modifie un objet CustomTitle avec les informations données en paramètre
/// </summary>
/// <param name="path">Chemin d'accès du CustomTitle à modifier</param>
/// <param name="name">Nom de l'objet CustomTitle</param>
/// <param name="newUrl">Chemin d'accès de l'image de l'objet CustomTitle</param>
/// <param name="info">Informations de l'objet CustomTitle</param>
/// <param name="newPath">Chemin d'accès de l'objet CustomTitle</param>
void UpdateCustomTitleByPath(string path, string name, string newUrl, string info, string newPath);
/// <summary>
/// Modifie un objet InfoTitle avec les informations données en paramètre
/// </summary>
/// <param name="title">InfoTitle à modifier</param>
/// <param name="name">Nom de l'objet InfoTitle</param>
/// <param name="url">Chemin d'accès de l'image de l'objet InfoTitle</param>
/// <param name="info">Informations de l'objet InfoTitle</param>
/// <param name="artist">Artist de l'objet InfoTitle</param>
/// <param name="description">Description de l'objet InfoTitle</param>
/// <param name="genre">Genre de l'objet InfoTitle</param>
void UpdateInfoTitle(InfoTitle title, string name, string url, string info, Artist artist, string description, Genre genre);
/// <summary>
/// Modifie un objet InfoTitle avec les informations données en paramètre
/// </summary>
/// <param name="name">Nom de l'objet InfoTitle à modifier</param>
/// <param name="newUrl">Chemin d'accès de l'image de l'objet InfoTitle</param>
/// <param name="info">Informations de l'objet InfoTitle</param>
/// <param name="artist">Artist de l'objet InfoTitle</param>
/// <param name="description">Description de l'objet InfoTitle</param>
/// <param name="genre">Genre de l'objet InfoTitle</param>
void UpdateInfoTitleByName(string name, string newUrl, string info, Artist artist, string description, Genre genre);
/// <summary>
/// Modifie un objet Album avec les informations données en paramètre
/// </summary>
/// <param name="album">Album à modifier</param>
/// <param name="name">Nom de l'objet Album</param>
/// <param name="url">Chemin d'accès de l'image de l'objet Album</param>
/// <param name="artist">Artist de l'objet Album</param>
/// <param name="description">Description de l'objet Album</param>
/// <param name="info">Informations de l'objet Album</param>
void UpdateAlbum(Album album, string name, string url, Artist artist, string description, string info);
/// <summary>
/// Modifie un objet Album avec les informations données en paramètre
/// </summary>
/// <param name="name">Nom de l'objet Album à modifier</param>
/// <param name="newUrl">Chemin d'accès de l'image de l'objet Album</param>
/// <param name="artist">Artist de l'objet Album</param>
/// <param name="description">Description de l'objet Album</param>
/// <param name="info">Informations de l'objet Album</param>
void UpdateAlbumByName(string name, string newUrl, Artist artist, string description, string info);
/// <summary>
/// Modifie un objet Album avec les informations données en paramètre
/// </summary>
/// <param name="album">Album à modifier</param>
/// <param name="name">Nom de l'objet Album</param>
/// <param name="url">Chemin d'accès de l'image de l'objet Album</param>
/// <param name="artist">Nom de l'artiste de l'objet Album</param>
/// <param name="description">Description de l'objet Album</param>
/// <param name="info">Informations de l'objet Album</param>
void UpdateAlbumByArtistName(Album album, string name, string url, string artist, string description, string info);
/// <summary>
/// Modifie un objet Album avec les informations données en paramètre
/// </summary>
/// <param name="name">Nom de l'objet Album à modifier</param>
/// <param name="newUrl">Chemin d'accès de l'image de l'objet Album</param>
/// <param name="artist">Nom de l'artiste de l'objet Album</param>
/// <param name="description">Description de l'objet Album</param>
/// <param name="info">Informations de l'objet Album</param>
void UpdateAlbumByNameByArtistName(string name, string newUrl, string artist, string description, string info);
/// <summary>
/// Modifie un objet Playlist avec les informations données en paramètre
/// </summary>
/// <param name="playlist">Playlist à modifier</param>
/// <param name="name">Nom de l'objet Playlist</param>
/// <param name="description">Description de l'objet Playlist</param>
/// <param name="url">Chemin d'accès de l'image de l'objet Playlist</param>
void UpdatePlaylist(Playlist playlist, string name, string description, string url);
/// <summary>
/// Modifie un objet Playlist avec les informations données en paramètre
/// </summary>
/// <param name="name">Nom de l'objet Playlist à modifier</param>
/// <param name="description">Description de l'objet Playlist</param>
/// <param name="newUrl">Chemin d'accès de l'image de l'objet Playlist</param>
void UpdatePlaylistByName(string name, string description, string newUrl);
/// <summary>
/// Modifie un objet Artist avec les informations données en paramètre
/// </summary>
/// <param name="artist">Artiste à modifier</param>
/// <param name="name">Nom de l'objet Artist</param>
void UpdateArtist(Artist artist, string name);
/// <summary>
/// Modifie un objet Artist avec les informations données en paramètre
/// </summary>
/// <param name="name">Nom de l'objet Artist à modifier</param>
/// <param name="newName">Nouveau nom de l'objet Artist</param>
void UpdateArtistByName(string name, string newName);
// Delete
/// <summary>
/// Permet de retirer un objet Album de l'application
/// </summary>
/// <param name="album">Album à retirer</param>
void RemoveAlbum(Album album);
/// <summary>
/// Permet de retirer des objets Album de l'application
/// </summary>
/// <param name="albumsList">Liste des objets Album à retirer de l'application</param>
void RemoveAlbums(List<Album> albumsList);
/// <summary>
/// Permet de retirer un objet Artist de l'application
/// </summary>
/// <param name="artist">Artist à retirer</param>
void RemoveArtist(Artist artist);
/// <summary>
/// Permet de retirer des objets Artist de l'application
/// </summary>
/// <param name="artistsList">Liste des objets Artist à retirer de l'application</param>
void RemoveArtists(List<Artist> artistsList);
/// <summary>
/// Permet de retirer un objet Playlist de l'application
/// </summary>
/// <param name="playlist">Playlist à retirer</param>
void RemovePlaylist(Playlist playlist);
/// <summary>
/// Permet de retirer des objets Playlist de l'application
/// </summary>
/// <param name="playlistsList">Liste des objets Playlist à retirer de l'application</param>
void RemovePlaylists(List<Playlist> playlistsList);
/// <summary>
/// Permet de retirer un objet CustomTitle de l'application
/// </summary>
/// <param name="title">CustomTitle à retirer</param>
void RemoveCustomTitle(CustomTitle title);
/// <summary>
/// Permet de retirer des objets CustomTitle de l'application
/// </summary>
/// <param name="customTitlesList">Liste des objets CustomTitle à retirer de l'application</param>
void RemoveCustomTitles(List<CustomTitle> customTitlesList);
/// <summary>
/// Permet de retirer un objet InfoTitle de l'application
/// </summary>
/// <param name="title">InfoTitle à retirer</param>
void RemoveInfoTitle(InfoTitle title);
/// <summary>
/// Permet de retirer des objets InfoTitle de l'application
/// </summary>
/// <param name="infoTitlesList">Liste des objets InfoTitle à retirer de l'application</param>
void RemoveInfoTitles(List<InfoTitle> infoTitlesList);
// Serialization
/// <summary>
/// Permet de charger les données
/// </summary>
void LoadSerialization();
/// <summary>
/// Permet de sauvegarder l'état de l'application
/// </summary>
void SaveSerialization();
// Exists
/// <summary>
/// Permet de savoir si un objet Playlist appartient ou non à l'application
/// </summary>
/// <param name="playlist">Playlist à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsPlaylist(Playlist playlist);
/// <summary>
/// Permet de savoir si un objet Playlist appartient ou non à l'application selon son nom
/// </summary>
/// <param name="name">Nom de l'objet Playlist à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsPlaylistByName(string name);
/// <summary>
/// Permet de savoir si un objet Album appartient ou non à l'application
/// </summary>
/// <param name="album">Album à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsAlbum(Album album);
/// <summary>
/// Permet de savoir si un objet Album appartient ou non à l'application selon son nom
/// </summary>
/// <param name="name">Nom de l'objet Album à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsAlbumByName(string name);
/// <summary>
/// Permet de savoir si un objet Artist appartient ou non à l'application
/// </summary>
/// <param name="artist">Artist à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsArtist(Artist artist);
/// <summary>
/// Permet de savoir si un objet Artist appartient ou non à l'application selon son nom
/// </summary>
/// <param name="name">Nom de l'objet Artist à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsArtistByName(string name);
/// <summary>
/// Permet de savoir si un objet CustomTitle appartient ou non à l'application selon son nom
/// </summary>
/// <param name="title">Nom de l'objet CustomTitle à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsCustomTitle(CustomTitle title);
/// <summary>
/// Permet de savoir si un objet CustomTitle appartient ou non à l'application selon son nom
/// </summary>
/// <param name="name">Nom de l'objet CustomTitle à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsCustomTitleByName(string name);
/// <summary>
/// Permet de savoir si un objet InfoTitle appartient ou non à l'application
/// </summary>
/// <param name="title">InfoTitle à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsInfoTitle(InfoTitle title);
/// <summary>
/// Permet de savoir si un objet InfoTitle appartient ou non à l'application selon son nom
/// </summary>
/// <param name="name">Nom de l'objet InfoTitle à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsInfoTitleByName(string name);
public interface IDataManager
{
// Create
/// <summary>
/// Permet d'ajouter un objet Album à l'application
/// </summary>
/// <param name="album">Album à ajouter</param>
void AddAlbum(Album album);
/// <summary>
/// Permet d'ajouter des objets Album à l'application
/// </summary>
/// <param name="albumsList">Liste d'Album à ajouter</param>
void AddAlbums(List<Album> albumsList);
/// <summary>
/// Permet d'ajouter un objet Artist à l'application
/// </summary>
/// <param name="artist">Artist à ajouter</param>
void AddArtist(Artist artist);
/// <summary>
/// Permet d'ajouter des objets Artist à l'application
/// </summary>
/// <param name="artistsList">Liste d'Artist à ajouter</param>
void AddArtists(List<Artist> artistsList);
/// <summary>
/// Permet d'ajouter un objet Playlist à l'application
/// </summary>
/// <param name="playlist">Playlist à ajouter</param>
void AddPlaylist(Playlist playlist);
/// <summary>
/// Permet d'ajouter des objets Playlist à l'application
/// </summary>
/// <param name="playlistsList">Liste de Playlist à ajouter</param>
void AddPlaylists(List<Playlist> playlistsList);
/// <summary>
/// Permet d'ajouter un objet CustomTitle à l'application
/// </summary>
/// <param name="title">CustomTitle à ajouter</param>
void AddCustomTitle(CustomTitle title);
/// <summary>
/// Permet d'ajouter des objets CustomTitle à l'application
/// </summary>
/// <param name="customTitlesList">Liste de CustomTitle à ajouter</param>
void AddCustomTitles(List<CustomTitle> customTitlesList);
/// <summary>
/// Permet d'ajouter un objet InfoTitle à l'application
/// </summary>
/// <param name="title">InfoTitle à ajouter</param>
void AddInfoTitle(InfoTitle title);
/// <summary>
/// Permet d'ajouter des objets InfoTitle à l'application
/// </summary>
/// <param name="infoTitlesList">Liste d'InfoTitle à ajouter</param>
void AddInfoTitles(List<InfoTitle> infoTitlesList);
// Read
/// <summary>
/// Permet d'obtenir une liste d'objets CustomTitle
/// </summary>
/// <returns>Retourne une liste d'objets CustomTitle</returns>
ObservableCollection<CustomTitle> GetCustomTitles();
/// <summary>
/// Permet d'obtenir un objet CustomTitle à partir de son chemin d'accès
/// </summary>
/// <param name="custom">Chemin d'accès de l'objet CustomTitle</param>
/// <returns>Retourne l'objet CustomTitle avec un chemin d'accès équivalent à celui donné en paramètre</returns>
CustomTitle GetCustomTitleByPath(string custom);
/// <summary>
/// Permet d'obtenir une liste d'objets InfoTitle
/// </summary>
/// <returns>Retourne une liste d'objets InfoTitle</returns>
ObservableCollection<InfoTitle> GetInfoTitles();
/// <summary>
/// Permet d'obtenir un objet InfoTitle à partir de son nom
/// </summary>
/// <param name="name">Nom de l'objet InfoTitle</param>
/// <returns>Retourne l'objet InfoTitle avec un nom équivalent à celui donné en paramètre</returns>
InfoTitle GetInfoTitleByName(string name);
/// <summary>
/// Permet d'obtenir une liste d'objets Album
/// </summary>
/// <returns>Retourne une liste d'objets Album</returns>
ObservableCollection<Album> GetAlbums();
/// <summary>
/// Permet d'obtenir un objet Album à partir de son nom
/// </summary>
/// <param name="name">Nom de l'objet Album</param>
/// <returns>Retourne l'objet Album avec un nom équivalent à celui donné en paramètre</returns>
Album GetAlbumByName(string name);
/// <summary>
/// Permet d'obtenir un objet Album à partir de son ID
/// </summary>
/// <param name="id">ID de l'objet Album</param>
/// <returns>Retourne l'objet Album avec un ID équivalent à celui donné en paramètre</returns>
Album GetAlbumById(long id);
/// <summary>
/// Permet d'obtenir une liste d'objets Artist
/// </summary>
/// <returns>Retourne une liste d'objets Artist</returns>
List<Artist> GetArtists();
/// <summary>
/// Permet d'obtenir un objet Artist à partir de son nom
/// </summary>
/// <param name="name">Nom de l'objet Artist</param>
/// <returns>Retourne l'objet Artist avec un nom équivalent à celui donné en paramètre</returns>
Artist GetArtistByName(string name);
/// <summary>
/// Permet d'obtenir une liste d'objets Playlist
/// </summary>
/// <returns>Retourne une liste d'objets Playlist</returns>
ObservableCollection<Playlist> GetPlaylists();
/// <summary>
/// Permet d'obtenir un objet Playlist à partir de son nom
/// </summary>
/// <param name="name">Nom de l'objet Playlist</param>
/// <returns>Retourne l'objet Playlist avec un nom équivalent à celui donné en paramètre</returns>
Playlist GetPlaylistByName(string name);
// Update
/// <summary>
/// Modifie un objet CustomTitle avec les informations données en paramètre
/// </summary>
/// <param name="title">CustomTitle à modifier</param>
/// <param name="name">Nom de l'objet CustomTitle</param>
/// <param name="url">Chemin d'accès de l'image de l'objet CustomTitle</param>
/// <param name="info">Informations de l'objet CustomTitle</param>
/// <param name="path">Chemin d'accès de l'objet CustomTitle</param>
void UpdateCustomTitle(CustomTitle title, string name, string url, string info, string path);
/// <summary>
/// Modifie un objet CustomTitle avec les informations données en paramètre
/// </summary>
/// <param name="path">Chemin d'accès du CustomTitle à modifier</param>
/// <param name="name">Nom de l'objet CustomTitle</param>
/// <param name="newUrl">Chemin d'accès de l'image de l'objet CustomTitle</param>
/// <param name="info">Informations de l'objet CustomTitle</param>
/// <param name="newPath">Chemin d'accès de l'objet CustomTitle</param>
void UpdateCustomTitleByPath(string path, string name, string newUrl, string info, string newPath);
/// <summary>
/// Modifie un objet InfoTitle avec les informations données en paramètre
/// </summary>
/// <param name="title">InfoTitle à modifier</param>
/// <param name="name">Nom de l'objet InfoTitle</param>
/// <param name="url">Chemin d'accès de l'image de l'objet InfoTitle</param>
/// <param name="info">Informations de l'objet InfoTitle</param>
/// <param name="artist">Artist de l'objet InfoTitle</param>
/// <param name="description">Description de l'objet InfoTitle</param>
/// <param name="genre">Genre de l'objet InfoTitle</param>
void UpdateInfoTitle(InfoTitle title, string name, string url, string info, Artist artist, string description, Genre genre);
/// <summary>
/// Modifie un objet InfoTitle avec les informations données en paramètre
/// </summary>
/// <param name="name">Nom de l'objet InfoTitle à modifier</param>
/// <param name="newUrl">Chemin d'accès de l'image de l'objet InfoTitle</param>
/// <param name="info">Informations de l'objet InfoTitle</param>
/// <param name="artist">Artist de l'objet InfoTitle</param>
/// <param name="description">Description de l'objet InfoTitle</param>
/// <param name="genre">Genre de l'objet InfoTitle</param>
void UpdateInfoTitleByName(string name, string newUrl, string info, Artist artist, string description, Genre genre);
/// <summary>
/// Modifie un objet Album avec les informations données en paramètre
/// </summary>
/// <param name="album">Album à modifier</param>
/// <param name="name">Nom de l'objet Album</param>
/// <param name="url">Chemin d'accès de l'image de l'objet Album</param>
/// <param name="artist">Artist de l'objet Album</param>
/// <param name="description">Description de l'objet Album</param>
/// <param name="info">Informations de l'objet Album</param>
void UpdateAlbum(Album album, string name, string url, Artist artist, string description, string info);
/// <summary>
/// Modifie un objet Album avec les informations données en paramètre
/// </summary>
/// <param name="name">Nom de l'objet Album à modifier</param>
/// <param name="newUrl">Chemin d'accès de l'image de l'objet Album</param>
/// <param name="artist">Artist de l'objet Album</param>
/// <param name="description">Description de l'objet Album</param>
/// <param name="info">Informations de l'objet Album</param>
void UpdateAlbumByName(string name, string newUrl, Artist artist, string description, string info);
/// <summary>
/// Modifie un objet Album avec les informations données en paramètre
/// </summary>
/// <param name="album">Album à modifier</param>
/// <param name="name">Nom de l'objet Album</param>
/// <param name="url">Chemin d'accès de l'image de l'objet Album</param>
/// <param name="artist">Nom de l'artiste de l'objet Album</param>
/// <param name="description">Description de l'objet Album</param>
/// <param name="info">Informations de l'objet Album</param>
void UpdateAlbumByArtistName(Album album, string name, string url, string artist, string description, string info);
/// <summary>
/// Modifie un objet Album avec les informations données en paramètre
/// </summary>
/// <param name="name">Nom de l'objet Album à modifier</param>
/// <param name="newUrl">Chemin d'accès de l'image de l'objet Album</param>
/// <param name="artist">Nom de l'artiste de l'objet Album</param>
/// <param name="description">Description de l'objet Album</param>
/// <param name="info">Informations de l'objet Album</param>
void UpdateAlbumByNameByArtistName(string name, string newUrl, string artist, string description, string info);
/// <summary>
/// Modifie un objet Playlist avec les informations données en paramètre
/// </summary>
/// <param name="playlist">Playlist à modifier</param>
/// <param name="name">Nom de l'objet Playlist</param>
/// <param name="description">Description de l'objet Playlist</param>
/// <param name="url">Chemin d'accès de l'image de l'objet Playlist</param>
void UpdatePlaylist(Playlist playlist, string name, string description, string url);
/// <summary>
/// Modifie un objet Playlist avec les informations données en paramètre
/// </summary>
/// <param name="name">Nom de l'objet Playlist à modifier</param>
/// <param name="description">Description de l'objet Playlist</param>
/// <param name="newUrl">Chemin d'accès de l'image de l'objet Playlist</param>
void UpdatePlaylistByName(string name, string description, string newUrl);
/// <summary>
/// Modifie un objet Artist avec les informations données en paramètre
/// </summary>
/// <param name="artist">Artiste à modifier</param>
/// <param name="name">Nom de l'objet Artist</param>
void UpdateArtist(Artist artist, string name);
/// <summary>
/// Modifie un objet Artist avec les informations données en paramètre
/// </summary>
/// <param name="name">Nom de l'objet Artist à modifier</param>
/// <param name="newName">Nouveau nom de l'objet Artist</param>
void UpdateArtistByName(string name, string newName);
// Delete
/// <summary>
/// Permet de retirer un objet Album de l'application
/// </summary>
/// <param name="album">Album à retirer</param>
void RemoveAlbum(Album album);
/// <summary>
/// Permet de retirer des objets Album de l'application
/// </summary>
/// <param name="albumsList">Liste des objets Album à retirer de l'application</param>
void RemoveAlbums(List<Album> albumsList);
/// <summary>
/// Permet de retirer un objet Artist de l'application
/// </summary>
/// <param name="artist">Artist à retirer</param>
void RemoveArtist(Artist artist);
/// <summary>
/// Permet de retirer des objets Artist de l'application
/// </summary>
/// <param name="artistsList">Liste des objets Artist à retirer de l'application</param>
void RemoveArtists(List<Artist> artistsList);
/// <summary>
/// Permet de retirer un objet Playlist de l'application
/// </summary>
/// <param name="playlist">Playlist à retirer</param>
void RemovePlaylist(Playlist playlist);
/// <summary>
/// Permet de retirer des objets Playlist de l'application
/// </summary>
/// <param name="playlistsList">Liste des objets Playlist à retirer de l'application</param>
void RemovePlaylists(List<Playlist> playlistsList);
/// <summary>
/// Permet de retirer un objet CustomTitle de l'application
/// </summary>
/// <param name="title">CustomTitle à retirer</param>
void RemoveCustomTitle(CustomTitle title);
/// <summary>
/// Permet de retirer des objets CustomTitle de l'application
/// </summary>
/// <param name="customTitlesList">Liste des objets CustomTitle à retirer de l'application</param>
void RemoveCustomTitles(List<CustomTitle> customTitlesList);
/// <summary>
/// Permet de retirer un objet InfoTitle de l'application
/// </summary>
/// <param name="title">InfoTitle à retirer</param>
void RemoveInfoTitle(InfoTitle title);
/// <summary>
/// Permet de retirer des objets InfoTitle de l'application
/// </summary>
/// <param name="infoTitlesList">Liste des objets InfoTitle à retirer de l'application</param>
void RemoveInfoTitles(List<InfoTitle> infoTitlesList);
// Serialization
/// <summary>
/// Permet de charger les données
/// </summary>
void LoadSerialization();
/// <summary>
/// Permet de sauvegarder l'état de l'application
/// </summary>
void SaveSerialization();
// Exists
/// <summary>
/// Permet de savoir si un objet Playlist appartient ou non à l'application
/// </summary>
/// <param name="playlist">Playlist à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsPlaylist(Playlist playlist);
/// <summary>
/// Permet de savoir si un objet Playlist appartient ou non à l'application selon son nom
/// </summary>
/// <param name="name">Nom de l'objet Playlist à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsPlaylistByName(string name);
/// <summary>
/// Permet de savoir si un objet Album appartient ou non à l'application
/// </summary>
/// <param name="album">Album à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsAlbum(Album album);
/// <summary>
/// Permet de savoir si un objet Album appartient ou non à l'application selon son nom
/// </summary>
/// <param name="name">Nom de l'objet Album à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsAlbumByName(string name);
/// <summary>
/// Permet de savoir si un objet Artist appartient ou non à l'application
/// </summary>
/// <param name="artist">Artist à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsArtist(Artist artist);
/// <summary>
/// Permet de savoir si un objet Artist appartient ou non à l'application selon son nom
/// </summary>
/// <param name="name">Nom de l'objet Artist à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsArtistByName(string name);
/// <summary>
/// Permet de savoir si un objet CustomTitle appartient ou non à l'application selon son nom
/// </summary>
/// <param name="title">Nom de l'objet CustomTitle à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsCustomTitle(CustomTitle title);
/// <summary>
/// Permet de savoir si un objet CustomTitle appartient ou non à l'application selon son nom
/// </summary>
/// <param name="name">Nom de l'objet CustomTitle à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsCustomTitleByName(string name);
/// <summary>
/// Permet de savoir si un objet InfoTitle appartient ou non à l'application
/// </summary>
/// <param name="title">InfoTitle à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsInfoTitle(InfoTitle title);
/// <summary>
/// Permet de savoir si un objet InfoTitle appartient ou non à l'application selon son nom
/// </summary>
/// <param name="name">Nom de l'objet InfoTitle à vérifier</param>
/// <returns>Booléen True s'il est contenu dans l'application, False sinon</returns>
bool ExistsInfoTitleByName(string name);
}
}

@ -1,125 +1,126 @@
using System.Xml.Serialization;
using Model.Stub;
namespace Model;
public class InfoTitle : Title
namespace Model
{
/// <remarks>
/// Classe InfoTitle
/// </remarks>
public string Description
public class InfoTitle : Title
{
get => description;
set
public string Description
{
if (value != null && value.Length < Manager.MAX_DESCRIPTION_LENGTH)
get => description;
set
{
description = value;
if (value != null && value.Length < Manager.MAX_DESCRIPTION_LENGTH)
{
description = value;
}
}
}
}
private string description = Manager.DEFAULT_DESC;
private string description = Manager.DEFAULT_DESC;
private List<Artist> feat = new List<Artist>();
private List<Artist> feat = new List<Artist>();
public IEnumerable<Artist> Feat
{
get
public IEnumerable<Artist> Feat
{
return new List<Artist>(feat);
get
{
return new List<Artist>(feat);
}
}
}
public Genre Genre { get; set; }
public Genre Genre { get; set; }
private long albumID;
private long albumID;
public long AlbumID
{
get => albumID;
set
public long AlbumID
{
albumID = value;
get => albumID;
set
{
albumID = value;
}
}
}
/// <summary>
/// Constructeur de la classe InfoTitle
/// </summary>
/// <param name="name">Nom de l'InfoTitle</param>
/// <param name="imageURL">Chemin d'accès de l'image de l'InfoTitle</param>
/// <param name="information">Informations complémentaires sur l'InfoTitle</param>
/// <param name="description">Description de l'InfoTitle</param>
/// <param name="genre">Genre de l'InfoTitle</param>
/// <param name="albumID">ID de l'album auquel appartient l'InfoTitle</param>
public InfoTitle(string name, string imageURL, string information, string description, Genre genre, long albumID) : base(name,imageURL,information)
{
Description = description;
Genre = genre;
AlbumID = albumID;
}
/// <summary>
/// Constructeur de la classe InfoTitle
/// </summary>
/// <param name="name">Nom de l'InfoTitle</param>
/// <param name="imageURL">Chemin d'accès de l'image de l'InfoTitle</param>
/// <param name="information">Informations complémentaires sur l'InfoTitle</param>
/// <param name="description">Description de l'InfoTitle</param>
/// <param name="genre">Genre de l'InfoTitle</param>
/// <param name="albumID">ID de l'album auquel appartient l'InfoTitle</param>
public InfoTitle(string name, string imageURL, string information, string description, Genre genre, long albumID) : base(name, imageURL, information)
{
Description = description;
Genre = genre;
AlbumID = albumID;
}
/// <summary>
/// Constructeur par défaut de la classe InfoTitle
/// </summary>
public InfoTitle() : base(Manager.DEFAULT_NAME, Manager.DEFAULT_URL, Manager.DEFAULT_DESC)
{
}
/// <summary>
/// Constructeur par défaut de la classe InfoTitle
/// </summary>
public InfoTitle() : base(Manager.DEFAULT_NAME, Manager.DEFAULT_URL, Manager.DEFAULT_DESC)
{
/// <summary>
/// Ajoute un artiste en tant que Feat de l'InfoTitle
/// </summary>
/// <param name="artist"></param>
public void AddFeat(Artist artist)
{
feat.Add(artist);
}
}
/// <summary>
/// Enlève un artiste des feats de l'InfoTitle
/// </summary>
/// <param name="artiste"></param>
public void RemoveFeat(Artist artiste)
{
foreach (var item in Feat)
/// <summary>
/// Ajoute un artiste en tant que Feat de l'InfoTitle
/// </summary>
/// <param name="artist"></param>
public void AddFeat(Artist artist)
{
feat = Feat.Where(item => item != artiste).ToList();
feat.Add(artist);
}
}
/// <summary>
/// Fonction qui permet de déterminer si deux objets InfoTitle sont égaux
/// </summary>
/// <param name="obj"></param>
/// <returns>Un booléen indiquant si l'objet est égal</returns>
public override bool Equals(object obj)
{
if (obj is null) return false;
if (obj.GetType() != typeof(InfoTitle)) return false;
if (obj is InfoTitle infoTitle && Name == infoTitle.Name) return true;
else return false;
}
/// <summary>
/// Enlève un artiste des feats de l'InfoTitle
/// </summary>
/// <param name="artiste"></param>
public void RemoveFeat(Artist artiste)
{
foreach (var item in Feat)
{
feat = Feat.Where(item => item != artiste).ToList();
}
}
/// <summary>
/// Permet de déterminer le hash d'un objet InfoTitle
/// </summary>
/// <returns>Hash de l'attribut Name</returns>
public override int GetHashCode()
{
return Name.GetHashCode();
}
/// <summary>
/// Fonction qui permet de déterminer si deux objets InfoTitle sont égaux
/// </summary>
/// <param name="obj"></param>
/// <returns>Un booléen indiquant si l'objet est égal</returns>
public override bool Equals(object obj)
{
if (obj is null) return false;
if (obj.GetType() != typeof(InfoTitle)) return false;
if (obj is InfoTitle infoTitle && Name == infoTitle.Name) return true;
else return false;
}
/// <summary>
/// Permet de convertir un objet InfoTitle en string
/// </summary>
/// <returns>Une nouvelle chaîne caractères contenant le nom de l'InfoTitle et le chemin d'accès à l'image</returns>
public override string ToString()
{
return $"Name : {Name}, ImageUrl : {ImageURL}";
/// <summary>
/// Permet de déterminer le hash d'un objet InfoTitle
/// </summary>
/// <returns>Hash de l'attribut Name</returns>
public override int GetHashCode()
{
return Name.GetHashCode();
}
/// <summary>
/// Permet de convertir un objet InfoTitle en string
/// </summary>
/// <returns>Une nouvelle chaîne caractères contenant le nom de l'InfoTitle et le chemin d'accès à l'image</returns>
public override string ToString()
{
return $"Name : {Name}, ImageUrl : {ImageURL}";
}
}
}

@ -2,445 +2,446 @@
using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace Model.Stub;
public class Manager : INotifyPropertyChanged
namespace Model.Stub
{
/// <remarks>
/// Classe Manager
/// </remarks>
public event PropertyChangedEventHandler PropertyChanged;
public class Manager : INotifyPropertyChanged
{
public readonly static int MAX_NAME_LENGTH = 75;
public event PropertyChangedEventHandler PropertyChanged;
public readonly static int MAX_DESCRIPTION_LENGTH = 500;
public readonly static int MAX_NAME_LENGTH = 75;
public readonly static string DEFAULT_NAME = "Unknown";
public readonly static int MAX_DESCRIPTION_LENGTH = 500;
public readonly static string DEFAULT_URL = "none.png";
public readonly static string DEFAULT_NAME = "Unknown";
public readonly static string DEFAULT_DESC = "";
public readonly static string DEFAULT_URL = "none.png";
public IDataManager DataManager { get; set; }
public readonly static string DEFAULT_DESC = "";
private ObservableCollection<Album> albums;
public IDataManager DataManager { get; set; }
public ObservableCollection<Album> Albums
{
get
private ObservableCollection<Album> albums;
public ObservableCollection<Album> Albums
{
return new ObservableCollection<Album>(albums);
get
{
return new ObservableCollection<Album>(albums);
}
}
}
private ObservableCollection<CustomTitle> customTitles;
private ObservableCollection<CustomTitle> customTitles;
public ObservableCollection<CustomTitle> CustomTitles
{
get
public ObservableCollection<CustomTitle> CustomTitles
{
return new ObservableCollection<CustomTitle>(customTitles);
get
{
return new ObservableCollection<CustomTitle>(customTitles);
}
}
}
private ObservableCollection<InfoTitle> infoTitles;
private ObservableCollection<InfoTitle> infoTitles;
public ObservableCollection<InfoTitle> InfoTitles
{
get
public ObservableCollection<InfoTitle> InfoTitles
{
return new ObservableCollection<InfoTitle>(infoTitles);
get
{
return new ObservableCollection<InfoTitle>(infoTitles);
}
}
}
private ObservableCollection<Playlist> playlists;
private ObservableCollection<Playlist> playlists;
public ObservableCollection<Playlist> Playlists
{
get
public ObservableCollection<Playlist> Playlists
{
return new ObservableCollection<Playlist>(playlists);
get
{
return new ObservableCollection<Playlist>(playlists);
}
}
}
private List<Artist> artists;
private List<Artist> artists;
public IEnumerable<Artist> Artists
{
get
public IEnumerable<Artist> Artists
{
return new List<Artist>(artists);
get
{
return new List<Artist>(artists);
}
}
}
private Album currentAlbum;
private Album currentAlbum;
public Album CurrentAlbum
{
get => currentAlbum;
set
public Album CurrentAlbum
{
currentAlbum = value;
OnPropertyChanged();
get => currentAlbum;
set
{
currentAlbum = value;
OnPropertyChanged();
}
}
}
private Playlist currentPlaylist;
private Playlist currentPlaylist;
public Playlist CurrentPlaylist
{
get => currentPlaylist;
set
public Playlist CurrentPlaylist
{
currentPlaylist = value;
OnPropertyChanged();
get => currentPlaylist;
set
{
currentPlaylist = value;
OnPropertyChanged();
}
}
}
private InfoTitle currentInfoTitle;
private InfoTitle currentInfoTitle;
public InfoTitle CurrentInfoTitle
{
get => currentInfoTitle;
set
public InfoTitle CurrentInfoTitle
{
currentInfoTitle = value;
OnPropertyChanged();
get => currentInfoTitle;
set
{
currentInfoTitle = value;
OnPropertyChanged();
}
}
}
private CustomTitle currentPlaying;
private CustomTitle currentPlaying;
public CustomTitle CurrentPlaying
{
get => currentPlaying;
set
public CustomTitle CurrentPlaying
{
currentPlaying = value;
OnPropertyChanged();
get => currentPlaying;
set
{
currentPlaying = value;
OnPropertyChanged();
}
}
}
private Dictionary<string, IEnumerable<Album>> albumsFromArtist;
private Dictionary<string, IEnumerable<Album>> albumsFromArtist;
public Dictionary<string, IEnumerable<Album>> AlbumsFromArtist
{
get => albumsFromArtist;
set
public Dictionary<string, IEnumerable<Album>> AlbumsFromArtist
{
albumsFromArtist = value;
get => albumsFromArtist;
set
{
albumsFromArtist = value;
}
}
}
private Dictionary<string, IEnumerable<InfoTitle>> infoTitlesFromArtist;
private Dictionary<string, IEnumerable<InfoTitle>> infoTitlesFromArtist;
public Dictionary<string, IEnumerable<InfoTitle>> InfoTitlesFromArtist
{
get => infoTitlesFromArtist;
set
public Dictionary<string, IEnumerable<InfoTitle>> InfoTitlesFromArtist
{
infoTitlesFromArtist = value;
get => infoTitlesFromArtist;
set
{
infoTitlesFromArtist = value;
}
}
}
/// <summary>
/// Constructeur de la classe Manager
/// </summary>
/// <param name="dataManager">Méthode de sérialisation, gestionnaire des données</param>
public Manager(IDataManager dataManager)
{
DataManager = dataManager;
/// <summary>
/// Constructeur de la classe Manager
/// </summary>
/// <param name="dataManager">Méthode de sérialisation, gestionnaire des données</param>
public Manager(IDataManager dataManager)
{
DataManager = dataManager;
albums = DataManager.GetAlbums();
customTitles = DataManager.GetCustomTitles();
infoTitles = DataManager.GetInfoTitles();
playlists = DataManager.GetPlaylists();
artists = DataManager.GetArtists();
albums = DataManager.GetAlbums();
customTitles = DataManager.GetCustomTitles();
infoTitles = DataManager.GetInfoTitles();
playlists = DataManager.GetPlaylists();
artists = DataManager.GetArtists();
currentAlbum = albums.First();
currentPlaylist = playlists.FirstOrDefault();
currentInfoTitle = null;
currentPlaying = null;
currentAlbum = albums.First();
currentPlaylist = playlists.FirstOrDefault();
currentInfoTitle = null;
currentPlaying = null;
LoadDictionaries();
}
LoadDictionaries();
}
/// <summary>
/// Remplis les dictionnaire grâce aux stubs et à LINQ
/// </summary>
public void LoadDictionaries()
{
albumsFromArtist = albums.GroupBy(album => album.Artist.Name).ToDictionary(group => group.Key, group => group.AsEnumerable());
infoTitlesFromArtist = infoTitles.GroupBy(infoTitle => GetAlbumById(infoTitle.AlbumID).Artist.Name).ToDictionary(group => group.Key, group => group.AsEnumerable());
}
/// <summary>
/// Remplis les dictionnaire grâce aux stubs et à LINQ
/// </summary>
public void LoadDictionaries()
{
albumsFromArtist = albums.GroupBy(album => album.Artist.Name).ToDictionary(group => group.Key, group => group.AsEnumerable());
infoTitlesFromArtist = infoTitles.GroupBy(infoTitle => GetAlbumById(infoTitle.AlbumID).Artist.Name).ToDictionary(group => group.Key, group => group.AsEnumerable());
}
/// <summary>
/// Actualise le morceau en cours CurrentTitle avec le morceau suivant
/// </summary>
public void NextTitle()
{
if (currentPlaylist == null) return;
currentPlaying = currentPlaylist.NextTitle();
}
/// <summary>
/// Actualise le morceau en cours CurrentTitle avec le morceau suivant
/// </summary>
public void NextTitle()
{
if (currentPlaylist == null) return;
currentPlaying = currentPlaylist.NextTitle();
}
/// <summary>
/// Actualise le morceau en cours CurrentTitle avec le morceau précédent
/// </summary>
public void PreviousTitle()
{
if (CurrentPlaying == null) return;
currentPlaying = currentPlaylist.PreviousTitle();
}
/// <summary>
/// Actualise le morceau en cours CurrentTitle avec le morceau précédent
/// </summary>
public void PreviousTitle()
{
if (CurrentPlaying == null) return;
currentPlaying = currentPlaylist.PreviousTitle();
}
/// <summary>
/// Permet de connaître le titre en cours
/// </summary>
/// <returns>Retourne le titre actuel</returns>
public CustomTitle CurrentTitle()
{
if (CurrentPlaylist == null) return null;
return currentPlaylist.GetCurrentTitle();
}
/// <summary>
/// Permet de connaître le titre en cours
/// </summary>
/// <returns>Retourne le titre actuel</returns>
public CustomTitle CurrentTitle()
{
if (CurrentPlaylist == null) return null;
return currentPlaylist.GetCurrentTitle();
}
/// <summary>
/// Permet d'activer/désactiver l'option de boucle
/// </summary>
public void Loop()
{
if (CurrentPlaylist == null) return;
currentPlaylist.LoopTitle = !currentPlaylist.LoopTitle;
}
/// <summary>
/// Permet d'activer/désactiver l'option de boucle
/// </summary>
public void Loop()
{
if (CurrentPlaylist == null) return;
currentPlaylist.LoopTitle = !currentPlaylist.LoopTitle;
}
/// <summary>
/// Permet d'activer/désactiver l'option de l'aléatoire
/// </summary>
public void Shuffle()
{
if (CurrentPlaylist == null) return;
currentPlaylist.Shuffle = !currentPlaylist.Shuffle;
}
/// <summary>
/// Permet d'activer/désactiver l'option de l'aléatoire
/// </summary>
public void Shuffle()
{
if (CurrentPlaylist == null) return;
currentPlaylist.Shuffle = !currentPlaylist.Shuffle;
}
/// <summary>
/// Permet d'ajouter un Album à l'application
/// </summary>
/// <param name="album">Album à ajouter</param>
public void AddAlbum(Album album)
{
if (GetAlbumByName(album.Name) != null) return;
DataManager.AddAlbum(album);
albums = DataManager.GetAlbums();
}
/// <summary>
/// Permet d'ajouter un Album à l'application
/// </summary>
/// <param name="album">Album à ajouter</param>
public void AddAlbum(Album album)
{
if (GetAlbumByName(album.Name) != null) return;
DataManager.AddAlbum(album);
albums = DataManager.GetAlbums();
}
/// <summary>
/// Permet d'ajouter un CustomTitle à l'application
/// </summary>
/// <param name="title">CustomTitle à ajouter</param>
public void AddCustomTitle(CustomTitle title)
{
if (GetInfoTitleByName(title.Name) != null) return;
DataManager.AddCustomTitle(title);
customTitles = DataManager.GetCustomTitles();
}
/// <summary>
/// Permet d'ajouter un CustomTitle à l'application
/// </summary>
/// <param name="title">CustomTitle à ajouter</param>
public void AddCustomTitle(CustomTitle title)
{
if (GetInfoTitleByName(title.Name) != null) return;
DataManager.AddCustomTitle(title);
customTitles = DataManager.GetCustomTitles();
}
/// <summary>
/// Permet d'ajouter un InfoTitle à l'application
/// </summary>
/// <param name="title">InfoTitle à ajouter</param>
public void AddInfoTitle(InfoTitle title)
{
if (GetInfoTitleByName(title.Name) != null) return;
DataManager.AddInfoTitle(title);
infoTitles = DataManager.GetInfoTitles();
}
/// <summary>
/// Permet d'ajouter un InfoTitle à l'application
/// </summary>
/// <param name="title">InfoTitle à ajouter</param>
public void AddInfoTitle(InfoTitle title)
{
if (GetInfoTitleByName(title.Name) != null) return;
DataManager.AddInfoTitle(title);
infoTitles = DataManager.GetInfoTitles();
}
/// <summary>
/// Permet d'ajouter une Playlist à l'application
/// </summary>
/// <param name="playlist">Playlist à ajouter</param>
public void AddPlaylist(Playlist playlist)
{
if (GetPlaylistByName(playlist.Name) != null) return;
DataManager.AddPlaylist(playlist);
playlists = DataManager.GetPlaylists();
}
/// <summary>
/// Permet d'ajouter une Playlist à l'application
/// </summary>
/// <param name="playlist">Playlist à ajouter</param>
public void AddPlaylist(Playlist playlist)
{
if (GetPlaylistByName(playlist.Name) != null) return;
DataManager.AddPlaylist(playlist);
playlists = DataManager.GetPlaylists();
}
/// <summary>
/// Permet d'ajouter un Artist à l'application
/// </summary>
/// <param name="artist">Artist à ajouter</param>
public void AddArtist(Artist artist)
{
if (GetArtistByName(artist.Name) != null) return;
DataManager.AddArtist(artist);
artists = DataManager.GetArtists();
}
/// <summary>
/// Permet d'ajouter un Artist à l'application
/// </summary>
/// <param name="artist">Artist à ajouter</param>
public void AddArtist(Artist artist)
{
if (GetArtistByName(artist.Name) != null) return;
DataManager.AddArtist(artist);
artists = DataManager.GetArtists();
}
/// <summary>
/// Permet de retirer un Album de l'application
/// </summary>
/// <param name="album">Album à retirer</param>
public void RemoveAlbum(Album album)
{
DataManager.RemoveAlbum(album);
albums = DataManager.GetAlbums();
}
/// <summary>
/// Permet de retirer un Album de l'application
/// </summary>
/// <param name="album">Album à retirer</param>
public void RemoveAlbum(Album album)
{
DataManager.RemoveAlbum(album);
albums = DataManager.GetAlbums();
}
/// <summary>
/// Permet de retirer un CustomTitle de l'application
/// </summary>
/// <param name="title">CustomTitle à retirer</param>
public void RemoveCustomTitle(CustomTitle title)
{
DataManager.RemoveCustomTitle(title);
customTitles = DataManager.GetCustomTitles();
}
/// <summary>
/// Permet de retirer un CustomTitle de l'application
/// </summary>
/// <param name="title">CustomTitle à retirer</param>
public void RemoveCustomTitle(CustomTitle title)
{
DataManager.RemoveCustomTitle(title);
customTitles = DataManager.GetCustomTitles();
}
/// <summary>
/// Permet de retirer un InfoTitle de l'application
/// </summary>
/// <param name="title">InfoTitle à retirer</param>
public void RemoveInfoTitle(InfoTitle title)
{
DataManager.RemoveInfoTitle(title);
infoTitles = DataManager.GetInfoTitles();
}
/// <summary>
/// Permet de retirer un InfoTitle de l'application
/// </summary>
/// <param name="title">InfoTitle à retirer</param>
public void RemoveInfoTitle(InfoTitle title)
{
DataManager.RemoveInfoTitle(title);
infoTitles = DataManager.GetInfoTitles();
}
/// <summary>
/// Permet de retirer une Playlist de l'application
/// </summary>
/// <param name="playlist">Playlist à retirer</param>
public void RemovePlaylist(Playlist playlist)
{
DataManager.RemovePlaylist(playlist);
playlists = DataManager.GetPlaylists();
}
/// <summary>
/// Permet de retirer une Playlist de l'application
/// </summary>
/// <param name="playlist">Playlist à retirer</param>
public void RemovePlaylist(Playlist playlist)
{
DataManager.RemovePlaylist(playlist);
playlists = DataManager.GetPlaylists();
}
/// <summary>
/// Permet d'obtenir la liste des objets Playlist de l'application
/// </summary>
/// <returns>Reourne la liste des objets Playlist de l'application</returns>
public ObservableCollection<Playlist> GetPlaylists()
{
return DataManager.GetPlaylists();
}
/// <summary>
/// Permet d'obtenir la liste des objets Playlist de l'application
/// </summary>
/// <returns>Reourne la liste des objets Playlist de l'application</returns>
public ObservableCollection<Playlist> GetPlaylists()
{
return DataManager.GetPlaylists();
}
/// <summary>
/// Permet d'obtenir la liste des objets Album de l'application
/// </summary>
/// <returns>Reourne la liste des objets Album de l'application</returns>
public ObservableCollection<Album> GetAlbums()
{
return DataManager.GetAlbums();
}
/// <summary>
/// Permet d'obtenir la liste des objets Album de l'application
/// </summary>
/// <returns>Reourne la liste des objets Album de l'application</returns>
public ObservableCollection<Album> GetAlbums()
{
return DataManager.GetAlbums();
}
/// <summary>
/// Permet d'obtenir la liste des objets CustomTitle de l'application
/// </summary>
/// <returns>Reourne la liste des objets CustomTitle de l'application</returns>
public ObservableCollection<CustomTitle> GetCustomTitles()
{
return DataManager.GetCustomTitles();
}
/// <summary>
/// Permet d'obtenir la liste des objets CustomTitle de l'application
/// </summary>
/// <returns>Reourne la liste des objets CustomTitle de l'application</returns>
public ObservableCollection<CustomTitle> GetCustomTitles()
{
return DataManager.GetCustomTitles();
}
/// <summary>
/// Permet d'obtenir la liste des objets InfoTitle de l'application
/// </summary>
/// <returns>Reourne la liste des objets InfoTitle de l'application</returns>
public ObservableCollection<InfoTitle> GetInfoTitles()
{
return DataManager.GetInfoTitles();
}
/// <summary>
/// Permet d'obtenir la liste des objets InfoTitle de l'application
/// </summary>
/// <returns>Reourne la liste des objets InfoTitle de l'application</returns>
public ObservableCollection<InfoTitle> GetInfoTitles()
{
return DataManager.GetInfoTitles();
}
/// <summary>
/// Permet d'obtenir la liste des objets Artist de l'application
/// </summary>
/// <returns>Reourne la liste des objets Artist de l'application</returns>
public IEnumerable<Artist> GetArtists()
{
return DataManager.GetArtists();
}
/// <summary>
/// Permet d'obtenir la liste des objets Artist de l'application
/// </summary>
/// <returns>Reourne la liste des objets Artist de l'application</returns>
public IEnumerable<Artist> GetArtists()
{
return DataManager.GetArtists();
}
/// <summary>
/// Permet de charger l'état sauvegardé précédemment dans l'application
/// </summary>
public void LoadSerialization()
{
DataManager.LoadSerialization();
}
/// <summary>
/// Permet de charger l'état sauvegardé précédemment dans l'application
/// </summary>
public void LoadSerialization()
{
DataManager.LoadSerialization();
}
/// <summary>
/// Permet de sauvegarder l'état de l'application
/// </summary>
public void SaveSerialization()
{
DataManager.SaveSerialization();
}
/// <summary>
/// Permet de sauvegarder l'état de l'application
/// </summary>
public void SaveSerialization()
{
DataManager.SaveSerialization();
}
/// <summary>
/// Permet d'obtenir une Playlist selon son nom
/// </summary>
/// <param name="name">Nom de la Playlist</param>
/// <returns>Retourne la Playlist correspondant au nom donné en paramètre</returns>
public Playlist GetPlaylistByName(string name)
{
return DataManager.GetPlaylistByName(name);
}
/// <summary>
/// Permet d'obtenir une Playlist selon son nom
/// </summary>
/// <param name="name">Nom de la Playlist</param>
/// <returns>Retourne la Playlist correspondant au nom donné en paramètre</returns>
public Playlist GetPlaylistByName(string name)
{
return DataManager.GetPlaylistByName(name);
}
/// <summary>
/// Permet d'obtenir un Artist selon son nom
/// </summary>
/// <param name="name">Nom de l'Artist</param>
/// <returns>Retourne l'Artist correspondant au nom donné en paramètre</returns>
public Artist GetArtistByName(string name)
{
return DataManager.GetArtistByName(name);
}
/// <summary>
/// Permet d'obtenir un Artist selon son nom
/// </summary>
/// <param name="name">Nom de l'Artist</param>
/// <returns>Retourne l'Artist correspondant au nom donné en paramètre</returns>
public Artist GetArtistByName(string name)
{
return DataManager.GetArtistByName(name);
}
/// <summary>
/// Permet d'obtenir un CustomTitle selon son chemin d'accès
/// </summary>
/// <param name="path">Chemin d'accès du CustomTitle</param>
/// <returns>Retourne le CustomTitle correspondant au chemin d'accès donné en paramètre</returns>
public CustomTitle GetCustomTitleByPath(string path)
{
return DataManager.GetCustomTitleByPath(path);
}
/// <summary>
/// Permet d'obtenir un CustomTitle selon son chemin d'accès
/// </summary>
/// <param name="path">Chemin d'accès du CustomTitle</param>
/// <returns>Retourne le CustomTitle correspondant au chemin d'accès donné en paramètre</returns>
public CustomTitle GetCustomTitleByPath(string path)
{
return DataManager.GetCustomTitleByPath(path);
}
/// <summary>
/// Permet d'obtenir un InfoTitle selon son nom
/// </summary>
/// <param name="name">Nom de l'InfoTitle</param>
/// <returns>Retourne l'InfoTitle correspondant au nom donné en paramètre</returns>
public InfoTitle GetInfoTitleByName(string name)
{
return DataManager.GetInfoTitleByName(name);
}
/// <summary>
/// Permet d'obtenir un InfoTitle selon son nom
/// </summary>
/// <param name="name">Nom de l'InfoTitle</param>
/// <returns>Retourne l'InfoTitle correspondant au nom donné en paramètre</returns>
public InfoTitle GetInfoTitleByName(string name)
{
return DataManager.GetInfoTitleByName(name);
}
/// <summary>
/// Permet d'obtenir un Album selon son nom
/// </summary>
/// <param name="name">Nom de l'Album</param>
/// <returns>Retourne l'Album correspondant au nom donné en paramètre</returns>
public Album GetAlbumByName(string name)
{
return DataManager.GetAlbumByName(name);
}
/// <summary>
/// Permet d'obtenir un Album selon son nom
/// </summary>
/// <param name="name">Nom de l'Album</param>
/// <returns>Retourne l'Album correspondant au nom donné en paramètre</returns>
public Album GetAlbumByName(string name)
{
return DataManager.GetAlbumByName(name);
}
/// <summary>
/// Permet d'obtenir un Album selon son ID
/// </summary>
/// <param name="id">ID de l'Album</param>
/// <returns>Retourne l'Album correspondant au ID donné en paramètre</returns>
public Album GetAlbumById(long id)
{
return DataManager.GetAlbumById(id);
}
/// <summary>
/// Permet d'obtenir un Album selon son ID
/// </summary>
/// <param name="id">ID de l'Album</param>
/// <returns>Retourne l'Album correspondant au ID donné en paramètre</returns>
public Album GetAlbumById(long id)
{
return DataManager.GetAlbumById(id);
}
/// <summary>
/// Permet la notification, et donc l'actualisation des objets connectés à l'événement lorsque la méthode est appelée
/// </summary>
/// <param name="propertyName">Nom de la propriété modifiée</param>
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
/// <summary>
/// Permet la notification, et donc l'actualisation des objets connectés à l'événement lorsque la méthode est appelée
/// </summary>
/// <param name="propertyName">Nom de la propriété modifiée</param>
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}

@ -18,8 +18,4 @@
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'tizen'">6.5</SupportedOSPlatformVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Plugin.Maui.Audio" Version="1.0.0" />
</ItemGroup>
</Project>

@ -1,9 +1,8 @@
using System;
namespace Model
namespace Model;
// All the code in this file is only included on Tizen.
public class PlatformClass1
{
// All the code in this file is only included on Tizen.
public class PlatformClass1
{
}
}

@ -4,327 +4,328 @@ using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Security.Cryptography;
namespace Model;
public class Playlist : INotifyPropertyChanged
namespace Model
{
/// <remarks>
/// Classe Playlist
/// </remarks>
public event PropertyChangedEventHandler PropertyChanged;
public string Name
public class Playlist : INotifyPropertyChanged
{
get => name;
set
public event PropertyChangedEventHandler PropertyChanged;
public string Name
{
if (string.IsNullOrEmpty(value) || value.Length > Manager.MAX_NAME_LENGTH)
get => name;
set
{
return;
if (string.IsNullOrEmpty(value) || value.Length > Manager.MAX_NAME_LENGTH)
{
return;
}
name = value;
OnPropertyChanged();
}
name = value;
OnPropertyChanged();
}
}
private string name = Manager.DEFAULT_NAME;
public string Description
{
get => description;
private string name = Manager.DEFAULT_NAME;
set
public string Description
{
if (value != null && value.Length < Manager.MAX_DESCRIPTION_LENGTH)
get => description;
set
{
description = value;
if (value != null && value.Length < Manager.MAX_DESCRIPTION_LENGTH)
{
description = value;
}
OnPropertyChanged();
}
OnPropertyChanged();
}
}
private string description = Manager.DEFAULT_DESC;
private string description = Manager.DEFAULT_DESC;
public ObservableCollection<CustomTitle> Titles
{
get
public ObservableCollection<CustomTitle> Titles
{
return titles;
}
private set
{
titles = value;
OnPropertyChanged();
}
}
private ObservableCollection<CustomTitle> titles = new ObservableCollection<CustomTitle>();
public string ImageURL
{
get => imageURL;
set
{
if (value == null || !value.Contains('.'))
get
{
value = "none.png";
imageURL = value;
return titles;
}
else if (value.Contains('.'))
private set
{
imageURL = value;
titles = value;
OnPropertyChanged();
}
OnPropertyChanged();
}
}
private string imageURL = Manager.DEFAULT_URL;
public int Index
{
get => index;
private ObservableCollection<CustomTitle> titles = new ObservableCollection<CustomTitle>();
set
public string ImageURL
{
if (value < titles.Count)
get => imageURL;
set
{
index = value;
if (value == null || !value.Contains('.'))
{
value = "none.png";
imageURL = value;
}
else if (value.Contains('.'))
{
imageURL = value;
}
OnPropertyChanged();
}
else
}
private string imageURL = Manager.DEFAULT_URL;
public int Index
{
get => index;
set
{
index = 0;
if (value < titles.Count)
{
index = value;
}
else
{
index = 0;
}
}
}
}
private int index = -1;
private int index = -1;
public bool Shuffle { get; set; } = false;
public bool Shuffle { get; set; } = false;
public bool LoopTitle { get; set; } = false;
public bool LoopTitle { get; set; } = false;
private readonly List<int> played = new List<int>();
private readonly List<int> played = new List<int>();
public IEnumerable<int> Played
{
get
public IEnumerable<int> Played
{
return new List<int>(played);
get
{
return new List<int>(played);
}
}
}
public bool IsSubMenuVisible
{
get => isSubMenuVisible;
set
public bool IsSubMenuVisible
{
if (isSubMenuVisible != value)
get => isSubMenuVisible;
set
{
isSubMenuVisible = value;
if (isSubMenuVisible != value)
{
isSubMenuVisible = value;
}
OnPropertyChanged(nameof(IsSubMenuVisible));
}
OnPropertyChanged(nameof(IsSubMenuVisible));
}
}
private bool isSubMenuVisible;
/// <summary>
/// Constructeur de la classe Playlist
/// </summary>
/// <param name="nom">Nom de la Playlist</param>
/// <param name="description">Description de la Playlist</param>
/// <param name="imageURL">Chemin d'accès de l'image de la Playlist</param>
public Playlist(string nom, string description, string imageURL)
{
Name = nom;
Description = description;
ImageURL = imageURL;
}
/// <summary>
/// Constructeur par défaut de la Playlist
/// </summary>
public Playlist() { }
/// <summary>
/// Ajoute un titre à la Playlist
/// </summary>
/// <param name="morceau">Morceau à ajouter à la Playlist</param>
public void AddTitle(CustomTitle morceau)
{
titles.Add(morceau);
}
private bool isSubMenuVisible;
/// <summary>
/// Supprime un titre de la playlist
/// </summary>
/// <param name="morceau">Morceau à supprimer</param>
public void RemoveTitle(CustomTitle morceau)
{
titles.Remove(morceau);
}
/// <summary>
/// Permet de connaître le prochain morceau à jouer dans la playlist
/// </summary>
/// <returns>Retourne le CustomTitle suivant selon les options indiquées par l'utilisateur</returns>
/// Vérifie s'il y a des morceaux dans la playlist, puis vérifie si l'option de boucle du morceau est activé.
/// Si elle est activée, cela renvoie le même morceau. Sinon, si l'option aléatoire N'est PAS activée, cela renvoie
/// simplement le morceau à la suite dans la liste des titres de la playlist. Sinon, l'option aléatoire est activée, cela
/// appelle donc une méthode de génération d'un index aléatoire pour avoir un morceau aléatoire dans la liste de la playlist.
public CustomTitle NextTitle()
{
if (titles.Count < 1) return null;
if (LoopTitle)
/// <summary>
/// Constructeur de la classe Playlist
/// </summary>
/// <param name="nom">Nom de la Playlist</param>
/// <param name="description">Description de la Playlist</param>
/// <param name="imageURL">Chemin d'accès de l'image de la Playlist</param>
public Playlist(string nom, string description, string imageURL)
{
return GetCurrentTitle();
Name = nom;
Description = description;
ImageURL = imageURL;
}
if (!Shuffle)
{
Index++;
played.Add(Index);
return GetCurrentTitle();
}
else
/// <summary>
/// Constructeur par défaut de la Playlist
/// </summary>
public Playlist() { }
/// <summary>
/// Ajoute un titre à la Playlist
/// </summary>
/// <param name="morceau">Morceau à ajouter à la Playlist</param>
public void AddTitle(CustomTitle morceau)
{
Index = RandomGenerator(titles.Count);
played.Add(Index);
return GetCurrentTitle();
titles.Add(morceau);
}
}
/// <summary>
/// Permet de connaître le titre précédentà jouer dans la playlist
/// </summary>
/// <returns>Retourne le CustomTitle précédent selon les options indiquées par l'utilisateur</returns>
/// Vérifie s'il y a des morceaux dans la playlist, puis vérifie si l'option de boucle du morceau est activé.
/// Si elle est activée, cela renvoie le même morceau. Sinon, si l'option aléatoire N'est PAS activée, cela renvoie
/// simplement le morceau précédent celui actuel dans la liste des titres de la playlist. Si le morceau actuel est le
/// premier, le morceau précédent est le dernier de la playlist.
/// Sinon, l'option aléatoire est activée, la liste des morceaux jouée est analysée. Si elle est vide, le morceau
/// actuel est retourné. Sinon, cela renvoie le dernier élément de la liste des morceaux joués. A noter que cette liste ne
/// stocke que les index des titres présents dans la playlist.
public CustomTitle PreviousTitle()
{
if (titles.Count < 1) return null;
if (LoopTitle)
/// <summary>
/// Supprime un titre de la playlist
/// </summary>
/// <param name="morceau">Morceau à supprimer</param>
public void RemoveTitle(CustomTitle morceau)
{
return GetCurrentTitle();
titles.Remove(morceau);
}
if(!Shuffle)
/// <summary>
/// Permet de connaître le prochain morceau à jouer dans la playlist
/// </summary>
/// <returns>Retourne le CustomTitle suivant selon les options indiquées par l'utilisateur</returns>
/// Vérifie s'il y a des morceaux dans la playlist, puis vérifie si l'option de boucle du morceau est activé.
/// Si elle est activée, cela renvoie le même morceau. Sinon, si l'option aléatoire N'est PAS activée, cela renvoie
/// simplement le morceau à la suite dans la liste des titres de la playlist. Sinon, l'option aléatoire est activée, cela
/// appelle donc une méthode de génération d'un index aléatoire pour avoir un morceau aléatoire dans la liste de la playlist.
public CustomTitle NextTitle()
{
if(Index != 0)
if (titles.Count < 1) return null;
if (LoopTitle)
{
Index--;
played.RemoveAt(played.Count - 1);
return GetCurrentTitle();
}
if (!Shuffle)
{
Index++;
played.Add(Index);
return GetCurrentTitle();
}
else
{
Index = RandomGenerator(titles.Count);
played.Add(Index);
return GetCurrentTitle();
}
}
else
/// <summary>
/// Permet de connaître le titre précédentà jouer dans la playlist
/// </summary>
/// <returns>Retourne le CustomTitle précédent selon les options indiquées par l'utilisateur</returns>
/// Vérifie s'il y a des morceaux dans la playlist, puis vérifie si l'option de boucle du morceau est activé.
/// Si elle est activée, cela renvoie le même morceau. Sinon, si l'option aléatoire N'est PAS activée, cela renvoie
/// simplement le morceau précédent celui actuel dans la liste des titres de la playlist. Si le morceau actuel est le
/// premier, le morceau précédent est le dernier de la playlist.
/// Sinon, l'option aléatoire est activée, la liste des morceaux jouée est analysée. Si elle est vide, le morceau
/// actuel est retourné. Sinon, cela renvoie le dernier élément de la liste des morceaux joués. A noter que cette liste ne
/// stocke que les index des titres présents dans la playlist.
public CustomTitle PreviousTitle()
{
if (!played.Any())
if (titles.Count < 1) return null;
if (LoopTitle)
{
return GetCurrentTitle();
}
if (!Shuffle)
{
if (Index != 0)
{
Index--;
played.RemoveAt(played.Count - 1);
return GetCurrentTitle();
}
else
{
return GetCurrentTitle();
}
}
else
{
if (!played.Any())
{
return GetCurrentTitle();
}
Index = played[played.Count - 1];
played.RemoveAt(played.Count - 1);
return GetCurrentTitle();
}
Index = played[played.Count - 1];
played.RemoveAt(played.Count - 1);
return GetCurrentTitle();
}
}
/// <summary>
/// Permet de connaître le morceau actuel de la playlist.
/// </summary>
/// <returns>Retourne le morceau actuel de la playlist</returns>
/// Tout d'abord, des tests de vérification sur l'index sont effectués pour éviter les bugs. Puis, cela renvoie le morceau
/// à l'index de la playlist dans la liste.
public CustomTitle GetCurrentTitle()
{
if (Index < 0) Index = 0;
if (Index < titles.Count)
/// <summary>
/// Permet de connaître le morceau actuel de la playlist.
/// </summary>
/// <returns>Retourne le morceau actuel de la playlist</returns>
/// Tout d'abord, des tests de vérification sur l'index sont effectués pour éviter les bugs. Puis, cela renvoie le morceau
/// à l'index de la playlist dans la liste.
public CustomTitle GetCurrentTitle()
{
return titles[Index];
if (Index < 0) Index = 0;
if (Index < titles.Count)
{
return titles[Index];
}
else
{
return null;
}
}
else
/// <summary>
/// Fonction qui permet de déterminer si deux objets Playlist sont égaux
/// </summary>
/// <param name="obj"></param>
/// <returns>Un booléen indiquant si l'objet est égal</returns>
public override bool Equals(object obj)
{
return null;
if (obj is null) return false;
if (obj.GetType() != typeof(Playlist)) return false;
if (obj is Playlist playlist && Name == playlist.Name) return true;
else return false;
}
}
/// <summary>
/// Fonction qui permet de déterminer si deux objets Playlist sont égaux
/// </summary>
/// <param name="obj"></param>
/// <returns>Un booléen indiquant si l'objet est égal</returns>
public override bool Equals(object obj)
{
if (obj is null) return false;
if (obj.GetType() != typeof(Playlist)) return false;
if (obj is Playlist playlist && Name == playlist.Name) return true;
else return false;
}
/// <summary>
/// Permet de déterminer le hash d'un objet Playlist
/// </summary>
/// <returns>Hash de l'attribut Name</returns>
public override int GetHashCode()
{
return Name.GetHashCode();
}
/// <summary>
/// Permet de déterminer le hash d'un objet Playlist
/// </summary>
/// <returns>Hash de l'attribut Name</returns>
public override int GetHashCode()
{
return Name.GetHashCode();
}
/// <summary>
/// Permet de convertir un objet Playlist en string
/// </summary>
/// <returns>Une nouvelle chaîne caractères contenant le nom de la Playlist</returns>
public override string ToString()
{
return $"Name : {Name}";
}
/// <summary>
/// Permet de convertir un objet Playlist en string
/// </summary>
/// <returns>Une nouvelle chaîne caractères contenant le nom de la Playlist</returns>
public override string ToString()
{
return $"Name : {Name}";
}
/// <summary>
/// Permet de générer un nombre entre 0 et n
/// </summary>
/// <param name="n">Limite supérieure du nombre à générer</param>
/// <returns>Retourne un nombre entre 0 et n</returns>
/// Cette méthode est effectuée via RandomNumberGenerator afin d'obtenir un aléatoire moins prévisible.
static int RandomGenerator(int n)
{
RandomNumberGenerator rng = RandomNumberGenerator.Create();
byte[] randomBytes = new byte[4];
rng.GetBytes(randomBytes);
uint randomNumber = BitConverter.ToUInt32(randomBytes, 0);
return (int)(randomNumber % n) + 1;
}
/// <summary>
/// Permet de générer un nombre entre 0 et n
/// </summary>
/// <param name="n">Limite supérieure du nombre à générer</param>
/// <returns>Retourne un nombre entre 0 et n</returns>
/// Cette méthode est effectuée via RandomNumberGenerator afin d'obtenir un aléatoire moins prévisible.
static int RandomGenerator(int n)
{
RandomNumberGenerator rng = RandomNumberGenerator.Create();
byte[] randomBytes = new byte[4];
rng.GetBytes(randomBytes);
uint randomNumber = BitConverter.ToUInt32(randomBytes, 0);
return (int)(randomNumber % n) + 1;
}
/// <summary>
/// Vérifie si la Playlist contient un certain CustomTitle
/// </summary>
/// <param name="customTitle">CustomTitle à vérifier</param>
/// <returns>Booléen True si le CustomTitle est contenu dans la Playlist, False sinon</returns>
public bool HasCustomTitle(CustomTitle customTitle)
{
foreach(CustomTitle custom in Titles)
/// <summary>
/// Vérifie si la Playlist contient un certain CustomTitle
/// </summary>
/// <param name="customTitle">CustomTitle à vérifier</param>
/// <returns>Booléen True si le CustomTitle est contenu dans la Playlist, False sinon</returns>
public bool HasCustomTitle(CustomTitle customTitle)
{
if(custom == customTitle) return true;
foreach (CustomTitle custom in Titles)
{
if (custom == customTitle) return true;
}
return false;
}
return false;
}
/// <summary>
/// Permet la notification, et donc l'actualisation des objets connectés à l'événement lorsque la méthode est appelée
/// </summary>
/// <param name="propertyName">Nom de la propriété modifiée</param>
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
/// <summary>
/// Permet la notification, et donc l'actualisation des objets connectés à l'événement lorsque la méthode est appelée
/// </summary>
/// <param name="propertyName">Nom de la propriété modifiée</param>
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}

File diff suppressed because it is too large Load Diff

@ -1,93 +1,93 @@
using System.Collections.ObjectModel;
using System.Linq;
namespace Model.Stub;
public class StubAlbum
namespace Model.Stub
{
public StubArtist StubArtist
public class StubAlbum
{
get
public StubArtist StubArtist
{
return stubArtist;
get
{
return stubArtist;
}
}
}
private readonly StubArtist stubArtist;
private readonly StubArtist stubArtist;
public ObservableCollection<Album> Albums
{
get => albums;
}
public ObservableCollection<Album> Albums
{
get => albums;
}
private readonly ObservableCollection<Album> albums;
private readonly ObservableCollection<Album> albums;
/// <summary>
/// Constructeur de la classe StubAlbum
/// </summary>
public StubAlbum()
{
stubArtist = new StubArtist();
albums = new ObservableCollection<Album>()
/// <summary>
/// Constructeur de la classe StubAlbum
/// </summary>
public StubAlbum()
{
new Album("Adios Bahamas", "album1.jpg", StubArtist.GetArtistByName("Népal") ?? new Artist("Népal"), "Album post-mortem qui signé également le dernier de l'artiste", "Sortie : 2020"),
new Album("445e Nuit", "album2.jpg", StubArtist.GetArtistByName("Népal") ?? new Artist("Népal"), "", "Sortie : 2017\n8 titres - 24 min"),
new Album("Fenêtre Sur Rue", "album3.jpg", StubArtist.GetArtistByName("Hugo TSR") ?? new Artist("Hugo TSR"), "", "Sortie : 2012\n14 titres - 46 min"),
new Album("Temps Mort", "album4.jpg", StubArtist.GetArtistByName("Booba") ?? new Artist("Booba"), "Premier album de Booba", "Sortie : 2002\n14 titres - 57 min"),
new Album("Opéra Puccino", "album5.jpg", StubArtist.GetArtistByName("Oxmo Puccino") ?? new Artist("Oxmo Puccino"), "", "Sortie : 1998\n18 titres - 1h08min"),
new Album("L'école du micro d'argent", "album6.jpg", StubArtist.GetArtistByName("IAM") ?? new Artist("IAM"), "", "Sortie : 1997\n16 titres - 1h13min"),
new Album("Deux Frères", "album7.png", StubArtist.GetArtistByName("PNL") ?? new Artist("PNL"), "", "Sortie : 2019\n22 titres"),
new Album("Dans la légende", "album8.jpg", StubArtist.GetArtistByName("PNL") ?? new Artist("PNL"), "", "Sortie : 2016\n16 titres - 1h06"),
new Album("Night Visions", "album9.jpg", StubArtist.GetArtistByName("Imagine Dragons") ?? new Artist("Imagine Dragons"), "", ""),
new Album("Smoke & Mirrors", "album10.jpg", StubArtist.GetArtistByName("Imagine Dragons") ?? new Artist("Imagine Dragons"), "", ""),
new Album("Evolve", "album11.jpg", StubArtist.GetArtistByName("Imagine Dragons") ?? new Artist("Imagine Dragons"), "", ""),
new Album("Origins", "album12.jpg", StubArtist.GetArtistByName("Imagine Dragons") ?? new Artist("Imagine Dragons"), "", ""),
new Album("Mercury Act 1", "album13.jpg", StubArtist.GetArtistByName("Imagine Dragons") ?? new Artist("Imagine Dragons"), "", ""),
new Album("Mercury Act 2", "album14.jpg", StubArtist.GetArtistByName("Imagine Dragons") ?? new Artist("Imagine Dragons"), "", "")
};
}
stubArtist = new StubArtist();
albums = new ObservableCollection<Album>()
{
new Album("Adios Bahamas", "album1.jpg", StubArtist.GetArtistByName("Népal") ?? new Artist("Népal"), "Album post-mortem qui signé également le dernier de l'artiste", "Sortie : 2020"),
new Album("445e Nuit", "album2.jpg", StubArtist.GetArtistByName("Népal") ?? new Artist("Népal"), "", "Sortie : 2017\n8 titres - 24 min"),
new Album("Fenêtre Sur Rue", "album3.jpg", StubArtist.GetArtistByName("Hugo TSR") ?? new Artist("Hugo TSR"), "", "Sortie : 2012\n14 titres - 46 min"),
new Album("Temps Mort", "album4.jpg", StubArtist.GetArtistByName("Booba") ?? new Artist("Booba"), "Premier album de Booba", "Sortie : 2002\n14 titres - 57 min"),
new Album("Opéra Puccino", "album5.jpg", StubArtist.GetArtistByName("Oxmo Puccino") ?? new Artist("Oxmo Puccino"), "", "Sortie : 1998\n18 titres - 1h08min"),
new Album("L'école du micro d'argent", "album6.jpg", StubArtist.GetArtistByName("IAM") ?? new Artist("IAM"), "", "Sortie : 1997\n16 titres - 1h13min"),
new Album("Deux Frères", "album7.png", StubArtist.GetArtistByName("PNL") ?? new Artist("PNL"), "", "Sortie : 2019\n22 titres"),
new Album("Dans la légende", "album8.jpg", StubArtist.GetArtistByName("PNL") ?? new Artist("PNL"), "", "Sortie : 2016\n16 titres - 1h06"),
new Album("Night Visions", "album9.jpg", StubArtist.GetArtistByName("Imagine Dragons") ?? new Artist("Imagine Dragons"), "", ""),
new Album("Smoke & Mirrors", "album10.jpg", StubArtist.GetArtistByName("Imagine Dragons") ?? new Artist("Imagine Dragons"), "", ""),
new Album("Evolve", "album11.jpg", StubArtist.GetArtistByName("Imagine Dragons") ?? new Artist("Imagine Dragons"), "", ""),
new Album("Origins", "album12.jpg", StubArtist.GetArtistByName("Imagine Dragons") ?? new Artist("Imagine Dragons"), "", ""),
new Album("Mercury Act 1", "album13.jpg", StubArtist.GetArtistByName("Imagine Dragons") ?? new Artist("Imagine Dragons"), "", ""),
new Album("Mercury Act 2", "album14.jpg", StubArtist.GetArtistByName("Imagine Dragons") ?? new Artist("Imagine Dragons"), "", "")
};
}
/// <summary>
/// Permet d'obtenir la liste des albums
/// </summary>
/// <returns>Retourne la liste des albums</returns>
public ObservableCollection<Album> GetAlbums()
{
return albums;
}
/// <summary>
/// Permet d'obtenir la liste des albums
/// </summary>
/// <returns>Retourne la liste des albums</returns>
public ObservableCollection<Album> GetAlbums()
{
return albums;
}
/// <summary>
/// Permet d'obtenir un album selon son nom
/// </summary>
/// <param name="name">Nom de l'album recherché</param>
/// <returns>Retourne l'album correspondant au nom donné en paramètre</returns>
public Album GetAlbumByName(string name)
{
foreach(Album album in albums)
/// <summary>
/// Permet d'obtenir un album selon son nom
/// </summary>
/// <param name="name">Nom de l'album recherché</param>
/// <returns>Retourne l'album correspondant au nom donné en paramètre</returns>
public Album GetAlbumByName(string name)
{
if (name == album.Name)
foreach (Album album in albums)
{
return album;
if (name == album.Name)
{
return album;
}
}
return null;
}
return null;
}
/// <summary>
/// Permet d'ajouter un album à la liste des albums
/// </summary>
/// <param name="album">Album à ajouter</param>
public void AddAlbum(Album album)
{
albums.Add(album);
}
/// <summary>
/// Permet d'ajouter un album à la liste des albums
/// </summary>
/// <param name="album">Album à ajouter</param>
public void AddAlbum(Album album)
{
albums.Add(album);
}
/// <summary>
/// Permet de retirer un album de la liste des albums
/// </summary>
/// <param name="album">Album à retirer</param>
public void RemoveAlbum(Album album)
{
albums.Remove(album);
/// <summary>
/// Permet de retirer un album de la liste des albums
/// </summary>
/// <param name="album">Album à retirer</param>
public void RemoveAlbum(Album album)
{
albums.Remove(album);
}
}
}
}

@ -1,72 +1,72 @@
namespace Model.Stub;
public class StubArtist
{
public List<Artist> Artists
namespace Model.Stub {
public class StubArtist
{
get => artists;
}
public List<Artist> Artists
{
get => artists;
}
private readonly List<Artist> artists;
private readonly List<Artist> artists;
/// <summary>
/// Constructeur de la classe StubArtist
/// </summary>
public StubArtist()
{
artists = new List<Artist>()
/// <summary>
/// Constructeur de la classe StubArtist
/// </summary>
public StubArtist()
{
new Artist("Imagine Dragons"),
new Artist("Népal"),
new Artist("Hugo TSR"),
new Artist("Booba"),
new Artist("Oxmo Puccino"),
new Artist("IAM"),
new Artist("PNL")
};
}
artists = new List<Artist>()
{
new Artist("Imagine Dragons"),
new Artist("Népal"),
new Artist("Hugo TSR"),
new Artist("Booba"),
new Artist("Oxmo Puccino"),
new Artist("IAM"),
new Artist("PNL")
};
}
/// <summary>
/// Permet d'obtenir la liste des artistes
/// </summary>
/// <returns>Retourne la liste des artistes</returns>
public List<Artist> GetArtists()
{
return artists;
}
/// <summary>
/// Permet d'obtenir la liste des artistes
/// </summary>
/// <returns>Retourne la liste des artistes</returns>
public List<Artist> GetArtists()
{
return artists;
}
/// <summary>
/// Permet d'obtenir un artiste selon son nom
/// </summary>
/// <param name="name">Nom de l'artiste recherché</param>
/// <returns>Retourne l'artiste correspondant au nom donné en paramètre</returns>
public Artist GetArtistByName(string name)
{
foreach (var artist in artists)
/// <summary>
/// Permet d'obtenir un artiste selon son nom
/// </summary>
/// <param name="name">Nom de l'artiste recherché</param>
/// <returns>Retourne l'artiste correspondant au nom donné en paramètre</returns>
public Artist GetArtistByName(string name)
{
if (artist.Name == name)
foreach (var artist in artists)
{
return artist;
if (artist.Name == name)
{
return artist;
}
}
return null;
}
return null;
}
/// <summary>
/// Permet d'ajouter un artiste à la liste des artistes
/// </summary>
/// <param name="artist">Artiste à ajouter</param>
public void AddArtist(Artist artist)
{
artists.Add(artist);
}
/// <summary>
/// Permet d'ajouter un artiste à la liste des artistes
/// </summary>
/// <param name="artist">Artiste à ajouter</param>
public void AddArtist(Artist artist)
{
artists.Add(artist);
}
/// <summary>
/// Permet de retirer un artiste de la liste des artistes
/// </summary>
/// <param name="artist">Artiste à retirer</param>
public void RemoveArtist(Artist artist)
{
artists.Remove(artist);
/// <summary>
/// Permet de retirer un artiste de la liste des artistes
/// </summary>
/// <param name="artist">Artiste à retirer</param>
public void RemoveArtist(Artist artist)
{
artists.Remove(artist);
}
}
}
}

@ -1,85 +1,86 @@
using System.Collections.ObjectModel;
namespace Model.Stub;
public class StubCustomTitle
namespace Model.Stub
{
public ObservableCollection<CustomTitle> CustomTitles
public class StubCustomTitle
{
get => customTitles;
}
private readonly ObservableCollection<CustomTitle> customTitles;
public ObservableCollection<CustomTitle> CustomTitles
{
get => customTitles;
}
/// <summary>
/// Constructeur de la classe StubCustomTitle
/// </summary>
public StubCustomTitle()
{
CustomTitle Custom1 = new CustomTitle("MaMusique", "mp3.png", "info1", "chemin1");
CustomTitle Custom2 = new CustomTitle("MusiqueGeniale", "wav.png", "info2", "chemin2");
CustomTitle Custom3 = new CustomTitle("custom3", "midi.png", "info3", "chemin3");
CustomTitle Custom4 = new CustomTitle("custom4", "ogg.png", "info4", "chemin4");
CustomTitle Custom5 = new CustomTitle("custom5", "mp3.png", "info5", "chemin5");
CustomTitle Custom6 = new CustomTitle("custom6", "mp3.png", "info6", "chemin6");
CustomTitle Custom7 = new CustomTitle("custom7", "wav.png", "info7", "chemin7");
CustomTitle Custom8 = new CustomTitle("custom8", "ogg.png", "info8", "chemin8");
CustomTitle Custom9 = new CustomTitle("custom9", "mp3.png", "info9", "chemin9");
CustomTitle Custom10 = new CustomTitle("custom10", "wav.png", "info10", "chemin10");
CustomTitle Custom11 = new CustomTitle("custom11", "mp3.png", "info11", "chemin11");
private readonly ObservableCollection<CustomTitle> customTitles;
customTitles = new ObservableCollection<CustomTitle>()
/// <summary>
/// Constructeur de la classe StubCustomTitle
/// </summary>
public StubCustomTitle()
{
Custom1, Custom2, Custom3, Custom4, Custom5, Custom6, Custom7, Custom8, Custom9, Custom10, Custom11
};
}
CustomTitle Custom1 = new CustomTitle("MaMusique", "mp3.png", "info1", "chemin1");
CustomTitle Custom2 = new CustomTitle("MusiqueGeniale", "wav.png", "info2", "chemin2");
CustomTitle Custom3 = new CustomTitle("custom3", "midi.png", "info3", "chemin3");
CustomTitle Custom4 = new CustomTitle("custom4", "ogg.png", "info4", "chemin4");
CustomTitle Custom5 = new CustomTitle("custom5", "mp3.png", "info5", "chemin5");
CustomTitle Custom6 = new CustomTitle("custom6", "mp3.png", "info6", "chemin6");
CustomTitle Custom7 = new CustomTitle("custom7", "wav.png", "info7", "chemin7");
CustomTitle Custom8 = new CustomTitle("custom8", "ogg.png", "info8", "chemin8");
CustomTitle Custom9 = new CustomTitle("custom9", "mp3.png", "info9", "chemin9");
CustomTitle Custom10 = new CustomTitle("custom10", "wav.png", "info10", "chemin10");
CustomTitle Custom11 = new CustomTitle("custom11", "mp3.png", "info11", "chemin11");
/// <summary>
/// Permet d'obtenir la liste des CustomTitle
/// </summary>
/// <returns>Retourne la liste des CustomTitle</returns>
public ObservableCollection<CustomTitle> GetCustomTitles()
{
return customTitles;
}
customTitles = new ObservableCollection<CustomTitle>()
{
Custom1, Custom2, Custom3, Custom4, Custom5, Custom6, Custom7, Custom8, Custom9, Custom10, Custom11
};
}
/// <summary>
/// Permet d'obtenir une liste de CustomTitle selon les noms donnés en paramètre
/// </summary>
/// <param name="names">Liste des noms des CustomTitle recherchés</param>
/// <returns>Retourne la liste des CustomTitle correspondant aux noms donnés en paramètre</returns>
public List<CustomTitle> GetCustomTitlesByNames(List<string> names)
{
List<CustomTitle> Customs = new List<CustomTitle>();
foreach(var name in names)
/// <summary>
/// Permet d'obtenir la liste des CustomTitle
/// </summary>
/// <returns>Retourne la liste des CustomTitle</returns>
public ObservableCollection<CustomTitle> GetCustomTitles()
{
foreach (var title in customTitles)
return customTitles;
}
/// <summary>
/// Permet d'obtenir une liste de CustomTitle selon les noms donnés en paramètre
/// </summary>
/// <param name="names">Liste des noms des CustomTitle recherchés</param>
/// <returns>Retourne la liste des CustomTitle correspondant aux noms donnés en paramètre</returns>
public List<CustomTitle> GetCustomTitlesByNames(List<string> names)
{
List<CustomTitle> Customs = new List<CustomTitle>();
foreach (var name in names)
{
if (name == title.Name)
foreach (var title in customTitles)
{
Customs.Add(title);
if (name == title.Name)
{
Customs.Add(title);
}
}
}
return Customs;
}
return Customs;
}
/// <summary>
/// Permet d'ajouter un CustomTitle à la liste des CustomTitle
/// </summary>
/// <param name="customTitle">CustomTitle à ajouter</param>
public void AddCustomTitle(CustomTitle customTitle)
{
customTitles.Add(customTitle);
}
/// <summary>
/// Permet d'ajouter un CustomTitle à la liste des CustomTitle
/// </summary>
/// <param name="customTitle">CustomTitle à ajouter</param>
public void AddCustomTitle(CustomTitle customTitle)
{
customTitles.Add(customTitle);
}
/// <summary>
/// Permet de retirer un CustomTitle de la liste des CustomTitle
/// </summary>
/// <param name="customTitle">CustomTitle à retirer</param>
public void RemoveCustomTitle(CustomTitle customTitle)
{
customTitles.Remove(customTitle);
/// <summary>
/// Permet de retirer un CustomTitle de la liste des CustomTitle
/// </summary>
/// <param name="customTitle">CustomTitle à retirer</param>
public void RemoveCustomTitle(CustomTitle customTitle)
{
customTitles.Remove(customTitle);
}
}
}
}

@ -1,346 +1,347 @@
using System.Collections.ObjectModel;
namespace Model.Stub;
public class StubInfoTitle
namespace Model.Stub
{
public StubAlbum StubAlbum
public class StubInfoTitle
{
get
public StubAlbum StubAlbum
{
return stubAlbum;
get
{
return stubAlbum;
}
}
}
private readonly StubAlbum stubAlbum;
private readonly StubAlbum stubAlbum;
public ObservableCollection<InfoTitle> InfoTitles
{
get => infoTitles;
}
public ObservableCollection<InfoTitle> InfoTitles
{
get => infoTitles;
}
private readonly ObservableCollection<InfoTitle> infoTitles;
private readonly ObservableCollection<InfoTitle> infoTitles;
/// <summary>
/// Constructeur de la classe StubInfoTitle
/// </summary>
public StubInfoTitle()
{
stubAlbum = new StubAlbum();
Artist ImagineDragons = StubAlbum.StubArtist.GetArtistByName("Imagine Dragons") ?? new Artist("Imagine Dragons");
Artist PNL = StubAlbum.StubArtist.GetArtistByName("PNL") ?? new Artist("PNL");
Artist Nepal = StubAlbum.StubArtist.GetArtistByName("Népal") ?? new Artist("Népal");
Artist Booba = StubAlbum.StubArtist.GetArtistByName("Booba") ?? new Artist("Booba");
Artist IAM = StubAlbum.StubArtist.GetArtistByName("IAM") ?? new Artist("IAM");
Artist Hugo = StubAlbum.StubArtist.GetArtistByName("Hugo TSR") ?? new Artist("Hugo TSR");
Artist Oxmo = StubAlbum.StubArtist.GetArtistByName("Oxmo Puccino") ?? new Artist("Oxmo Puccino");
Album MercuryAct2 = stubAlbum.GetAlbumByName("Mercury Act 2") ?? new Album("Mercury Act 2", "album14.png", ImagineDragons, "desc", "infos");
Album MercuryAct1 = stubAlbum.GetAlbumByName("Mercury Act 1") ?? new Album("Mercury Act 1", "album13.png", ImagineDragons, "desc", "infos");
Album Origins = stubAlbum.GetAlbumByName("Origins") ?? new Album("Origins", "album12.png", ImagineDragons, "desc", "infos");
Album Evolve = stubAlbum.GetAlbumByName("Evolve") ?? new Album("Evolve", "album11.png", ImagineDragons, "desc", "infos");
Album SmokeAndMirrors = stubAlbum.GetAlbumByName("Smoke & Mirrors") ?? new Album("Smoke & Mirrors", "album11.png", ImagineDragons, "desc", "infos");
Album NightVisions = stubAlbum.GetAlbumByName("Night Visions") ?? new Album("Night Visions", "album11.png", ImagineDragons, "desc", "infos");
Album AB = stubAlbum.GetAlbumByName("Adios Bahamas") ?? new Album("Adios Bahamas", "album1.jpg", Nepal, "Album post-mortem qui signé également le dernier de l'artiste", "Sortie : 2020");
Album E445 = stubAlbum.GetAlbumByName("445e Nuit") ?? new Album("445e Nuit", "album2.jpg", Nepal, "", "Sortie : 2017\n8 titres - 24 min");
Album FSR = stubAlbum.GetAlbumByName("Fenêtre Sur Rue") ?? new Album("Fenêtre Sur Rue", "album3.jpg", Hugo, "", "Sortie : 2012\n14 titres - 46 min");
Album TM = stubAlbum.GetAlbumByName("Temps Mort") ?? new Album("Temps Mort", "album4.jpg", Booba, "Premier album de Booba", "Sortie : 2002\n14 titres - 57 min");
Album OP = stubAlbum.GetAlbumByName("Opéra Puccino") ?? new Album("Opéra Puccino", "album5.jpg", Oxmo, "", "Sortie : 1998\n18 titres - 1h08min");
Album EMA = stubAlbum.GetAlbumByName("L'école du micro d'argent") ?? new Album("L'école du micro d'argent", "album6.jpg", IAM, "", "Sortie : 1997\n16 titres - 1h13min");
Album DF = stubAlbum.GetAlbumByName("Deux Frères") ?? new Album("Deux Frères", "album7.png", PNL, "", "Sortie : 2019\n22 titres");
Album DLL = stubAlbum.GetAlbumByName("Dans la légende") ?? new Album("Dans la légende", "album8.jpg", PNL, "", "Sortie : 2016\n16 titres - 1h06");
infoTitles = new ObservableCollection<InfoTitle>()
/// <summary>
/// Constructeur de la classe StubInfoTitle
/// </summary>
public StubInfoTitle()
{
new InfoTitle("Bones", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Symphony", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Sharks", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("I don't like myself", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Blur", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Higher ground", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Crushed", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Take it easy", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Waves", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("I'm happy", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Ferris wheel", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Peace of mind", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Sirens", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Tied", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Younger", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Continual", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("They don't know you like I do", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
stubAlbum = new StubAlbum();
Artist ImagineDragons = StubAlbum.StubArtist.GetArtistByName("Imagine Dragons") ?? new Artist("Imagine Dragons");
Artist PNL = StubAlbum.StubArtist.GetArtistByName("PNL") ?? new Artist("PNL");
Artist Nepal = StubAlbum.StubArtist.GetArtistByName("Népal") ?? new Artist("Népal");
Artist Booba = StubAlbum.StubArtist.GetArtistByName("Booba") ?? new Artist("Booba");
Artist IAM = StubAlbum.StubArtist.GetArtistByName("IAM") ?? new Artist("IAM");
Artist Hugo = StubAlbum.StubArtist.GetArtistByName("Hugo TSR") ?? new Artist("Hugo TSR");
Artist Oxmo = StubAlbum.StubArtist.GetArtistByName("Oxmo Puccino") ?? new Artist("Oxmo Puccino");
Album MercuryAct2 = stubAlbum.GetAlbumByName("Mercury Act 2") ?? new Album("Mercury Act 2", "album14.png", ImagineDragons, "desc", "infos");
Album MercuryAct1 = stubAlbum.GetAlbumByName("Mercury Act 1") ?? new Album("Mercury Act 1", "album13.png", ImagineDragons, "desc", "infos");
Album Origins = stubAlbum.GetAlbumByName("Origins") ?? new Album("Origins", "album12.png", ImagineDragons, "desc", "infos");
Album Evolve = stubAlbum.GetAlbumByName("Evolve") ?? new Album("Evolve", "album11.png", ImagineDragons, "desc", "infos");
Album SmokeAndMirrors = stubAlbum.GetAlbumByName("Smoke & Mirrors") ?? new Album("Smoke & Mirrors", "album11.png", ImagineDragons, "desc", "infos");
Album NightVisions = stubAlbum.GetAlbumByName("Night Visions") ?? new Album("Night Visions", "album11.png", ImagineDragons, "desc", "infos");
Album AB = stubAlbum.GetAlbumByName("Adios Bahamas") ?? new Album("Adios Bahamas", "album1.jpg", Nepal, "Album post-mortem qui signé également le dernier de l'artiste", "Sortie : 2020");
Album E445 = stubAlbum.GetAlbumByName("445e Nuit") ?? new Album("445e Nuit", "album2.jpg", Nepal, "", "Sortie : 2017\n8 titres - 24 min");
Album FSR = stubAlbum.GetAlbumByName("Fenêtre Sur Rue") ?? new Album("Fenêtre Sur Rue", "album3.jpg", Hugo, "", "Sortie : 2012\n14 titres - 46 min");
Album TM = stubAlbum.GetAlbumByName("Temps Mort") ?? new Album("Temps Mort", "album4.jpg", Booba, "Premier album de Booba", "Sortie : 2002\n14 titres - 57 min");
Album OP = stubAlbum.GetAlbumByName("Opéra Puccino") ?? new Album("Opéra Puccino", "album5.jpg", Oxmo, "", "Sortie : 1998\n18 titres - 1h08min");
Album EMA = stubAlbum.GetAlbumByName("L'école du micro d'argent") ?? new Album("L'école du micro d'argent", "album6.jpg", IAM, "", "Sortie : 1997\n16 titres - 1h13min");
Album DF = stubAlbum.GetAlbumByName("Deux Frères") ?? new Album("Deux Frères", "album7.png", PNL, "", "Sortie : 2019\n22 titres");
Album DLL = stubAlbum.GetAlbumByName("Dans la légende") ?? new Album("Dans la légende", "album8.jpg", PNL, "", "Sortie : 2016\n16 titres - 1h06");
infoTitles = new ObservableCollection<InfoTitle>()
{
new InfoTitle("Bones", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Symphony", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Sharks", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("I don't like myself", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Blur", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Higher ground", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Crushed", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Take it easy", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Waves", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("I'm happy", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Ferris wheel", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Peace of mind", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Sirens", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Tied", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Younger", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Continual", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("They don't know you like I do", MercuryAct2.ImageURL, "infos", "desc", Genre.POP, MercuryAct2.ID),
new InfoTitle("Enemy", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("My life", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Lonely", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Wrecked", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Monday", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("#1", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Easy come easy go", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Giants", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("It's ok", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Dull knives", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Follow you", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Cutthroat", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("No time for toxic people", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("One day", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Enemy", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("My life", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Lonely", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Wrecked", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Monday", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("#1", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Easy come easy go", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Giants", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("It's ok", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Dull knives", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Follow you", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Cutthroat", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("No time for toxic people", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("One day", MercuryAct1.ImageURL, "infos", "desc", Genre.POP, MercuryAct1.ID),
new InfoTitle("Natural", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Boomerang", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Machine", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Cool out", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Bad Liar", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("West coast", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Zero", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Bullet in a gun", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Digital", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Only", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Stuck", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Love", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Natural", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Boomerang", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Machine", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Cool out", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Bad Liar", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("West coast", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Zero", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Bullet in a gun", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Digital", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Only", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Stuck", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("Love", Origins.ImageURL, "infos", "desc", Genre.POP, Origins.ID),
new InfoTitle("I don't know why", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Whatever it takes", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Believer", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Walking the wire", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Rise up", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("I'll make it up to you", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Yesterday", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Mouth of the river", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Thunder", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Start over", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Dancing in the dark", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("I don't know why", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Whatever it takes", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Believer", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Walking the wire", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Rise up", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("I'll make it up to you", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Yesterday", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Mouth of the river", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Thunder", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Start over", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Dancing in the dark", Evolve.ImageURL, "infos", "desc", Genre.POP, Evolve.ID),
new InfoTitle("Shots", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Gold", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Smoke and Mirrors", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("I'm so sorry", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("I bet my life", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Polaroid", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Friction", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("It comes back to you", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Dream", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Trouble", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Summer", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Hopeless Opus", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("The fall", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Thief", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("The Unknown", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Second chances", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Release", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Warriors", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Shots", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Gold", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Smoke and Mirrors", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("I'm so sorry", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("I bet my life", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Polaroid", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Friction", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("It comes back to you", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Dream", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Trouble", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Summer", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Hopeless Opus", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("The fall", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Thief", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("The Unknown", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Second chances", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Release", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Warriors", SmokeAndMirrors.ImageURL, "infos", "desc", Genre.POP, SmokeAndMirrors.ID),
new InfoTitle("Radioactive", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Tiptoe", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("It's time", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Demons", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("On top of the world", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Amsterdam", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Hear me", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Every night", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Bleeding out", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Underdog", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Nothing left to say / Rocks", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Cha-ching (till we grow older)", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Working man", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("My fault", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Round and round", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("The river", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("America", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Selene", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Fallen", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Cover up", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Love of mine", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Bubble", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Tokyo", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Radioactive", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Tiptoe", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("It's time", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Demons", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("On top of the world", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Amsterdam", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Hear me", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Every night", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Bleeding out", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Underdog", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Nothing left to say / Rocks", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Cha-ching (till we grow older)", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Working man", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("My fault", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Round and round", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("The river", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("America", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Selene", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Fallen", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Cover up", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Love of mine", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Bubble", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Tokyo", NightVisions.ImageURL, "infos", "desc", Genre.POP, NightVisions.ID),
new InfoTitle("Opening", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Ennemis, Pt. 2", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("En face", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Trajectoire", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Vibe", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Lemonade", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Là-bas", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Sundance", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Milionaire", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Sans voir", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Crossfader", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Daruma", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Opening", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Ennemis, Pt. 2", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("En face", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Trajectoire", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Vibe", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Lemonade", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Là-bas", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Sundance", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Milionaire", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Sans voir", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Crossfader", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Daruma", AB.ImageURL, "infos", "desc", Genre.HIP_HOP, AB.ID),
new InfoTitle("Niveau 1", E445.ImageURL, "infos", "desc", Genre.HIP_HOP, E445.ID),
new InfoTitle("Maladavexa", E445.ImageURL, "infos", "desc", Genre.HIP_HOP, E445.ID),
new InfoTitle("Love64 (Interlude)", E445.ImageURL, "infos", "desc", Genre.HIP_HOP, E445.ID),
new InfoTitle("Deadpornstars", E445.ImageURL, "infos", "desc", Genre.HIP_HOP, E445.ID),
new InfoTitle("Jugements", E445.ImageURL, "infos", "desc", Genre.HIP_HOP, E445.ID),
new InfoTitle("Insomnie", E445.ImageURL, "infos", "desc", Genre.HIP_HOP, E445.ID),
new InfoTitle("Kodak White", E445.ImageURL, "infos", "desc", Genre.HIP_HOP, E445.ID),
new InfoTitle("Kamehouse", E445.ImageURL, "infos", "desc", Genre.HIP_HOP, E445.ID),
new InfoTitle("Niveau 1", E445.ImageURL, "infos", "desc", Genre.HIP_HOP, E445.ID),
new InfoTitle("Maladavexa", E445.ImageURL, "infos", "desc", Genre.HIP_HOP, E445.ID),
new InfoTitle("Love64 (Interlude)", E445.ImageURL, "infos", "desc", Genre.HIP_HOP, E445.ID),
new InfoTitle("Deadpornstars", E445.ImageURL, "infos", "desc", Genre.HIP_HOP, E445.ID),
new InfoTitle("Jugements", E445.ImageURL, "infos", "desc", Genre.HIP_HOP, E445.ID),
new InfoTitle("Insomnie", E445.ImageURL, "infos", "desc", Genre.HIP_HOP, E445.ID),
new InfoTitle("Kodak White", E445.ImageURL, "infos", "desc", Genre.HIP_HOP, E445.ID),
new InfoTitle("Kamehouse", E445.ImageURL, "infos", "desc", Genre.HIP_HOP, E445.ID),
new InfoTitle("Temps Mort", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Independants", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Ecoute bien", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Ma définition", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Jusqu'ici tout va bien", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Repose en paix", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Le Bitume avec une plume", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Animals", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Sans ratures", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("100-8 zoo", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("On m'a dit", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Nouvelle école", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("De mauvaise augure", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Strass et paillettes", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Temps Mort", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Independants", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Ecoute bien", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Ma définition", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Jusqu'ici tout va bien", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Repose en paix", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Le Bitume avec une plume", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Animals", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Sans ratures", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("100-8 zoo", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("On m'a dit", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Nouvelle école", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("De mauvaise augure", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Strass et paillettes", TM.ImageURL, "infos", "desc", Genre.HIP_HOP, TM.ID),
new InfoTitle("Visions de vie", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Black Mafioso (Interlude)", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Hitman", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Qui peut le nier !", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Peur noire", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("L'enfant seul", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Alias Jon Smoke", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Peu de gens le savent (Interlude)", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Amour & jalousie", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("24 heures à vivre", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Sacré samedi soir", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Le jour où tu partiras", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Sortilège", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Black Cyrano de Bergerac (Interlude)", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Mensongeur", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("La lettre", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("La loi du point final", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Mourir 1000 fois", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Visions de vie", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Black Mafioso (Interlude)", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Hitman", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Qui peut le nier !", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Peur noire", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("L'enfant seul", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Alias Jon Smoke", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Peu de gens le savent (Interlude)", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Amour & jalousie", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("24 heures à vivre", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Sacré samedi soir", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Le jour où tu partiras", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Sortilège", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Black Cyrano de Bergerac (Interlude)", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Mensongeur", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("La lettre", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("La loi du point final", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("Mourir 1000 fois", OP.ImageURL, "infos", "desc", Genre.HIP_HOP, OP.ID),
new InfoTitle("L'école du micro d'argent", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Dangereux", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Nés sous la même étoile", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("La Saga", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Petit frère", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Elle donne son corps avant son nom", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("L'empire du côté obscur", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Regarde", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("L'Enfer", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Quand tu allais, on revenait", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Chez le mac", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Un bon son brut pour les truands", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Bouger la tête", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Un cri court dans la nuit", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Libère mon imagination", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Demain, c'est loin", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("L'école du micro d'argent", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Dangereux", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Nés sous la même étoile", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("La Saga", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Petit frère", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Elle donne son corps avant son nom", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("L'empire du côté obscur", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Regarde", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("L'Enfer", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Quand tu allais, on revenait", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Chez le mac", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Un bon son brut pour les truands", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Bouger la tête", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Un cri court dans la nuit", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Libère mon imagination", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Demain, c'est loin", EMA.ImageURL, "infos", "desc", Genre.HIP_HOP, EMA.ID),
new InfoTitle("Au DD", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Autre monde", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Chang", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Blanka", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("91's", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("À l'ammoniaque", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Celsius", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Deux frères", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Hasta la Vista", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Coeurs", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Shenmue", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Kuta Ubud", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Menace", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Zoulou Tchaing", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Déconnecté", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("La misère est si belle", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Au DD", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Autre monde", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Chang", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Blanka", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("91's", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("À l'ammoniaque", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Celsius", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Deux frères", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Hasta la Vista", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Coeurs", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Shenmue", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Kuta Ubud", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Menace", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Zoulou Tchaing", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("Déconnecté", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("La misère est si belle", DF.ImageURL, "infos", "desc", Genre.HIP_HOP, DF.ID),
new InfoTitle("DA", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Naha", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Dans la légende", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Mira", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("J'suis QLF", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("La vie est belle", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Kratos", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Luz de Luna", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Tu sais pas", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Sheita", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Humain", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Bambina", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Bené", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Uranus", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Onizuka", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Jusqu'au dernier gramme", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("DA", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Naha", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Dans la légende", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Mira", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("J'suis QLF", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("La vie est belle", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Kratos", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Luz de Luna", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Tu sais pas", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Sheita", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Humain", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Bambina", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Bené", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Uranus", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Onizuka", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Jusqu'au dernier gramme", DLL.ImageURL, "infos", "desc", Genre.HIP_HOP, DLL.ID),
new InfoTitle("Point de départ", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Ugotrip", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Alors dites pas", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Coma artificiel", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Fenêtre sur rue", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("La ligne verte", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Eldorado", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Interlude", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Dojo", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Piège à loup", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Intact", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Dégradation", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Old Boy", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Point final", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID)
};
}
new InfoTitle("Point de départ", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Ugotrip", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Alors dites pas", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Coma artificiel", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Fenêtre sur rue", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("La ligne verte", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Eldorado", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Interlude", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Dojo", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Piège à loup", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Intact", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Dégradation", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Old Boy", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID),
new InfoTitle("Point final", FSR.ImageURL, "infos", "desc", Genre.HIP_HOP, FSR.ID)
};
}
/// <summary>
/// Permet d'obtenir une liste des InfoTitle
/// </summary>
/// <returns>Retourne une liste des InfoTitle</returns>
public ObservableCollection<InfoTitle> GetInfoTitles()
{
return infoTitles;
}
/// <summary>
/// Permet d'obtenir une liste des InfoTitle
/// </summary>
/// <returns>Retourne une liste des InfoTitle</returns>
public ObservableCollection<InfoTitle> GetInfoTitles()
{
return infoTitles;
}
/// <summary>
/// Permet d'obtenir des InfoTitle selon les noms donnés en paramètre
/// </summary>
/// <param name="names">Liste des noms des InfoTitle recherchés</param>
/// <returns>Retourne la liste des InfoTitle correspondant aux noms passés en paramètre</returns>
public List<InfoTitle> GetInfoTitlesByNames(List<string> names)
{
List<InfoTitle> infos = new List<InfoTitle>();
foreach(var name in names)
/// <summary>
/// Permet d'obtenir des InfoTitle selon les noms donnés en paramètre
/// </summary>
/// <param name="names">Liste des noms des InfoTitle recherchés</param>
/// <returns>Retourne la liste des InfoTitle correspondant aux noms passés en paramètre</returns>
public List<InfoTitle> GetInfoTitlesByNames(List<string> names)
{
foreach(var titles in infoTitles)
List<InfoTitle> infos = new List<InfoTitle>();
foreach (var name in names)
{
if (name == titles.Name)
foreach (var titles in infoTitles)
{
infos.Add(titles);
if (name == titles.Name)
{
infos.Add(titles);
}
}
}
return infos;
}
return infos;
}
/// <summary>
/// Permet d'ajouter un InfoTitle à la liste des InfoTitle
/// </summary>
/// <param name="title">InfoTitle à ajouter</param>
public void AddInfoTitle(InfoTitle title)
{
infoTitles.Add(title);
}
/// <summary>
/// Permet d'ajouter un InfoTitle à la liste des InfoTitle
/// </summary>
/// <param name="title">InfoTitle à ajouter</param>
public void AddInfoTitle(InfoTitle title)
{
infoTitles.Add(title);
}
/// <summary>
/// Permet de retirer un InfoTitle de la liste des InfoTitle
/// </summary>
/// <param name="title">InfoTitle à retirer</param>
public void RemoveInfoTitle(InfoTitle title)
{
infoTitles.Remove(title);
}
/// <summary>
/// Permet de retirer un InfoTitle de la liste des InfoTitle
/// </summary>
/// <param name="title">InfoTitle à retirer</param>
public void RemoveInfoTitle(InfoTitle title)
{
infoTitles.Remove(title);
}
/// <summary>
/// Permet d'ajouter un artiste à la liste des feat d'un InfoTitle
/// </summary>
/// <param name="infoTitle">InfoTitle dans lequel ajouter le feat</param>
/// <param name="artist">Artist à ajouter dans la liste des feats de l'InfoTitle</param>
public static void AddFeat(InfoTitle infoTitle, Artist artist)
{
infoTitle.AddFeat(artist);
}
/// <summary>
/// Permet d'ajouter un artiste à la liste des feat d'un InfoTitle
/// </summary>
/// <param name="infoTitle">InfoTitle dans lequel ajouter le feat</param>
/// <param name="artist">Artist à ajouter dans la liste des feats de l'InfoTitle</param>
public static void AddFeat(InfoTitle infoTitle, Artist artist)
{
infoTitle.AddFeat(artist);
}
/// <summary>
/// Permet de retirer un artiste de la liste des feat d'un InfoTitle
/// </summary>
/// <param name="infoTitle">InfoTitle depuis lequel retirer le feat</param>
/// <param name="artist">Artist à retirer de la liste des feats de l'InfoTitle</param>
public static void RemoveFeat(InfoTitle infoTitle, Artist artist)
{
infoTitle.RemoveFeat(artist);
/// <summary>
/// Permet de retirer un artiste de la liste des feat d'un InfoTitle
/// </summary>
/// <param name="infoTitle">InfoTitle depuis lequel retirer le feat</param>
/// <param name="artist">Artist à retirer de la liste des feats de l'InfoTitle</param>
public static void RemoveFeat(InfoTitle infoTitle, Artist artist)
{
infoTitle.RemoveFeat(artist);
}
}
}
}

File diff suppressed because it is too large Load Diff

@ -1,78 +1,79 @@
using System.Collections.ObjectModel;
namespace Model.Stub;
public class StubPlaylist
namespace Model.Stub
{
public ObservableCollection<Playlist> Playlists
public class StubPlaylist
{
get => playlists;
}
private readonly ObservableCollection<Playlist> playlists;
public ObservableCollection<Playlist> Playlists
{
get => playlists;
}
/// <summary>
/// Constructeur de la classe StubPlaylist
/// </summary>
public StubPlaylist()
{
Playlist Playlist1 = new Playlist("Playlist1", "desc1", "url1.png");
Playlist Playlist2 = new Playlist("Playlist2", "desc2", "url2.png");
Playlist Playlist3 = new Playlist("Playlist3", "desc3", "url3.png");
Playlist Playlist4 = new Playlist("Playlist4", "desc4", "url4.png");
Playlist Playlist5 = new Playlist("Playlist5", "desc5", "url5.png");
Playlist Playlist6 = new Playlist("Playlist6", "desc6", "url6.png");
Playlist Playlist7 = new Playlist("Playlist7", "desc7", "url7.png");
Playlist Playlist8 = new Playlist("Playlist8", "desc8", "url8.png");
Playlist Playlist9 = new Playlist("Playlist9", "desc9", "url9.png");
playlists = new ObservableCollection<Playlist>()
private readonly ObservableCollection<Playlist> playlists;
/// <summary>
/// Constructeur de la classe StubPlaylist
/// </summary>
public StubPlaylist()
{
Playlist1, Playlist2, Playlist3, Playlist4, Playlist5, Playlist6, Playlist7, Playlist8, Playlist9
};
}
Playlist Playlist1 = new Playlist("Playlist1", "desc1", "url1.png");
Playlist Playlist2 = new Playlist("Playlist2", "desc2", "url2.png");
Playlist Playlist3 = new Playlist("Playlist3", "desc3", "url3.png");
Playlist Playlist4 = new Playlist("Playlist4", "desc4", "url4.png");
Playlist Playlist5 = new Playlist("Playlist5", "desc5", "url5.png");
Playlist Playlist6 = new Playlist("Playlist6", "desc6", "url6.png");
Playlist Playlist7 = new Playlist("Playlist7", "desc7", "url7.png");
Playlist Playlist8 = new Playlist("Playlist8", "desc8", "url8.png");
Playlist Playlist9 = new Playlist("Playlist9", "desc9", "url9.png");
playlists = new ObservableCollection<Playlist>()
{
Playlist1, Playlist2, Playlist3, Playlist4, Playlist5, Playlist6, Playlist7, Playlist8, Playlist9
};
}
/// <summary>
/// Permet d'obtenir la liste des Playlist
/// </summary>
/// <returns>Retourne la liste des Playlist</returns>
public ObservableCollection<Playlist> GetPlaylists()
{
return playlists;
}
/// <summary>
/// Permet d'obtenir la liste des Playlist
/// </summary>
/// <returns>Retourne la liste des Playlist</returns>
public ObservableCollection<Playlist> GetPlaylists()
{
return playlists;
}
/// <summary>
/// Permet d'obtenir une Playlist selon son nom
/// </summary>
/// <param name="name">Nom de la Playlist recherchée</param>
/// <returns>Retourne la Playlist correspondant au nom donné en paramètre</returns>
public Playlist GetPlaylistByName(string name)
{
foreach(var playlist in playlists)
/// <summary>
/// Permet d'obtenir une Playlist selon son nom
/// </summary>
/// <param name="name">Nom de la Playlist recherchée</param>
/// <returns>Retourne la Playlist correspondant au nom donné en paramètre</returns>
public Playlist GetPlaylistByName(string name)
{
if (playlist.Name == name)
foreach (var playlist in playlists)
{
return playlist;
if (playlist.Name == name)
{
return playlist;
}
}
return null;
}
return null;
}
/// <summary>
/// Permet d'ajouter une Playlist à la liste des Playlist
/// </summary>
/// <param name="playlist"></param>
public void AddPlaylist(Playlist playlist)
{
playlists.Add(playlist);
}
/// <summary>
/// Permet d'ajouter une Playlist à la liste des Playlist
/// </summary>
/// <param name="playlist"></param>
public void AddPlaylist(Playlist playlist)
{
playlists.Add(playlist);
}
/// <summary>
/// Permet de retirer une Playlist de la liste des Playlist
/// </summary>
/// <param name="playlist"></param>
public void RemovePlaylist(Playlist playlist)
{
playlists.Remove(playlist);
/// <summary>
/// Permet de retirer une Playlist de la liste des Playlist
/// </summary>
/// <param name="playlist"></param>
public void RemovePlaylist(Playlist playlist)
{
playlists.Remove(playlist);
}
}
}
}

@ -3,118 +3,119 @@ using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Xml.Serialization;
namespace Model;
public class Title
namespace Model
{
/// <remarks>
/// Classe Title
/// </remarks>
public event PropertyChangedEventHandler PropertyChanged;
public string Name
public class Title
{
get => name;
set
public event PropertyChangedEventHandler PropertyChanged;
public string Name
{
if (string.IsNullOrWhiteSpace(value) || value.Length > Manager.MAX_NAME_LENGTH)
get => name;
set
{
value = "IncorrectName";
if (string.IsNullOrWhiteSpace(value) || value.Length > Manager.MAX_NAME_LENGTH)
{
value = "IncorrectName";
}
name = value;
OnPropertyChanged();
}
name = value;
OnPropertyChanged();
}
}
private string name = Manager.DEFAULT_NAME;
public string ImageURL
{
get => imageURL;
private string name = Manager.DEFAULT_NAME;
set
public string ImageURL
{
if (value == null || !value.Contains('.'))
{
value = "none.png";
imageURL = value;
}
else if (value.Contains('.'))
get => imageURL;
set
{
imageURL = value;
if (value == null || !value.Contains('.'))
{
value = "none.png";
imageURL = value;
}
else if (value.Contains('.'))
{
imageURL = value;
}
OnPropertyChanged();
}
OnPropertyChanged();
}
}
private string imageURL = Manager.DEFAULT_URL;
public string Information
{
get => information;
private string imageURL = Manager.DEFAULT_URL;
set
public string Information
{
if (value != null && value.Length < Manager.MAX_DESCRIPTION_LENGTH)
get => information;
set
{
information = value;
if (value != null && value.Length < Manager.MAX_DESCRIPTION_LENGTH)
{
information = value;
}
OnPropertyChanged();
}
OnPropertyChanged();
}
}
private string information = Manager.DEFAULT_DESC;
private string information = Manager.DEFAULT_DESC;
/// <summary>
/// Constructeur de la classe Title
/// </summary>
/// <param name="nom">Nom du Title</param>
/// <param name="file_Name">Chemin d'accès de l'image du Title</param>
/// <param name="informations">Informations sur le Title</param>
public Title(string nom, string file_Name, string informations)
{
Name = nom;
ImageURL = file_Name;
Information = informations;
}
/// <summary>
/// Constructeur de la classe Title
/// </summary>
/// <param name="nom">Nom du Title</param>
/// <param name="file_Name">Chemin d'accès de l'image du Title</param>
/// <param name="informations">Informations sur le Title</param>
public Title(string nom, string file_Name, string informations)
{
Name = nom;
ImageURL = file_Name;
Information = informations;
}
/// <summary>
/// Fonction qui permet de déterminer si deux objets Title sont égaux
/// </summary>
/// <param name="obj"></param>
/// <returns>Un booléen indiquant si l'objet est égal</returns>
public override bool Equals(object obj)
{
if (obj is null) return false;
if (obj.GetType() != typeof(Title)) return false;
if (obj is Title title && Name == title.Name) return true;
else return false;
}
/// <summary>
/// Fonction qui permet de déterminer si deux objets Title sont égaux
/// </summary>
/// <param name="obj"></param>
/// <returns>Un booléen indiquant si l'objet est égal</returns>
public override bool Equals(object obj)
{
if (obj is null) return false;
if (obj.GetType() != typeof(Title)) return false;
if (obj is Title title && Name == title.Name) return true;
else return false;
}
/// <summary>
/// Permet de déterminer le hash d'un objet Title
/// </summary>
/// <returns>Hash de l'attribut Name</returns>
public override int GetHashCode()
{
return Name.GetHashCode();
}
/// <summary>
/// Permet de déterminer le hash d'un objet Title
/// </summary>
/// <returns>Hash de l'attribut Name</returns>
public override int GetHashCode()
{
return Name.GetHashCode();
}
/// <summary>
/// Permet de convertir un objet Title en string
/// </summary>
/// <returns>Une nouvelle chaîne caractères contenant le nom du Title</returns>
public override string ToString()
{
return $"Name : {Name}";
}
/// <summary>
/// Permet de convertir un objet Title en string
/// </summary>
/// <returns>Une nouvelle chaîne caractères contenant le nom du Title</returns>
public override string ToString()
{
return $"Name : {Name}";
}
/// <summary>
/// Permet la notification, et donc l'actualisation des objets connectés à l'événement lorsque la méthode est appelée
/// </summary>
/// <param name="propertyName">Nom de la propriété modifiée</param>
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
/// <summary>
/// Permet la notification, et donc l'actualisation des objets connectés à l'événement lorsque la méthode est appelée
/// </summary>
/// <param name="propertyName">Nom de la propriété modifiée</param>
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}

@ -10,7 +10,6 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
<PackageReference Include="Plugin.Maui.Audio" Version="1.0.0" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

Loading…
Cancel
Save