From 1f2c85f54425e05db443656fc2be04d45688e7c1 Mon Sep 17 00:00:00 2001 From: Henrik Friedrichsen Date: Fri, 15 Aug 2025 21:49:49 +0200 Subject: [PATCH] refactor: collapse nested `if let` --- src/commands.rs | 5 ++--- src/library.rs | 25 ++++++++++--------------- src/model/artist.rs | 5 ++--- src/model/playlist.rs | 4 +--- src/mpris.rs | 5 ++--- src/queue.rs | 10 ++++------ src/ui/artist.rs | 10 ++++------ src/ui/contextmenu.rs | 5 ++--- src/ui/layout.rs | 10 ++++------ src/ui/listview.rs | 10 ++++------ src/ui/statusbar.rs | 5 ++--- 11 files changed, 37 insertions(+), 57 deletions(-) diff --git a/src/commands.rs b/src/commands.rs index 382e52d..dad3562 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -281,8 +281,8 @@ impl CommandManager { Ok(None) } Command::AddCurrent => { - if let Some(track) = self.queue.get_current() { - if let Some(track) = track.track() { + if let Some(track) = self.queue.get_current() + && let Some(track) = track.track() { let dialog = ContextMenu::add_track_dialog( self.library.clone(), self.queue.get_spotify(), @@ -290,7 +290,6 @@ impl CommandManager { ); s.add_layer(dialog); } - } Ok(None) } Command::SaveCurrent => { diff --git a/src/library.rs b/src/library.rs index 8f81f7a..e033d8d 100644 --- a/src/library.rs +++ b/src/library.rs @@ -156,15 +156,14 @@ impl Library { .iter() .position(|i| i.id == id); - if let Some(position) = position { - if self.spotify.api.delete_playlist(id).is_ok() { + if let Some(position) = position + && self.spotify.api.delete_playlist(id).is_ok() { self.playlists.write().unwrap().remove(position); self.save_cache( &config::cache_path(CACHE_PLAYLISTS), &self.playlists.read().unwrap(), ); } - } } /// Set the playlist with `id` to contain only `tracks`. If the playlist already contains @@ -694,8 +693,8 @@ impl Library { return; } - if let Some(ref album_id) = album.id { - if self + if let Some(ref album_id) = album.id + && self .spotify .api .current_user_saved_albums_add(vec![album_id.as_str()]) @@ -703,7 +702,6 @@ impl Library { { return; } - } { let mut store = self.albums.write().unwrap(); @@ -727,8 +725,8 @@ impl Library { return; } - if let Some(ref album_id) = album.id { - if self + if let Some(ref album_id) = album.id + && self .spotify .api .current_user_saved_albums_delete(vec![album_id.as_str()]) @@ -736,7 +734,6 @@ impl Library { { return; } - } { let mut store = self.albums.write().unwrap(); @@ -765,8 +762,8 @@ impl Library { return; } - if let Some(ref artist_id) = artist.id { - if self + if let Some(ref artist_id) = artist.id + && self .spotify .api .user_follow_artists(vec![artist_id.as_str()]) @@ -774,7 +771,6 @@ impl Library { { return; } - } { let mut store = self.artists.write().unwrap(); @@ -801,8 +797,8 @@ impl Library { return; } - if let Some(ref artist_id) = artist.id { - if self + if let Some(ref artist_id) = artist.id + && self .spotify .api .user_unfollow_artists(vec![artist_id.as_str()]) @@ -810,7 +806,6 @@ impl Library { { return; } - } { let mut store = self.artists.write().unwrap(); diff --git a/src/model/artist.rs b/src/model/artist.rs index 1f588ad..f9c1d0d 100644 --- a/src/model/artist.rs +++ b/src/model/artist.rs @@ -33,11 +33,10 @@ impl Artist { } fn load_top_tracks(&mut self, spotify: Spotify) { - if let Some(artist_id) = &self.id { - if self.tracks.is_none() { + if let Some(artist_id) = &self.id + && self.tracks.is_none() { self.tracks = spotify.api.artist_top_tracks(artist_id).ok(); } - } } } diff --git a/src/model/playlist.rs b/src/model/playlist.rs index b81c5b8..c7770ce 100644 --- a/src/model/playlist.rs +++ b/src/model/playlist.rs @@ -88,12 +88,10 @@ impl Playlist { .api .append_tracks(&self.id, new_tracks, None) .is_ok() - { - if let Some(tracks) = &mut self.tracks { + && let Some(tracks) = &mut self.tracks { tracks.append(&mut new_tracks.to_vec()); has_modified = true; } - } if has_modified { library.playlist_update(self); diff --git a/src/mpris.rs b/src/mpris.rs index 9a002da..446c791 100644 --- a/src/mpris.rs +++ b/src/mpris.rs @@ -393,8 +393,8 @@ impl MprisPlayer { let uri_type = spotify_url.map(|s| s.uri_type); match uri_type { Some(UriType::Album) => { - if let Ok(a) = self.spotify.api.album(&id) { - if let Some(t) = &Album::from(&a).tracks { + if let Ok(a) = self.spotify.api.album(&id) + && let Some(t) = &Album::from(&a).tracks { let should_shuffle = self.queue.get_shuffle(); self.queue.clear(); let index = self.queue.append_next( @@ -404,7 +404,6 @@ impl MprisPlayer { ); self.queue.play(index, should_shuffle, should_shuffle) } - } } Some(UriType::Track) => { if let Ok(t) = self.spotify.api.track(&id) { diff --git a/src/queue.rs b/src/queue.rs index 24b683c..4e78767 100644 --- a/src/queue.rs +++ b/src/queue.rs @@ -359,11 +359,10 @@ impl Queue { let repeat = self.cfg.state().repeat; if repeat == RepeatSetting::RepeatTrack && !manual { - if let Some(index) = current { - if q[index].is_playable() { + if let Some(index) = current + && q[index].is_playable() { self.play(index, false, false); } - } } else if let Some(index) = self.next_index() { self.play(index, false, false); if repeat == RepeatSetting::RepeatTrack && manual { @@ -492,11 +491,10 @@ pub fn send_notification(summary_txt: &str, body_txt: &str, cover_url: Option "Unsave album", @@ -287,7 +287,6 @@ impl ContextMenu { ContextMenuAction::ToggleSavedStatus(a.as_listitem()), ); } - } // open detail view of artist/album { diff --git a/src/ui/layout.rs b/src/ui/layout.rs index 6603d78..2e93c55 100644 --- a/src/ui/layout.rs +++ b/src/ui/layout.rs @@ -165,11 +165,10 @@ impl Layout { } fn get_result(&self) -> Result, String> { - if let Some(t) = self.result_time { - if t.elapsed().unwrap() > Duration::from_secs(5) { + if let Some(t) = self.result_time + && t.elapsed().unwrap() > Duration::from_secs(5) { return Ok(None); } - } self.result.clone() } @@ -468,11 +467,10 @@ impl ViewExt for Layout { // Clear search results and return to search bar // If trying to focus search screen while already on it let search_view_name = "search"; - if view == search_view_name && self.focus == Some(search_view_name.into()) { - if let Some(stack) = self.stack.get_mut(search_view_name) { + if view == search_view_name && self.focus == Some(search_view_name.into()) + && let Some(stack) = self.stack.get_mut(search_view_name) { stack.clear(); } - } if self.screens.keys().any(|k| k == view) { self.set_screen(view.clone()); diff --git a/src/ui/listview.rs b/src/ui/listview.rs index 6ae1c3d..90c2761 100644 --- a/src/ui/listview.rs +++ b/src/ui/listview.rs @@ -275,8 +275,8 @@ impl ListView { let clicked_list_item = content.get(self.selected).map(ListItem::as_listitem); - if let Some(target) = clicked_list_item { - if let Some(view) = + if let Some(target) = clicked_list_item + && let Some(view) = target.open(self.queue.clone(), self.library.clone()) { return MouseHandleResult::Handled(EventResult::Consumed(Some( @@ -285,7 +285,6 @@ impl ListView { }), ))); } - } } } } @@ -544,8 +543,8 @@ impl ViewExt for ListView { content.get(self.selected).cloned() }; - if let Some(track) = item { - if let Some(track) = track.track() { + if let Some(track) = item + && let Some(track) = track.track() { let dialog = ContextMenu::add_track_dialog( self.library.clone(), self.queue.get_spotify(), @@ -553,7 +552,6 @@ impl ViewExt for ListView { ); return Ok(CommandResult::Modal(Box::new(dialog))); } - } return Ok(CommandResult::Consumed(None)); } diff --git a/src/ui/statusbar.rs b/src/ui/statusbar.rs index 8bbfb63..0d574b4 100644 --- a/src/ui/statusbar.rs +++ b/src/ui/statusbar.rs @@ -226,13 +226,12 @@ impl View for StatusBar { self.spotify.seek_relative(500); } - if event == MouseEvent::Press(MouseButton::Left) { - if let Some(playable) = self.queue.get_current() { + if event == MouseEvent::Press(MouseButton::Left) + && let Some(playable) = self.queue.get_current() { let f: f32 = position.x as f32 / self.last_size.x as f32; let new = playable.duration() as f32 * f; self.spotify.seek(new as u32); } - } } else if self.last_size.x - position.x < volume_len { if event == MouseEvent::WheelUp { let volume = self