···2121}
2222export declare function copyFile(from: string, to: string): void
2323export declare function atomicFileSave(filePath: string, content: string): void
2424+export declare function get_default_sort_desc(field: string): boolean
2425export interface Track {
2526 size: number
2627 duration: number
+14
src-native/library.rs
···9696 Bool,
9797}
98989999+#[napi(js_name = "get_default_sort_desc")]
100100+#[allow(dead_code)]
101101+pub fn get_default_sort_desc(field: String) -> bool {
102102+ if field == "index" {
103103+ return true;
104104+ }
105105+ let field = get_track_field_type(&field);
106106+ let desc = match field {
107107+ Some(TrackField::String) => false,
108108+ _ => true,
109109+ };
110110+ return desc;
111111+}
112112+99113pub fn get_track_field_type(field: &str) -> Option<TrackField> {
100114 let field = match field {
101115 "size" => TrackField::I64,
+5-3
src-native/sort.rs
···9393 let mut track_ids = get_tracklist_item_ids(library, &options.playlist_id)?;
94949595 if options.sort_key == "index" {
9696- // No need to sort for index. Note: Indexes descend from "first to last",
9797- // unlike other numbers which ascend from "high to low"
9696+ // Note: Indexes descend from "first to last", unlike
9797+ // other numbers which ascend from "high to low"
9898+ if !options.sort_desc {
9999+ track_ids.reverse();
100100+ }
98101 println!("Sort: {}ms", now.elapsed().as_millis());
9999- track_ids.reverse();
100102 return Ok(track_ids);
101103 }
102104