fix: albums without artists
This commit is contained in:
parent
0cbeb0524d
commit
f44bc6434a
5 changed files with 310 additions and 7 deletions
|
|
@ -277,9 +277,30 @@ impl MapResponse<MusicAlbum> for response::MusicPlaylist {
|
||||||
)))?;
|
)))?;
|
||||||
|
|
||||||
let mut subtitle_split = header.subtitle.split(util::DOT_SEPARATOR);
|
let mut subtitle_split = header.subtitle.split(util::DOT_SEPARATOR);
|
||||||
let year_txt = subtitle_split.try_swap_remove(2).map(|cmp| cmp.to_string());
|
|
||||||
|
|
||||||
let artists_p = subtitle_split.try_swap_remove(1);
|
let (year_txt, artists_p) = match subtitle_split.len() {
|
||||||
|
3.. => {
|
||||||
|
let year_txt = subtitle_split
|
||||||
|
.swap_remove(2)
|
||||||
|
.0
|
||||||
|
.get(0)
|
||||||
|
.map(|c| c.as_str().to_owned());
|
||||||
|
(year_txt, subtitle_split.try_swap_remove(1))
|
||||||
|
}
|
||||||
|
2 => {
|
||||||
|
// The second part may either be the year or the artist
|
||||||
|
let p2 = subtitle_split.swap_remove(1);
|
||||||
|
let is_year =
|
||||||
|
p2.0.len() == 1 && p2.0[0].as_str().chars().all(|c| c.is_ascii_digit());
|
||||||
|
if is_year {
|
||||||
|
(Some(p2.0[0].as_str().to_owned()), None)
|
||||||
|
} else {
|
||||||
|
(None, Some(p2))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => (None, None),
|
||||||
|
};
|
||||||
|
|
||||||
let (artists, by_va) = map_artists(artists_p);
|
let (artists, by_va) = map_artists(artists_p);
|
||||||
let album_type_txt = subtitle_split
|
let album_type_txt = subtitle_split
|
||||||
.try_swap_remove(0)
|
.try_swap_remove(0)
|
||||||
|
|
|
||||||
|
|
@ -796,14 +796,20 @@ impl MusicListMapper {
|
||||||
map_album_type(atype_txt.first_str(), self.lang);
|
map_album_type(atype_txt.first_str(), self.lang);
|
||||||
artists.clone()
|
artists.clone()
|
||||||
}
|
}
|
||||||
|
// Album on artist page with unknown year
|
||||||
|
(None, None, Some(artists), true) => artists.clone(),
|
||||||
// "Album", <"Oonagh"> (Album variants, new releases)
|
// "Album", <"Oonagh"> (Album variants, new releases)
|
||||||
(Some(atype_txt), Some(p2), _, false) => {
|
(Some(atype_txt), Some(p2), _, false) => {
|
||||||
album_type =
|
album_type =
|
||||||
map_album_type(atype_txt.first_str(), self.lang);
|
map_album_type(atype_txt.first_str(), self.lang);
|
||||||
map_artists(Some(p2))
|
map_artists(Some(p2))
|
||||||
}
|
}
|
||||||
// Album on artist page with unknown year
|
// "Album" (Album variants, no artist)
|
||||||
(None, None, Some(artists), true) => artists.clone(),
|
(Some(atype_txt), None, _, false) => {
|
||||||
|
album_type =
|
||||||
|
map_album_type(atype_txt.first_str(), self.lang);
|
||||||
|
(Vec::new(), true)
|
||||||
|
}
|
||||||
_ => {
|
_ => {
|
||||||
return Err(format!(
|
return Err(format!(
|
||||||
"could not parse subtitle of album {}",
|
"could not parse subtitle of album {}",
|
||||||
|
|
|
||||||
135
tests/snapshots/youtube__music_album_no_artist.snap
Normal file
135
tests/snapshots/youtube__music_album_no_artist.snap
Normal file
|
|
@ -0,0 +1,135 @@
|
||||||
|
---
|
||||||
|
source: tests/youtube.rs
|
||||||
|
assertion_line: 1391
|
||||||
|
expression: album
|
||||||
|
---
|
||||||
|
MusicAlbum(
|
||||||
|
id: "MPREb_bqWA6mAZFWS",
|
||||||
|
playlist_id: Some("OLAK5uy_mUiRbMqeQXFUH6h9KB87RcEmNtm45Qvs0"),
|
||||||
|
name: "Pedha Rasi Peddamma Katha",
|
||||||
|
cover: "[cover]",
|
||||||
|
artists: [],
|
||||||
|
artist_id: None,
|
||||||
|
description: None,
|
||||||
|
album_type: Ep,
|
||||||
|
year: Some(1968),
|
||||||
|
by_va: false,
|
||||||
|
tracks: [
|
||||||
|
TrackItem(
|
||||||
|
id: "EX7-pOQHPyE",
|
||||||
|
name: "Siva Manoranjani",
|
||||||
|
duration: Some(267),
|
||||||
|
cover: [],
|
||||||
|
artists: [
|
||||||
|
ArtistId(
|
||||||
|
id: Some("UC1C05NyYICFB2mVGn9_ttEw"),
|
||||||
|
name: "Dr. M. Balamuralikrishna",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
artist_id: Some("UC1C05NyYICFB2mVGn9_ttEw"),
|
||||||
|
album: Some(AlbumId(
|
||||||
|
id: "MPREb_bqWA6mAZFWS",
|
||||||
|
name: "Pedha Rasi Peddamma Katha",
|
||||||
|
)),
|
||||||
|
view_count: None,
|
||||||
|
is_video: false,
|
||||||
|
track_nr: Some(1),
|
||||||
|
by_va: false,
|
||||||
|
),
|
||||||
|
TrackItem(
|
||||||
|
id: "0AyWB-Quj4A",
|
||||||
|
name: "Kuluku Nadakula",
|
||||||
|
duration: Some(179),
|
||||||
|
cover: [],
|
||||||
|
artists: [
|
||||||
|
ArtistId(
|
||||||
|
id: Some("UCDqpyYkgWy2h03HamIfODjw"),
|
||||||
|
name: "Ghantasala, Chorus",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
artist_id: Some("UCDqpyYkgWy2h03HamIfODjw"),
|
||||||
|
album: Some(AlbumId(
|
||||||
|
id: "MPREb_bqWA6mAZFWS",
|
||||||
|
name: "Pedha Rasi Peddamma Katha",
|
||||||
|
)),
|
||||||
|
view_count: None,
|
||||||
|
is_video: false,
|
||||||
|
track_nr: Some(2),
|
||||||
|
by_va: false,
|
||||||
|
),
|
||||||
|
TrackItem(
|
||||||
|
id: "s0Sb-GZLXSM",
|
||||||
|
name: "Gulabi Buggalunna",
|
||||||
|
duration: Some(155),
|
||||||
|
cover: [],
|
||||||
|
artists: [
|
||||||
|
ArtistId(
|
||||||
|
id: None,
|
||||||
|
name: "L.r. Eswari",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
artist_id: None,
|
||||||
|
album: Some(AlbumId(
|
||||||
|
id: "MPREb_bqWA6mAZFWS",
|
||||||
|
name: "Pedha Rasi Peddamma Katha",
|
||||||
|
)),
|
||||||
|
view_count: None,
|
||||||
|
is_video: false,
|
||||||
|
track_nr: Some(3),
|
||||||
|
by_va: false,
|
||||||
|
),
|
||||||
|
TrackItem(
|
||||||
|
id: "P4XAaXjlCDA",
|
||||||
|
name: "Oh Javaraala",
|
||||||
|
duration: Some(229),
|
||||||
|
cover: [],
|
||||||
|
artists: [
|
||||||
|
ArtistId(
|
||||||
|
id: Some("UCl4iPtukwe7m0kIxUMskkgA"),
|
||||||
|
name: "S.p. Balasubrahmanyam, S. Janaki",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
artist_id: Some("UCl4iPtukwe7m0kIxUMskkgA"),
|
||||||
|
album: Some(AlbumId(
|
||||||
|
id: "MPREb_bqWA6mAZFWS",
|
||||||
|
name: "Pedha Rasi Peddamma Katha",
|
||||||
|
)),
|
||||||
|
view_count: None,
|
||||||
|
is_video: false,
|
||||||
|
track_nr: Some(4),
|
||||||
|
by_va: false,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
variants: [
|
||||||
|
AlbumItem(
|
||||||
|
id: "MPREb_h8ltx5oKvyY",
|
||||||
|
name: "Pedha Rasi Peddamma Katha",
|
||||||
|
cover: [
|
||||||
|
Thumbnail(
|
||||||
|
url: "https://lh3.googleusercontent.com/iZtBdPWBGNB-GAWvOp9seuYj5QqKrUYGSe-B5J026yxHqFSWv4zsxHy-LxX5LbFlnepOPRWNLrajO-_-=w226-h226-l90-rj",
|
||||||
|
width: 226,
|
||||||
|
height: 226,
|
||||||
|
),
|
||||||
|
Thumbnail(
|
||||||
|
url: "https://lh3.googleusercontent.com/iZtBdPWBGNB-GAWvOp9seuYj5QqKrUYGSe-B5J026yxHqFSWv4zsxHy-LxX5LbFlnepOPRWNLrajO-_-=w544-h544-l90-rj",
|
||||||
|
width: 544,
|
||||||
|
height: 544,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
artists: [
|
||||||
|
ArtistId(
|
||||||
|
id: Some("UCl4iPtukwe7m0kIxUMskkgA"),
|
||||||
|
name: "S P Balasubramaniam",
|
||||||
|
),
|
||||||
|
ArtistId(
|
||||||
|
id: Some("UCWgAqlYG7mXTUxrFiLyDSsg"),
|
||||||
|
name: "S Janaki",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
artist_id: Some("UCl4iPtukwe7m0kIxUMskkgA"),
|
||||||
|
album_type: Ep,
|
||||||
|
year: None,
|
||||||
|
by_va: false,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
139
tests/snapshots/youtube__music_album_version_no_artist.snap
Normal file
139
tests/snapshots/youtube__music_album_version_no_artist.snap
Normal file
|
|
@ -0,0 +1,139 @@
|
||||||
|
---
|
||||||
|
source: tests/youtube.rs
|
||||||
|
assertion_line: 1391
|
||||||
|
expression: album
|
||||||
|
---
|
||||||
|
MusicAlbum(
|
||||||
|
id: "MPREb_h8ltx5oKvyY",
|
||||||
|
playlist_id: Some("OLAK5uy_lIDfTi_k8V1RJ54MeJJGK_BduAeYbm-0s"),
|
||||||
|
name: "Pedha Rasi Peddamma Katha",
|
||||||
|
cover: "[cover]",
|
||||||
|
artists: [
|
||||||
|
ArtistId(
|
||||||
|
id: Some("UCl4iPtukwe7m0kIxUMskkgA"),
|
||||||
|
name: "S P Balasubramaniam",
|
||||||
|
),
|
||||||
|
ArtistId(
|
||||||
|
id: Some("UCWgAqlYG7mXTUxrFiLyDSsg"),
|
||||||
|
name: "S Janaki",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
artist_id: Some("UCl4iPtukwe7m0kIxUMskkgA"),
|
||||||
|
description: None,
|
||||||
|
album_type: Ep,
|
||||||
|
year: Some(1968),
|
||||||
|
by_va: false,
|
||||||
|
tracks: [
|
||||||
|
TrackItem(
|
||||||
|
id: "AKJ3IJZKPWc",
|
||||||
|
name: "Oh Javaraala",
|
||||||
|
duration: Some(228),
|
||||||
|
cover: [],
|
||||||
|
artists: [
|
||||||
|
ArtistId(
|
||||||
|
id: Some("UCl4iPtukwe7m0kIxUMskkgA"),
|
||||||
|
name: "S P Balasubramaniam",
|
||||||
|
),
|
||||||
|
ArtistId(
|
||||||
|
id: Some("UCWgAqlYG7mXTUxrFiLyDSsg"),
|
||||||
|
name: "S Janaki",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
artist_id: Some("UCl4iPtukwe7m0kIxUMskkgA"),
|
||||||
|
album: Some(AlbumId(
|
||||||
|
id: "MPREb_h8ltx5oKvyY",
|
||||||
|
name: "Pedha Rasi Peddamma Katha",
|
||||||
|
)),
|
||||||
|
view_count: None,
|
||||||
|
is_video: false,
|
||||||
|
track_nr: Some(1),
|
||||||
|
by_va: false,
|
||||||
|
),
|
||||||
|
TrackItem(
|
||||||
|
id: "WnpZuHNB33E",
|
||||||
|
name: "Siva Manoranjani",
|
||||||
|
duration: Some(266),
|
||||||
|
cover: [],
|
||||||
|
artists: [
|
||||||
|
ArtistId(
|
||||||
|
id: Some("UC1C05NyYICFB2mVGn9_ttEw"),
|
||||||
|
name: "M Balamuralikrishna",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
artist_id: Some("UC1C05NyYICFB2mVGn9_ttEw"),
|
||||||
|
album: Some(AlbumId(
|
||||||
|
id: "MPREb_h8ltx5oKvyY",
|
||||||
|
name: "Pedha Rasi Peddamma Katha",
|
||||||
|
)),
|
||||||
|
view_count: None,
|
||||||
|
is_video: false,
|
||||||
|
track_nr: Some(2),
|
||||||
|
by_va: false,
|
||||||
|
),
|
||||||
|
TrackItem(
|
||||||
|
id: "pRqoDGXg1-I",
|
||||||
|
name: "Gulabi Buggalunna",
|
||||||
|
duration: Some(154),
|
||||||
|
cover: [],
|
||||||
|
artists: [
|
||||||
|
ArtistId(
|
||||||
|
id: Some("UC_KQPMiRQl3CFAIKTVfCHwA"),
|
||||||
|
name: "L R Eswari",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
artist_id: Some("UC_KQPMiRQl3CFAIKTVfCHwA"),
|
||||||
|
album: Some(AlbumId(
|
||||||
|
id: "MPREb_h8ltx5oKvyY",
|
||||||
|
name: "Pedha Rasi Peddamma Katha",
|
||||||
|
)),
|
||||||
|
view_count: None,
|
||||||
|
is_video: false,
|
||||||
|
track_nr: Some(3),
|
||||||
|
by_va: false,
|
||||||
|
),
|
||||||
|
TrackItem(
|
||||||
|
id: "20vIKLJxjBY",
|
||||||
|
name: "Kuluku Nadakula",
|
||||||
|
duration: Some(178),
|
||||||
|
cover: [],
|
||||||
|
artists: [
|
||||||
|
ArtistId(
|
||||||
|
id: None,
|
||||||
|
name: "Ghantasala & Chorus",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
artist_id: Some("UCDqpyYkgWy2h03HamIfODjw"),
|
||||||
|
album: Some(AlbumId(
|
||||||
|
id: "MPREb_h8ltx5oKvyY",
|
||||||
|
name: "Pedha Rasi Peddamma Katha",
|
||||||
|
)),
|
||||||
|
view_count: None,
|
||||||
|
is_video: false,
|
||||||
|
track_nr: Some(4),
|
||||||
|
by_va: false,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
variants: [
|
||||||
|
AlbumItem(
|
||||||
|
id: "MPREb_bqWA6mAZFWS",
|
||||||
|
name: "Pedha Rasi Peddamma Katha",
|
||||||
|
cover: [
|
||||||
|
Thumbnail(
|
||||||
|
url: "https://lh3.googleusercontent.com/cyKTDdyucqYv8xfv0t3Vs9CkhmvssXRKsGzlWN_DU6A9uapXvovV0Ys2fXc9-r7Jv7V4UB1OD48iYH5z=w226-h226-l90-rj",
|
||||||
|
width: 226,
|
||||||
|
height: 226,
|
||||||
|
),
|
||||||
|
Thumbnail(
|
||||||
|
url: "https://lh3.googleusercontent.com/cyKTDdyucqYv8xfv0t3Vs9CkhmvssXRKsGzlWN_DU6A9uapXvovV0Ys2fXc9-r7Jv7V4UB1OD48iYH5z=w544-h544-l90-rj",
|
||||||
|
width: 544,
|
||||||
|
height: 544,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
artists: [],
|
||||||
|
artist_id: None,
|
||||||
|
album_type: Ep,
|
||||||
|
year: None,
|
||||||
|
by_va: true,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
@ -1379,6 +1379,8 @@ async fn music_playlist_not_found() {
|
||||||
#[case::show("show", "MPREb_cwzk8EUwypZ")]
|
#[case::show("show", "MPREb_cwzk8EUwypZ")]
|
||||||
#[case::unavailable("unavailable", "MPREb_AzuWg8qAVVl")]
|
#[case::unavailable("unavailable", "MPREb_AzuWg8qAVVl")]
|
||||||
#[case::no_year("no_year", "MPREb_F3Af9UZZVxX")]
|
#[case::no_year("no_year", "MPREb_F3Af9UZZVxX")]
|
||||||
|
#[case::version_no_artist("version_no_artist", "MPREb_h8ltx5oKvyY")]
|
||||||
|
#[case::no_artist("no_artist", "MPREb_bqWA6mAZFWS")]
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn music_album(#[case] name: &str, #[case] id: &str) {
|
async fn music_album(#[case] name: &str, #[case] id: &str) {
|
||||||
let rp = RustyPipe::builder().strict().build();
|
let rp = RustyPipe::builder().strict().build();
|
||||||
|
|
@ -1913,9 +1915,9 @@ async fn music_related(#[case] id: &str, #[case] full: bool) {
|
||||||
assert_gte(n_tracks, 20, "tracks");
|
assert_gte(n_tracks, 20, "tracks");
|
||||||
assert_gte(n_tracks_ytm, 10, "tracks_ytm");
|
assert_gte(n_tracks_ytm, 10, "tracks_ytm");
|
||||||
|
|
||||||
assert_gte(track_artists, n_tracks - 3, "track_artists");
|
assert_gte(track_artists, n_tracks - 4, "track_artists");
|
||||||
assert_gte(track_artist_ids, n_tracks - 3, "track_artists");
|
assert_gte(track_artist_ids, n_tracks - 4, "track_artists");
|
||||||
assert_gte(track_albums, n_tracks_ytm - 3, "track_artists");
|
assert_gte(track_albums, n_tracks_ytm - 4, "track_artists");
|
||||||
|
|
||||||
if full {
|
if full {
|
||||||
assert_gte(related.albums.len(), 10, "albums");
|
assert_gte(related.albums.len(), 10, "albums");
|
||||||
|
|
|
||||||
Reference in a new issue