Finish Playlists databinding development
continuous-integration/drone/push Build is failing
Details
continuous-integration/drone/push Build is failing
Details
parent
3beaf2a7af
commit
0190bc4565
@ -1,29 +1,29 @@
|
||||
namespace Linaris;
|
||||
|
||||
public partial class Layout : ContentView
|
||||
{
|
||||
public Layout()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
namespace Linaris;
|
||||
|
||||
public partial class Layout : ContentView
|
||||
{
|
||||
public Layout()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private async void Go_Home(object sender, EventArgs e)
|
||||
{
|
||||
await Navigation.PushAsync(new MainPage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private async void Go_Playlists(object sender, EventArgs e)
|
||||
{
|
||||
await Navigation.PushAsync(new PlaylistsPage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private async void Go_Back(object sender, EventArgs e)
|
||||
{
|
||||
await Navigation.PopAsync();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private async void Go_Files(object sender, EventArgs e)
|
||||
{
|
||||
await Navigation.PushAsync(new LocalFilesPage());
|
||||
}
|
||||
}
|
||||
}
|
@ -1,9 +1,236 @@
|
||||
using Model;
|
||||
using Model.Stub;
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace Linaris;
|
||||
|
||||
public partial class PlaylistsPage : ContentPage
|
||||
{
|
||||
public PlaylistsPage()
|
||||
|
||||
private ObservableCollection<Playlist> playlists = App.Manager.GetPlaylists();
|
||||
|
||||
public ObservableCollection<Playlist> Playlists
|
||||
{
|
||||
get => playlists;
|
||||
}
|
||||
|
||||
private bool isNewPlaylist = false;
|
||||
|
||||
public bool IsNewPlaylist
|
||||
{
|
||||
get => isNewPlaylist;
|
||||
set
|
||||
{
|
||||
isNewPlaylist = value;
|
||||
OnPropertyChanged(nameof(IsNewPlaylist));
|
||||
}
|
||||
}
|
||||
|
||||
public PlaylistsPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
BindingContext = this;
|
||||
}
|
||||
|
||||
// Reset methods
|
||||
|
||||
void ResetAll(object sender, EventArgs e)
|
||||
{
|
||||
ResetSubMenus(sender, e);
|
||||
ResetRenaming(sender, e);
|
||||
IsNewPlaylist = false;
|
||||
}
|
||||
|
||||
void ResetSubMenus(object sender, EventArgs e)
|
||||
{
|
||||
foreach (var Playlist in playlists)
|
||||
{
|
||||
Playlist.IsSubMenuVisible = false;
|
||||
}
|
||||
}
|
||||
|
||||
void ResetRenaming(object sender, EventArgs e)
|
||||
{
|
||||
foreach (var Playlist in playlists)
|
||||
{
|
||||
Playlist.IsRenaming = false;
|
||||
if (!CheckRenaming(Playlist))
|
||||
{
|
||||
Playlist.NewName = Playlist.Name;
|
||||
}
|
||||
else
|
||||
{
|
||||
Playlist.Name = Playlist.NewName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Add methods
|
||||
|
||||
void CreatePlaylist(object sender, EventArgs e)
|
||||
{
|
||||
if (sender is Entry entry)
|
||||
{
|
||||
if (!HasSameName(entry.Text))
|
||||
{
|
||||
Playlist playlist = new Playlist(entry.Text, "", "none.png");
|
||||
App.Manager.AddPlaylist(playlist);
|
||||
playlists.Add(playlist);
|
||||
IsNewPlaylist = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Remove methods
|
||||
|
||||
void RemovePlaylist(object sender, EventArgs e)
|
||||
{
|
||||
if (sender is Button button)
|
||||
{
|
||||
if (button.BindingContext is Playlist playlist)
|
||||
{
|
||||
App.Manager.RemovePlaylist(playlist);
|
||||
playlists.Remove(playlist);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Show methods
|
||||
|
||||
void ShowSubMenu(object sender, EventArgs e)
|
||||
{
|
||||
if (sender is Image image)
|
||||
{
|
||||
if (image.BindingContext is Playlist playlist)
|
||||
{
|
||||
if (!playlist.IsSubMenuVisible)
|
||||
{
|
||||
ResetAll(sender, e);
|
||||
playlist.IsSubMenuVisible = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
ResetSubMenus(sender, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ShowEntryPlaylist(object sender, EventArgs e)
|
||||
{
|
||||
IsNewPlaylist = true;
|
||||
}
|
||||
|
||||
|
||||
// Change methods
|
||||
|
||||
void RenamePlaylist(object sender, EventArgs e)
|
||||
{
|
||||
ResetSubMenus(sender, e);
|
||||
if (sender is Button button)
|
||||
{
|
||||
if (button.BindingContext is Playlist playlist)
|
||||
{
|
||||
if (!playlist.IsRenaming)
|
||||
{
|
||||
ResetRenaming(sender, e);
|
||||
playlist.IsRenaming = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
ResetRenaming(sender, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (sender is Entry entry)
|
||||
{
|
||||
if (entry.BindingContext is Playlist playlist)
|
||||
{
|
||||
if (!CheckRenaming(playlist))
|
||||
{
|
||||
entry.TextColor = Color.FromRgb(255,0,0);
|
||||
}
|
||||
else
|
||||
{
|
||||
ResetRenaming(sender, e);
|
||||
playlist.Name = playlist.NewName;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async void ChangeImage(object sender, EventArgs e)
|
||||
{
|
||||
var result = await FilePicker.PickAsync(new PickOptions
|
||||
{
|
||||
PickerTitle = "Choisissez une nouvelle image !",
|
||||
FileTypes = FilePickerFileType.Images
|
||||
});
|
||||
|
||||
if (result == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (sender is Button button)
|
||||
{
|
||||
if (button.BindingContext is Playlist playlist)
|
||||
{
|
||||
playlist.ImageURL = result.FullPath;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Search methods
|
||||
|
||||
bool HasSameName(string name)
|
||||
{
|
||||
foreach(Playlist playlist in playlists)
|
||||
{
|
||||
if (playlist.Name == name)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check methods
|
||||
|
||||
void CheckNewName(object sender, EventArgs e)
|
||||
{
|
||||
if (sender is Entry entry)
|
||||
{
|
||||
if (entry.BindingContext is Playlist playlist)
|
||||
{
|
||||
if (!CheckRenaming(playlist))
|
||||
{
|
||||
entry.TextColor = Color.FromRgb(255, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
entry.TextColor = Color.FromRgb(255, 255, 255);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool CheckRenaming(Playlist playlist)
|
||||
{
|
||||
if (playlist.NewName.Length > Manager.MAX_NAME_LENGTH || string.IsNullOrWhiteSpace(playlist.NewName) || HasSameName(playlist.NewName))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Navigation
|
||||
|
||||
async void GoToPlaylist(object sender, EventArgs e)
|
||||
{
|
||||
await Navigation.PushAsync(new PlaylistPage());
|
||||
}
|
||||
}
|
Loading…
Reference in new issue