Refactoring Model in order to fix databindings issues
continuous-integration/drone/push Build is failing Details

pull/31/head
Corentin LEMAIRE 2 years ago
parent 363ff3e730
commit 0ced265b21

@ -23,10 +23,6 @@ public partial class App : Application
Manager.LoadSerialization();
};
Window.Stopped += (sender, eventArgs) => {
Manager.SaveSerialization();
};
const int newHeight = 900;
const int newWidth = 1800;
const int minHeight = 800;

@ -6,8 +6,7 @@
xmlns:local="clr-namespace:Linaris"
Shell.FlyoutBehavior="Flyout"
Shell.NavBarIsVisible="True"
FlyoutWidth="200"
FlyoutIsPresented="True">
FlyoutWidth="200">
<FlyoutItem Title="Albums" Icon="home.png">
<ShellContent

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Name="this"
x:Class="Linaris.FooterPage">
<Grid Grid.ColumnSpan="2" Grid.Row="1" BackgroundColor="Gray" Style="{StaticResource FooterTrigger}">
@ -14,19 +13,19 @@
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Label Grid.Row="0" Style="{StaticResource LabelFooterTrigger}" Text="Morceau" VerticalOptions="Center" Margin="8,0,0,0" WidthRequest="200" LineBreakMode="TailTruncation"></Label>
<Label Grid.Row="1" x:Name="artiste" Text="Artiste" VerticalOptions="Center" Margin="8,0,0,0" WidthRequest="200" LineBreakMode="TailTruncation"></Label>
<Label Grid.Row="1" Style="{StaticResource ArtistFooterTrigger}" Text="Artiste" VerticalOptions="Center" Margin="8,0,0,0" WidthRequest="200" LineBreakMode="TailTruncation"></Label>
</Grid>
</HorizontalStackLayout>
<StackLayout Grid.Column="1" Orientation="Horizontal" HorizontalOptions="CenterAndExpand" x:Name="ButtonStack">
<ImageButton x:Name="Random" Source="rdm.png" Margin="0,10,8,10" WidthRequest="25" HeightRequest="25" Aspect="AspectFit" MinimumWidthRequest="1" MinimumHeightRequest="1" BackgroundColor="Transparent"/>
<ImageButton x:Name="Back" Clicked="RewindButton_Clicked" Source="back.png" Margin="8,10,8,10" WidthRequest="20" HeightRequest="20" Aspect="AspectFit" MinimumWidthRequest="1" MinimumHeightRequest="1" BackgroundColor="Transparent"/>
<ImageButton x:Name="Play" Clicked="PlayButton_Clicked" Source="play.png" Margin="8,0,8,0" WidthRequest="38" HeightRequest="38" Aspect="AspectFit" MinimumWidthRequest="5" MinimumHeightRequest="5" BackgroundColor="Transparent"/>
<ImageButton x:Name="Next" Clicked="NextButton_Clicked" Source="next.png" Margin="8,10,8,10" WidthRequest="20" HeightRequest="20" Aspect="AspectFit" MinimumWidthRequest="1" MinimumHeightRequest="1" BackgroundColor="Transparent"/>
<ImageButton x:Name="Loop" Source="loop.png" Margin="8,10,0,10" WidthRequest="25" HeightRequest="25" Aspect="AspectFit" MinimumWidthRequest="1" MinimumHeightRequest="1" BackgroundColor="Transparent"/>
<StackLayout Grid.Column="1" Orientation="Horizontal" HorizontalOptions="CenterAndExpand">
<Image Source="rdm.png" Margin="0,10,8,10" WidthRequest="25" HeightRequest="25" Aspect="AspectFit" MinimumWidthRequest="1" MinimumHeightRequest="1" BackgroundColor="Transparent" Style="{StaticResource SecondaryButtonFooterTrigger}"/>
<ImageButton Clicked="RewindButton_Clicked" Source="back.png" Margin="8,10,8,10" WidthRequest="20" HeightRequest="20" Aspect="AspectFit" MinimumWidthRequest="1" MinimumHeightRequest="1" BackgroundColor="Transparent"/>
<ImageButton Clicked="PlayButton_Clicked" Source="play.png" Margin="8,0,8,0" WidthRequest="38" HeightRequest="38" Aspect="AspectFit" MinimumWidthRequest="5" MinimumHeightRequest="5" BackgroundColor="Transparent"/>
<ImageButton Clicked="NextButton_Clicked" Source="next.png" Margin="8,10,8,10" WidthRequest="20" HeightRequest="20" Aspect="AspectFit" MinimumWidthRequest="1" MinimumHeightRequest="1" BackgroundColor="Transparent"/>
<Image Source="loop.png" Margin="8,10,0,10" WidthRequest="25" HeightRequest="25" Aspect="AspectFit" MinimumWidthRequest="1" MinimumHeightRequest="1" BackgroundColor="Transparent" Style="{StaticResource SecondaryButtonFooterTrigger}"/>
</StackLayout>
<HorizontalStackLayout Grid.ColumnSpan="3" HorizontalOptions="Center" Spacing="10" MinimumWidthRequest="15" x:Name="TimeStack">
<HorizontalStackLayout Grid.ColumnSpan="3" HorizontalOptions="Center" Spacing="10" MinimumWidthRequest="15" Style="{StaticResource TimeStackFooterTrigger}">
<Label VerticalOptions="Center" Text="00:00:00" x:Name="currentTime"></Label>
<Slider Value="0" ValueChanged="Bar_ValueChanged" WidthRequest="250" VerticalOptions="Center" x:Name="bar"/>
<Label VerticalOptions="Center" Text="00:00:00" x:Name="endTime"></Label>

