Skip to content
This repository was archived by the owner on Jan 19, 2026. It is now read-only.

Commit 962d9b0

Browse files
committed
feat(Sort song box)
1 parent a3558f5 commit 962d9b0

File tree

9 files changed

+44
-13
lines changed

9 files changed

+44
-13
lines changed

Model/Media/Album/Album.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ public void BackTrack()
5353
PlayQueue.BackTrack();
5454
}
5555

56-
public void ForceStartTrackByIndex(int index)
56+
public void ForceStartTrack(Track.Track track)
5757
{
58-
PlayQueue.ForceStartTrackByIndex(index);
58+
PlayQueue.ForceStartTrack(track);
5959
}
6060

6161
public async Task LoadTracksMetadata()

Model/Media/IPlayable.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public interface IPlayable
1212
void Resume();
1313
void NextTrack();
1414
void BackTrack();
15-
void ForceStartTrackByIndex(int index);
15+
void ForceStartTrack(Track.Track track);
1616
Task LoadTracksMetadata();
1717
bool QueueIsEmpty();
1818
}

Model/Media/PlayBox/Playbox.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ public void BackTrack()
5555
PlayQueue.BackTrack();
5656
}
5757

58-
public void ForceStartTrackByIndex(int index)
58+
public void ForceStartTrack(Track.Track track)
5959
{
60-
PlayQueue.ForceStartTrackByIndex(index);
60+
PlayQueue.ForceStartTrack(track);
6161
}
6262

6363
public async Task LoadTracksMetadata()

Model/Media/PlayQueue.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,9 @@ public void NextTrack()
117117
logger.LogDebug("User skipped track");
118118
}
119119

120-
public void ForceStartTrackByIndex(int index)
120+
public void ForceStartTrack(Track.Track track)
121121
{
122+
var index = Tracks.IndexOf(track);
122123
_ = Play(index);
123124
}
124125

Model/Media/Playlist/Playlist.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ public void BackTrack()
6161
PlayQueue.BackTrack();
6262
}
6363

64-
public void ForceStartTrackByIndex(int index)
64+
public void ForceStartTrack(Track.Track track)
6565
{
66-
PlayQueue.ForceStartTrackByIndex(index);
66+
PlayQueue.ForceStartTrack(track);
6767
}
6868

6969
public async Task LoadTracksMetadata()

Services/PlayableManager/IPlayablesManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public interface IPlayablesManager
2020
void TrackBefore();
2121
void ResetSnuffle();
2222
void ResetLoop();
23-
void ForceStartTrackByIndex(int index);
23+
void ForceStartTrack(Track track);
2424

2525
event Action? PlayableChanged;
2626
event Action<bool> PlaybackStateChanged;

Services/PlayableManager/PlayablesManager.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,9 @@ public void ResetLoop()
9393
_settings.Avalonix.PlaySettings.Loop = !_settings.Avalonix.PlaySettings.Loop;
9494
}
9595

96-
public void ForceStartTrackByIndex(int index)
96+
public void ForceStartTrack(Track track)
9797
{
98-
PlayingPlayable?.ForceStartTrackByIndex(index);
98+
PlayingPlayable?.ForceStartTrack(track);
9999
}
100100

101101
public event Action<bool> PlaybackStateChanged

View/MainWindow.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@
121121
HorizontalAlignment="Center"
122122
VerticalAlignment="Top"
123123
ItemsAlignment="Center">
124+
<TextBox Name="SongBoxFindText" TextChanged="SongBoxFindText_OnTextChanged" Watermark="Track name"/>
124125
<ListBox Name="SongBox" Width="300" Height="300" />
125126
</WrapPanel>
126127
</Grid>

View/MainWindow.axaml.cs

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,7 @@ private void UpdateSongBox()
389389
SongBox.ItemsSource = _playablesManager.PlayingPlayable?.PlayQueue.Tracks
390390
.Where(track => !string.IsNullOrEmpty(track.Metadata.TrackName)).ToList()
391391
.Select(track => PostProcessedText(track.Metadata.TrackName, 20));
392+
SortSongBox();
392393
}
393394

394395
private void UpdateTrackPositionSlider()
@@ -497,19 +498,47 @@ private void SongBox_OnSelectionChanged(object? sender, TappedEventArgs tappedEv
497498
var castedSender = (ListBox)sender!;
498499
_logger.LogInformation(castedSender.SelectedIndex.ToString());
499500
var selectedIndex = castedSender.SelectedIndex;
500-
var selectedTrack = _playablesManager.PlayingPlayable?.PlayQueue.Tracks[selectedIndex];
501+
502+
503+
var sortedQueue = string.IsNullOrEmpty(SongBoxFindText.Text)
504+
? _playablesManager.PlayingPlayable!.PlayQueue.Tracks
505+
: _playablesManager.PlayingPlayable?.PlayQueue.Tracks.Where(i =>
506+
i.Metadata.TrackName!.Contains(SongBoxFindText.Text!,
507+
StringComparison.CurrentCultureIgnoreCase))
508+
.ToList()!;
509+
510+
var selectedTrack = sortedQueue[selectedIndex];
501511
if (selectedTrack != null)
502-
_playablesManager.ForceStartTrackByIndex(selectedIndex);
512+
_playablesManager.ForceStartTrack(selectedTrack);
503513
else
504514
_logger.LogError("No track selected");
505515
castedSender.Selection = null!;
516+
SortSongBox();
506517
}
507518
catch (Exception ex)
508519
{
509520
_logger.LogError("Error while force starting song: {ex}", ex.Message);
510521
}
511522
}
512523

524+
private void SongBoxFindText_OnTextChanged(object? sender, TextChangedEventArgs e)
525+
{
526+
SortSongBox();
527+
}
528+
529+
private void SortSongBox()
530+
{
531+
if (string.IsNullOrEmpty(SongBoxFindText.Text))
532+
{
533+
SongBox.ItemsSource = _playablesManager.PlayingPlayable?.PlayQueue.Tracks.Select(x => x.Metadata.TrackName).ToList();
534+
return;
535+
}
536+
SongBox.ItemsSource = _playablesManager.PlayingPlayable?.PlayQueue.Tracks
537+
.Where(track => !string.IsNullOrEmpty(track.Metadata.TrackName)).ToList().Where(i =>
538+
i.Metadata.TrackName!.Contains(SongBoxFindText.Text!, StringComparison.CurrentCultureIgnoreCase))
539+
.Select(track => PostProcessedText(track.Metadata.TrackName, 20));
540+
}
541+
513542
private string PostProcessedText(string? enterText, int maxSymbols)
514543
{
515544
try

0 commit comments

Comments
 (0)