···1414- Add `Ctrl+Tab` and `Ctrl+Shift+Tab` to select next/previous playlist
1515- Add `Back` and `Forward` shortcuts
1616- Selection no longer gets cleared when the page updates
1717+- Show playlist folder tracks in order
1718- Make time & volume sliders look ok
1819- Small design updates to tracklist header & filter textbox
1920- Respect user's locale time
+6-3
src-native/playlists.rs
···66};
77use crate::str_to_option;
88use anyhow::{bail, Context, Result};
99+use linked_hash_map::LinkedHashMap;
910use napi::{Env, JsUnknown};
1011use std::collections::{HashMap, HashSet};
1112use std::path::PathBuf;
···417418 match library.get_tracklist(playlist_id)? {
418419 TrackList::Playlist(playlist) => Ok(playlist.tracks.clone()),
419420 TrackList::Folder(folder) => {
420420- let mut ids: HashSet<ItemId> = HashSet::new();
421421+ let mut ids: LinkedHashMap<ItemId, ()> = LinkedHashMap::new();
421422 for child in &folder.children {
422423 let child_ids = get_tracklist_item_ids(library, &child)?;
423423- ids.extend(child_ids);
424424+ for child_id in child_ids {
425425+ ids.insert(child_id, ());
426426+ }
424427 }
425425- Ok(ids.into_iter().collect())
428428+ Ok(ids.into_iter().map(|(id, _)| id).collect())
426429 }
427430 TrackList::Special(special) => match special.name {
428431 SpecialTrackListName::Root => {