@ -152,32 +152,29 @@
<VisualStateGroupList>
<VisualStateGroup>
<VisualState x:Name="Narrow">
<VisualState x:Name="Wide">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0"/>
<AdaptiveTrigger MinWindowWidth="1200"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Property="ColumnDefinitions">
<Setter.Value>
<ColumnDefinitionCollection>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="0"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</ColumnDefinitionCollection>
</Setter.Value>
</Setter>
<Setter Property="RowDefinitions">
<Setter.Value>
<RowDefinitionCollection>
<RowDefinition Height="2*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="0"/>
</RowDefinitionCollection>
</Setter.Value>
</Setter>
<Setter TargetName="ButtonStack" Property="StackLayout.Margin" Value="0,5,0,0"/>
<Setter TargetName="TimeStack" Property="Grid.Row" Value="1"/>
<Setter TargetName="TimeStack" Property="HorizontalStackLayout.Margin" Value="0,0,0,0"/>
</VisualState.Setters>
</VisualState>
@ -204,38 +201,32 @@
</RowDefinitionCollection>
</Setter.Value>
</Setter>
<Setter TargetName="ButtonStack" Property="StackLayout.Margin" Value="0,5,0,0"/>
<Setter TargetName="TimeStack" Property="Grid.Row" Value="1"/>
<Setter TargetName="TimeStack" Property="HorizontalStackLayout.Margin" Value="0,0,0,0"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Wide">
<VisualState x:Name="Narrow">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="1200"/>
<AdaptiveTrigger MinWindowWidth="0"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Property="ColumnDefinitions">
<Setter.Value>
<ColumnDefinitionCollection>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="0"/>
</ColumnDefinitionCollection>
</Setter.Value>
</Setter>
<Setter Property="RowDefinitions">
<Setter.Value>
<RowDefinitionCollection>
<RowDefinition Height="2*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="0"/>
</RowDefinitionCollection>
</Setter.Value>
</Setter>
<Setter TargetName="ButtonStack" Property="StackLayout.Margin" Value="0,5,0,35"/>
<Setter TargetName="TimeStack" Property="Grid.Row" Value="0"/>
<Setter TargetName="TimeStack" Property="HorizontalStackLayout.Margin" Value="0,35,0,0"/>
</VisualState.Setters>
</VisualState>
@ -310,15 +301,12 @@
<VisualStateGroupList>
<VisualStateGroup>
<VisualState x:Name="Narrow">
<VisualState x:Name="Wide">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0"/>
<AdaptiveTrigger MinWindowWidth="1200"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Property="FontSize" Value="15"/>
<Setter TargetName="artiste" Property="Label.FontSize" Value="12"/>
<Setter TargetName="Random" Property="ImageButton.IsVisible" Value="False"/>
<Setter TargetName="Loop" Property="ImageButton.IsVisible" Value="False"/>
<Setter Property="FontSize" Value="25"/>
</VisualState.Setters>
</VisualState>
@ -328,18 +316,15 @@
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Property="FontSize" Value="18"/>
<Setter TargetName="artiste" Property="Label.FontSize" Value="15"/>
<Setter TargetName="Random" Property="ImageButton.IsVisible" Value="True"/>
<Setter TargetName="Loop" Property="ImageButton.IsVisible" Value="True"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Wide">
<VisualState x:Name="Narrow">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="1200"/>
<AdaptiveTrigger MinWindowWidth="0"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Property="FontSize" Value="25"/>
<Setter Property="FontSize" Value="15"/>
</VisualState.Setters>
</VisualState>
@ -349,25 +334,18 @@
</Setter>
</Style>
<Style x:Key="InfosComplementairesGridTrigger" TargetType="Grid">
<Style x:Key="ArtistFooterTrigger" TargetType="Label">
<Setter Property="VisualStateManager.VisualStateGroups">
<Setter.Value>
<VisualStateGroupList>
<VisualStateGroup>
<VisualState x:Name="Narrow">
<VisualState x:Name="Wide">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0"/>
<AdaptiveTrigger MinWindowWidth="1200"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Property="ColumnDefinitions">
<Setter.Value>
<ColumnDefinitionCollection>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="0"/>
</ColumnDefinitionCollection>
</Setter.Value>
</Setter>
<Setter Property="FontSize" Value="25"/>
</VisualState.Setters>
</VisualState>
@ -376,30 +354,16 @@
<AdaptiveTrigger MinWindowWidth="600"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Property="ColumnDefinitions">
<Setter.Value>
<ColumnDefinitionCollection>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="0"/>
</ColumnDefinitionCollection>
</Setter.Value>
</Setter>
<Setter Property="FontSize" Value="15"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Wide">
<VisualState x:Name="Narrow">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="1200"/>
<AdaptiveTrigger MinWindowWidth="0"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Property="ColumnDefinitions">
<Setter.Value>
<ColumnDefinitionCollection>
<ColumnDefinition Width="6*"/>
<ColumnDefinition Width="*"/>
</ColumnDefinitionCollection>
</Setter.Value>
</Setter>
<Setter Property="FontSize" Value="12"/>
</VisualState.Setters>
</VisualState>
@ -409,45 +373,123 @@
</Setter>
</Style>
<Style x:Key="InfosStackTrigger" TargetType="VerticalStackLayout">
<Style x:Key="SecondaryButtonFooterTrigger" TargetType="Image">
<Setter Property="IsVisible" Value="True"/>
<Setter Property="VisualStateManager.VisualStateGroups">
<Setter.Value>
<VisualStateGroupList>
<VisualStateGroup>
<VisualState x:Name="Narrow">
<VisualState x:Name="Wide">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0"/>
<AdaptiveTrigger MinWindowWidth="1200"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Property="IsVisible" Value="True"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Medium">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="600"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Property="IsVisible" Value="True"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Wide">
<VisualState x:Name="Narrow">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="1200"/>
<AdaptiveTrigger MinWindowWidth="0"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Property="IsVisible" Value="False"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ButtonStackFooterTrigger" TargetType="StackLayout">
<Setter Property="VisualStateManager.VisualStateGroups">
<VisualStateGroupList>
<VisualStateGroup>
<VisualState x:Name="Wide">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="1200"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Property="Margin" Value="0,5,0,35"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Medium">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="600"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Property="Margin" Value="0,5,0,0"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Narrow">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Property="Margin" Value="0,5,0,0"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</Setter>
</Style>
<Style x:Key="TimeStackFooterTrigger" TargetType="HorizontalStackLayout">
<Setter Property="VisualStateManager.VisualStateGroups">
<VisualStateGroupList>
<VisualStateGroup>
<VisualState x:Name="Wide">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="1200"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Property="Grid.Row" Value="0"/>
<Setter Property="Margin" Value="0,35,0,0"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Medium">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="600"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Property="Grid.Row" Value="1"/>
<Setter Property="Margin" Value="0,0,0,0"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Narrow">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Property="Grid.Row" Value="1"/>
<Setter Property="Margin" Value="0,0,0,0"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</Setter>
</Style>
<Style TargetType="ActivityIndicator">
<Setter Property="Color" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
</Style>

