diff --git a/src/mpris.rs b/src/mpris.rs index a1ba5d9..8dd2a1b 100644 --- a/src/mpris.rs +++ b/src/mpris.rs @@ -494,7 +494,7 @@ fn run_dbus_server( let uri = match uri_data { Some(s) => { let spotify_uri = if s.contains("open.spotify.com") { - let regex = Regex::new(r"https?://open\.spotify\.com(/user)?/(album|track|playlist|show|episode)/(.+)(\?si=\S+)?").unwrap(); + let regex = Regex::new(r"https?://open\.spotify\.com(/user/\S+)?/(album|track|playlist|show|episode)/(.+)(\?si=\S+)?").unwrap(); let captures = regex.captures(s).unwrap(); let uri_type = &captures[2]; let id = &captures[3]; diff --git a/src/ui/listview.rs b/src/ui/listview.rs index a8ae710..4cacccf 100644 --- a/src/ui/listview.rs +++ b/src/ui/listview.rs @@ -579,28 +579,28 @@ impl ViewExt for ListView { let spotify = self.queue.get_spotify(); let re = - Regex::new("https://open\\.spotify\\.com/(user/[^/]+/)?([a-z]+)/.+").unwrap(); + Regex::new(r"https?://open\.spotify\.com/(user/[^/]+/)?(\S+)/(\S+)(\?si=\S+)?").unwrap(); let captures = re.captures(&url); if let Some(captures) = captures { let target: Option> = match &captures[2] { "track" => spotify - .track(&url) + .track(&captures[3]) .map(|track| Track::from(&track).as_listitem()), "album" => spotify - .album(&url) + .album(&captures[3]) .map(|album| Album::from(&album).as_listitem()), "playlist" => spotify - .playlist(&url) + .playlist(&captures[3]) .map(|playlist| Playlist::from(&playlist).as_listitem()), "artist" => spotify - .artist(&url) + .artist(&captures[3]) .map(|artist| Artist::from(&artist).as_listitem()), "episode" => spotify - .episode(&url) + .episode(&captures[3]) .map(|episode| Episode::from(&episode).as_listitem()), "show" => spotify - .get_show(&url) + .get_show(&captures[3]) .map(|show| Show::from(&show).as_listitem()), _ => None, };