Added randomize/reverse songs logic. Added initial UI-side locking logic.
This commit is contained in:
@@ -147,6 +147,11 @@ public partial class PlaylistDetailViewModel : ViewModelBase
|
||||
public IAsyncRelayCommand DeletePlaylistCommand { get; }
|
||||
public IRelayCommand<SortItem> SortAllCommand { get; }
|
||||
public IRelayCommand<SortItem> SortSelectedCommand { get; }
|
||||
public IRelayCommand RandomizeAllCommand { get; }
|
||||
public IRelayCommand RandomizeSelectedCommand { get; }
|
||||
public IRelayCommand ReverseAllCommand { get; }
|
||||
public IRelayCommand ReverseSelectedCommand { get; }
|
||||
public IRelayCommand ToggleLockCommand { get; }
|
||||
|
||||
public bool IsUserUpdating { get; set; }
|
||||
private bool _isUserInitiatingSongChange;
|
||||
@@ -195,6 +200,11 @@ public partial class PlaylistDetailViewModel : ViewModelBase
|
||||
DeletePlaylistCommand = new AsyncRelayCommand(DeletePlaylistAsync);
|
||||
SortAllCommand = new RelayCommand<SortItem>(SortAllSongs);
|
||||
SortSelectedCommand = new RelayCommand<SortItem>(SortSelectedSongs, _ => AreMultipleSongsSelected());
|
||||
RandomizeAllCommand = new RelayCommand(RandomizeAllSongs);
|
||||
RandomizeSelectedCommand = new RelayCommand(RandomizeSelectedSongs, AreMultipleSongsSelected);
|
||||
ReverseAllCommand = new RelayCommand(ReverseAllSongs);
|
||||
ReverseSelectedCommand = new RelayCommand(ReverseSelectedSongs, AreMultipleSongsSelected);
|
||||
ToggleLockCommand = new RelayCommand(ToggleLock);
|
||||
|
||||
FilteredPlaylistSongs.CollectionChanged += OnFilteredPlaylistSongsCollectionChanged;
|
||||
|
||||
@@ -211,6 +221,8 @@ public partial class PlaylistDetailViewModel : ViewModelBase
|
||||
PasteSongsCommand.NotifyCanExecuteChanged();
|
||||
OpenFileLocationCommand.NotifyCanExecuteChanged();
|
||||
SortSelectedCommand.NotifyCanExecuteChanged();
|
||||
RandomizeSelectedCommand.NotifyCanExecuteChanged();
|
||||
ReverseSelectedCommand.NotifyCanExecuteChanged();
|
||||
}
|
||||
|
||||
private void OnFilteredPlaylistSongsCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
|
||||
@@ -669,7 +681,75 @@ public partial class PlaylistDetailViewModel : ViewModelBase
|
||||
if (SelectedPlaylistSongs.Count < 2)
|
||||
return;
|
||||
|
||||
string[] selectedPlaylistSongIds = [.. SelectedPlaylistSongs.Select(x => x.UID)];
|
||||
|
||||
Playlist.SortSongs([.. SelectedPlaylistSongs], [.. sortItem.SortOptions]);
|
||||
|
||||
RestoreSelectedSongs(selectedPlaylistSongIds);
|
||||
}
|
||||
|
||||
private void RestoreSelectedSongs(string[] playlistSongIds)
|
||||
{
|
||||
_dispatcherQueue.TryEnqueue(() =>
|
||||
{
|
||||
PlaylistSong[] selectedPlaylistSongs = [.. Playlist?.Songs.Where(x => playlistSongIds.Contains(x.UID)) ?? []];
|
||||
SelectedPlaylistSongs = new ObservableCollection<PlaylistSong>(selectedPlaylistSongs);
|
||||
});
|
||||
}
|
||||
|
||||
private void RandomizeAllSongs()
|
||||
{
|
||||
if (Playlist == null || Playlist.Songs.Count < 2)
|
||||
return;
|
||||
|
||||
Playlist.Randomize([.. Playlist.Songs]);
|
||||
}
|
||||
|
||||
private void RandomizeSelectedSongs()
|
||||
{
|
||||
if (Playlist == null || SelectedPlaylistSongs.Count < 2)
|
||||
return;
|
||||
|
||||
string[] selectedPlaylistSongIds = [.. SelectedPlaylistSongs.Select(x => x.UID)];
|
||||
|
||||
Playlist.Randomize([.. SelectedPlaylistSongs]);
|
||||
|
||||
RestoreSelectedSongs(selectedPlaylistSongIds);
|
||||
}
|
||||
|
||||
private void ReverseAllSongs()
|
||||
{
|
||||
if (Playlist == null || Playlist.Songs.Count < 2)
|
||||
return;
|
||||
|
||||
Playlist.Reverse([.. Playlist.Songs]);
|
||||
}
|
||||
|
||||
private void ReverseSelectedSongs()
|
||||
{
|
||||
if (Playlist == null || SelectedPlaylistSongs.Count < 2)
|
||||
return;
|
||||
|
||||
string[] selectedPlaylistSongIds = [.. SelectedPlaylistSongs.Select(x => x.UID)];
|
||||
|
||||
Playlist.Reverse([.. SelectedPlaylistSongs]);
|
||||
|
||||
RestoreSelectedSongs(selectedPlaylistSongIds);
|
||||
}
|
||||
|
||||
private void ToggleLock()
|
||||
{
|
||||
if (Playlist == null)
|
||||
return;
|
||||
|
||||
if (Playlist.IsLocked)
|
||||
{
|
||||
Playlist.Unlock();
|
||||
}
|
||||
else
|
||||
{
|
||||
Playlist.Lock();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
Reference in New Issue
Block a user