@ -37,16 +37,6 @@ namespace Model
private string description = Manager.DEFAULT_DESC;
private readonly List<Title> titles = new List<Title>();
public IEnumerable<Title> Titles
{
get
{
return new List<Title>(titles);
}
}
public string ImageURL
{
get => imageURL;
@ -88,6 +78,17 @@ namespace Model
private string information = Manager.DEFAULT_DESC;
public IEnumerable<InfoTitle> InfoTitles
{
get => infoTitles;
set
{
infoTitles = value.ToList();
}
}
private List<InfoTitle> infoTitles = new List<InfoTitle>();
public Album(string name, string imageURL, Artist artist, string description, string information)
{
Name = name;
@ -102,14 +103,14 @@ namespace Model
Artist = new Artist(Manager.DEFAULT_NAME);
}
public void AddTitle(Title title)
public void AddTitle(InfoTitle title)
{
titles.Add(title);
infoTitles.Add(title);
}
public void RemoveTitle(Title title)
public void RemoveTitle(InfoTitle title)
{
titles.Remove(title);
infoTitles.Remove(title);
}
public override bool Equals(object? obj)

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Customs>
<CustomTitle Name="ct1">
<ImageURL>url1.png</ImageURL>
<Information>info1</Information>
<Path>path1</Path>
</CustomTitle>
</Customs>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Playlists>
<Playlist Name="Unknown">
<Description></Description>
<ImageURL>none.png</ImageURL>
<Titles></Titles>
</Playlist>
</Playlists>

@ -7,7 +7,7 @@ namespace Model.Serialization;
public class LinqXmlSerialization : IDataManager
{
private static string XMLPATH = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Data");
private static string XMLPATH = GetSerializationDirectory();
private static string XMLFILEPLAYLISTS = Path.Combine(XMLPATH, "playlists.xml");
@ -19,6 +19,13 @@ public class LinqXmlSerialization : IDataManager
private static string XMLFILEARTISTS = Path.Combine(XMLPATH, "artists.xml");
private StubManager stubManager;
public StubManager StubManager
{
get => stubManager;
}
private List<Artist> artists;
public IEnumerable<Artist> Artists
@ -72,43 +79,16 @@ public class LinqXmlSerialization : IDataManager
public LinqXmlSerialization()
{
playlists = new ObservableCollection<Playlist>();
artists = new List<Artist>();
Artist ImagineDragons = new Artist("Imagine Dragons");
Artist artist = new Artist("artist");
InfoTitle nom = new InfoTitle("nom", "none.png", "infos", artist, "desc", Genre.RAP);
InfoTitle unknown = new InfoTitle();
infoTitles = new ObservableCollection<InfoTitle>()
{
nom,
unknown
};
albums = new ObservableCollection<Album>()
{
new Album("Adios Bahamas", "album1.jpg", artist, "Description d'Adios Bahamas", "Informations sur Adios Bahamas"),
new Album("Album2", "album2.jpg", new Artist(), "", ""),
new Album("Album3", "album3.jpg", new Artist(), "", ""),
new Album("Album4", "album4.jpg", new Artist(), "", ""),
new Album("Album5", "album5.jpg", new Artist(), "", ""),
new Album("Album6", "album6.jpg", new Artist(), "", ""),
new Album("Album7", "album7.png", new Artist(), "", ""),
new Album("Album8", "album8.jpg", new Artist(), "", ""),
new Album("Night Visions", "album9.jpg", ImagineDragons, "", ""),
new Album("Smoke &amp; Mirrors", "album10.jpg", ImagineDragons, "", ""),
new Album("Evolve", "album11.jpg", ImagineDragons, "", ""),
new Album("Origins", "album12.jpg", ImagineDragons, "", ""),
new Album("Mercury Act 1", "album13.jpg", ImagineDragons, "", ""),
new Album("Mercury Act 2", "album14.jpg", ImagineDragons, "", "")
};
Album? AdiosBahamas = GetAlbumByName("Adios Bahamas");
AdiosBahamas?.AddTitle(nom);
AdiosBahamas?.AddTitle(unknown);
stubManager = new StubManager();
artists = StubManager.GetArtists();
infoTitles = StubManager.GetInfoTitles();
albums = StubManager.GetAlbums();
customTitles = new ObservableCollection<CustomTitle>();
if (!Directory.Exists(XMLPATH))
{
Directory.CreateDirectory(XMLPATH);
}
Directory.SetCurrentDirectory(XMLPATH);
LoadSerialization();
}
public void AddAlbum(Album album)
@ -1124,4 +1104,22 @@ public class LinqXmlSerialization : IDataManager
}
return false;
}
static string GetSerializationDirectory()
{
DirectoryInfo? directory = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);
while (directory != null && ! directory.GetFiles("*.sln").Any())
{
directory = directory.Parent;
}
if (directory == null)
{
directory = new DirectoryInfo(Directory.GetCurrentDirectory());
}
return Path.Combine(directory.ToString(),"Model/Data");
}
}

