[READ-ONLY] Mirror of https://github.com/probablykasper/ferrum. Music library app for Mac, Linux and Windows ferrum.kasper.space
electron linux macos music music-library music-player napi windows
0

Configure Feed

Select the types of activity you want to include in your feed.

Improve logging for missing playlist entries

Kasper (Jan 2, 2025, 9:13 PM +0100) 658f7890 817f2a2d

+18 -7
+6
src-native/library_types.rs
··· 377 377 378 378 // These are used to give each playlist entry an ID. This is for example helpful to keep track of a user's selection. These IDs are unique across the entire library, so that it works for folders folders. 379 379 pub type ItemId = u32; 380 + /// Track IDs indexed by item IDs 380 381 pub static TRACK_ID_MAP: RwLock<Vec<String>> = RwLock::new(Vec::new()); 381 382 382 383 pub fn new_item_ids_from_track_ids(track_ids: &[TrackID]) -> Vec<ItemId> { ··· 400 401 .iter() 401 402 .map(|playlist_item_id| playlist_track_id_map[*playlist_item_id as usize].clone()) 402 403 .collect() 404 + } 405 + 406 + pub fn get_track_id_from_item_id(playlist_item_id: ItemId) -> TrackID { 407 + let playlist_track_id_map = TRACK_ID_MAP.read().unwrap(); 408 + playlist_track_id_map[playlist_item_id as usize].clone() 403 409 } 404 410 405 411 #[derive(Serialize, Deserialize, Clone, Debug)]
+12 -7
src-native/sort.rs
··· 3 3 use crate::page::TracksPageOptions; 4 4 use crate::playlists::get_tracklist_item_ids; 5 5 use alphanumeric_sort::compare_str; 6 - use anyhow::Result; 6 + use anyhow::{Context, Result}; 7 7 use std::cmp::Ordering; 8 8 use std::time::Instant; 9 9 ··· 97 97 let id_map = TRACK_ID_MAP.read().unwrap(); 98 98 let tracks = library.get_tracks(); 99 99 100 - let mut items: Vec<_> = get_tracklist_item_ids(library, &options.playlist_id)? 100 + let items: Result<Vec<SortItem>> = get_tracklist_item_ids(library, &options.playlist_id)? 101 101 .into_iter() 102 - .map(|id| SortItem { 103 - item_id: id, 104 - track: tracks 105 - .get(&id_map[id as usize]) 106 - .expect("Track ID non-existant"), 102 + .enumerate() 103 + .map(|(i, id)| { 104 + Ok(SortItem { 105 + item_id: id, 106 + track: tracks.get(&id_map[id as usize]).context(format!( 107 + "Track {i} ({}) does not exist", 108 + id_map[id as usize] 109 + ))?, 110 + }) 107 111 }) 108 112 .collect(); 113 + let mut items = items?; 109 114 let item_count = items.len(); 110 115 111 116 if options.sort_key == "index" {