From ca8f1a854596e14a7bdb41a8ae1eb6da1bc39f62 Mon Sep 17 00:00:00 2001 From: Henrik Friedrichsen Date: Fri, 5 Mar 2021 21:38:57 +0100 Subject: [PATCH] Persist sorting orders for playlists Closes #436 --- src/config.rs | 9 +++++++++ src/ui/playlist.rs | 12 ++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/config.rs b/src/config.rs index 89e8227..edb1baf 100644 --- a/src/config.rs +++ b/src/config.rs @@ -6,6 +6,7 @@ use std::{fs, process}; use cursive::theme::Theme; use platform_dirs::AppDirs; +use crate::command::{SortDirection, SortKey}; use crate::playable::Playable; use crate::queue; @@ -53,12 +54,19 @@ pub struct ConfigTheme { pub search_match: Option, } +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct SortingOrder { + pub key: SortKey, + pub direction: SortDirection, +} + #[derive(Serialize, Deserialize, Debug, Clone)] pub struct UserState { pub volume: u16, pub shuffle: bool, pub repeat: queue::RepeatSetting, pub queue: Vec, + pub playlist_orders: HashMap, } impl Default for UserState { @@ -68,6 +76,7 @@ impl Default for UserState { shuffle: false, repeat: queue::RepeatSetting::None, queue: Vec::new(), + playlist_orders: HashMap::new(), } } } diff --git a/src/ui/playlist.rs b/src/ui/playlist.rs index ac5c81f..26e8ae5 100644 --- a/src/ui/playlist.rs +++ b/src/ui/playlist.rs @@ -33,6 +33,9 @@ impl PlaylistView { let spotify = queue.get_spotify(); let list = ListView::new(Arc::new(RwLock::new(tracks)), queue, library.clone()); + if let Some(order) = library.cfg.state().playlist_orders.get(&playlist.id) { + list.sort(&order.key, &order.direction); + } Self { playlist, @@ -74,6 +77,15 @@ impl ViewExt for PlaylistView { } if let Command::Sort(key, direction) = cmd { + self.library.cfg.with_state_mut(|mut state| { + let order = crate::config::SortingOrder { + key: key.clone(), + direction: direction.clone(), + }; + state + .playlist_orders + .insert(self.playlist.id.clone(), order); + }); self.list.sort(key, direction); return Ok(CommandResult::Consumed(None)); }