@ -25,14 +25,22 @@ public class StubAlbum
public StubAlbum()
{
stubArtist = new StubArtist();
Album Album1 = new Album("la street", "lastreet.png", StubArtist.GetArtistByName("Critien") ?? new Artist("Critien"), "c'est la street", "plein d'infos1");
Album Album2 = new Album("la jsp", "oui.png", StubArtist.GetArtistByName("Critien") ?? new Artist("Critien"), "c'est la couri", "plein d'infos2");
Album Album3 = new Album("la pas le temps", "non.png", StubArtist.GetArtistByName("Poulifer") ?? new Artist("Poulifer"), "c'est pas la street", "plein d'infos3");
Album Album4 = new Album("la pas le choix", "peutetre.png", StubArtist.GetArtistByName("Credian") ?? new Artist("Credian"), "c'est la parterre", "plein d'infos4");
albums = new ObservableCollection<Album>()
{
Album1, Album2, Album3, Album4
new Album("Adios Bahamas", "album1.jpg", StubArtist.GetArtistByName("Artist") ?? new Artist("Artist"), "Description d'Adios Bahamas", "Informations sur Adios Bahamas"),
new Album("Album2", "album2.jpg", new Artist(), "", ""),
new Album("Album3", "album3.jpg", new Artist(), "", ""),
new Album("Album4", "album4.jpg", new Artist(), "", ""),
new Album("Album5", "album5.jpg", new Artist(), "", ""),
new Album("Album6", "album6.jpg", new Artist(), "", ""),
new Album("Album7", "album7.png", new Artist(), "", ""),
new Album("Album8", "album8.jpg", new Artist(), "", ""),
new Album("Night Visions", "album9.jpg", StubArtist.GetArtistByName("Imagine Dragons") ?? new Artist("Imagine Dragons"), "", ""),
new Album("Smoke &amp; 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"), "", "")
};
}

@ -11,7 +11,7 @@ public class StubArtist
public StubArtist()
{
Artist Artiste1 = new Artist("Critien");
Artist Artiste1 = new Artist("Imagine Dragons");
Artist Artiste2 = new Artist("Gouriet");
Artist Artiste3 = new Artist("Poulifer");
Artist Artiste4 = new Artist("Credian");

@ -66,6 +66,11 @@ public class StubManager : IDataManager
LoadSerialization();
}
~StubManager()
{
SaveSerialization();
}
public ObservableCollection<Album> GetAlbums()
{
return StubAlbum.GetAlbums();

Loading…
Cancel
Save