From 282121667f4cefd5dde5cab08e76a32daf3a28aa Mon Sep 17 00:00:00 2001 From: ChinhLee <76194645+chinhkrb113@users.noreply.github.com> Date: Tue, 12 May 2026 17:00:17 +0700 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20resolve=20#721=20=E2=80=94=20Fix:=20?= =?UTF-8?q?Search=20crashes=20due=20to=20recent=20Spotify=20API=20changes?= =?UTF-8?q?=20(null=20items,=20missing=20tracks/publisher)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #721 Signed-off-by: ChinhLee <76194645+chinhkrb113@users.noreply.github.com> --- psst-gui/src/data/utils.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/psst-gui/src/data/utils.rs b/psst-gui/src/data/utils.rs index 979d5134..8927f047 100644 --- a/psst-gui/src/data/utils.rs +++ b/psst-gui/src/data/utils.rs @@ -43,6 +43,7 @@ impl Cached { #[derive(Deserialize)] pub struct Page { + #[serde(deserialize_with = "deserialize_ignore_nulls")] pub items: Vector, pub limit: usize, pub offset: usize, @@ -158,6 +159,16 @@ where Ok(Option::deserialize(deserializer)?.map(|Wrapper(val)| val)) } +pub fn deserialize_ignore_nulls<'de, D, T>(deserializer: D) -> Result, D::Error> +where + T: Clone, + T: Deserialize<'de>, + D: Deserializer<'de>, +{ + let items: Vec> = Vec::deserialize(deserializer)?; + Ok(items.into_iter().flatten().collect()) +} + pub fn deserialize_first_page<'de, D, T>(deserializer: D) -> Result, D::Error> where T: Clone, From 5018ac0ad26a6069991a86916569c2794f90d592 Mon Sep 17 00:00:00 2001 From: ChinhLee <76194645+chinhkrb113@users.noreply.github.com> Date: Tue, 12 May 2026 17:00:18 +0700 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20resolve=20#721=20=E2=80=94=20Fix:=20?= =?UTF-8?q?Search=20crashes=20due=20to=20recent=20Spotify=20API=20changes?= =?UTF-8?q?=20(null=20items,=20missing=20tracks/publisher)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #721 Signed-off-by: ChinhLee <76194645+chinhkrb113@users.noreply.github.com> --- psst-gui/src/data/playlist.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/psst-gui/src/data/playlist.rs b/psst-gui/src/data/playlist.rs index 01ad927f..577cbbeb 100644 --- a/psst-gui/src/data/playlist.rs +++ b/psst-gui/src/data/playlist.rs @@ -93,7 +93,7 @@ where total: Option, } - Ok(PlaylistTracksRef::deserialize(deserializer)?.total) + Ok(Option::::deserialize(deserializer)?.and_then(|r| r.total)) } fn deserialize_description<'de, D>(deserializer: D) -> Result, D::Error>