Skip to content

Commit 82e9914

Browse files
committed
feat: Add sorting for the playlist query
1 parent 0c2923d commit 82e9914

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

database/src/actions/mixes.rs

+31-2
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ pub async fn get_mixes_groups(
8181
Ok(result)
8282
}
8383

84-
// Then implement CollectionQuery
8584
#[async_trait]
8685
impl CollectionQuery for mixes::Model {
8786
fn collection_type() -> CollectionQueryType {
@@ -748,7 +747,7 @@ pub async fn query_mix_media_files(
748747
// Filter by playlist_ids if provided
749748
add_subquery_filter!(
750749
or_condition,
751-
playlist_ids,
750+
playlist_ids.clone(),
752751
media_file_playlists::Entity,
753752
media_file_playlists::Column::PlaylistId,
754753
media_file_playlists::Column::MediaFileId
@@ -1020,5 +1019,35 @@ pub async fn query_mix_media_files(
10201019

10211020
let sorted_files = sort_media_files(media_files, &track_ids);
10221021

1022+
let no_sorting = sort_track_number_asc.is_none()
1023+
&& sort_last_modified_asc.is_none()
1024+
&& sort_duration_asc.is_none()
1025+
&& sort_playedthrough_asc.is_none()
1026+
&& sort_skipped_asc.is_none();
1027+
1028+
let sorted_files = if no_sorting && playlist_ids.len() == 1 {
1029+
let playlist_id = playlist_ids[0];
1030+
let positions = media_file_playlists::Entity::find()
1031+
.filter(media_file_playlists::Column::PlaylistId.eq(playlist_id))
1032+
.filter(
1033+
media_file_playlists::Column::MediaFileId
1034+
.is_in(sorted_files.iter().map(|f| f.id).collect::<Vec<_>>()),
1035+
)
1036+
.order_by(media_file_playlists::Column::Position, Order::Asc)
1037+
.all(main_db)
1038+
.await?;
1039+
1040+
let position_map: HashMap<i32, i32> = positions
1041+
.into_iter()
1042+
.map(|p| (p.media_file_id, p.position))
1043+
.collect();
1044+
1045+
let mut sorted_files = sorted_files;
1046+
sorted_files.sort_by_key(|file| position_map.get(&file.id).cloned().unwrap_or(i32::MAX));
1047+
sorted_files
1048+
} else {
1049+
sorted_files
1050+
};
1051+
10231052
Ok(sorted_files)
10241053
}

0 commit comments

Comments
 (0)