tests: completed for all languages

fix: parsing search videos without duration
This commit is contained in:
ThetaDev 2023-05-05 15:18:37 +02:00
parent b88faa9d05
commit bb396968dc
20 changed files with 927 additions and 688 deletions

View file

@ -15,6 +15,24 @@ testyt10:
cargo test --all-features --test youtube; \ cargo test --all-features --test youtube; \
done done
testintl:
#!/usr/bin/env bash
set -e
LANGUAGES=(
"af" "am" "ar" "as" "az" "be" "bg" "bn" "bs" "ca" "cs" "da" "de" "el" "en" "en-GB" "en-IN"
"es" "es-419" "es-US" "et" "eu" "fa" "fi" "fil" "fr" "fr-CA" "gl" "gu"
"hi" "hr" "hu" "hy" "id" "is" "it" "iw" "ja" "ka" "kk" "km" "kn" "ko" "ky"
"lo" "lt" "lv" "mk" "ml" "mn" "mr" "ms" "my" "ne" "nl" "no" "or" "pa" "pl"
"pt" "pt-PT" "ro" "ru" "si" "sk" "sl" "sq" "sr" "sr-Latn" "sv" "sw" "ta"
"te" "th" "tr" "uk" "ur" "uz" "vi" "zh-CN" "zh-HK" "zh-TW" "zu"
)
for YT_LANG in "${LANGUAGES[@]}"; do \
echo "---TESTS FOR $YT_LANG ---"; \
YT_LANG="$YT_LANG" cargo test --test youtube -- --skip music_artist --skip music_playlist --skip get_video_details --skip startpage; \
echo "--- $YT_LANG COMPLETED ---"; \
sleep 10; \
done
testfiles: testfiles:
cargo run -p rustypipe-codegen -- -d . download-testfiles cargo run -p rustypipe-codegen -- -d . download-testfiles

View file

@ -67,11 +67,8 @@ pub async fn collect_dates(project_root: &Path, concurrency: usize) {
// These are the sample playlists // These are the sample playlists
let cases = [ let cases = [
( (DateCase::Today, "PLMC9KNkIncKtPzgY-5rmhvj7fax8fdxoj"),
DateCase::Today, (DateCase::Yesterday, "PLcirGkCPmbmFeQ1sm4wFciF03D_EroIfr"),
"RDCLAK5uy_kj3rhiar1LINmyDcuFnXihEO0K1NQa2jI",
),
(DateCase::Yesterday, "PL7zsB-C3aNu2yRY2869T0zj1FhtRIu5am"),
(DateCase::Ago, "PLmB6td997u3kUOrfFwkULZ910ho44oQSy"), (DateCase::Ago, "PLmB6td997u3kUOrfFwkULZ910ho44oQSy"),
(DateCase::Jan, "PL1J-6JOckZtFjcni6Xj1pLYglJp6JCpKD"), (DateCase::Jan, "PL1J-6JOckZtFjcni6Xj1pLYglJp6JCpKD"),
(DateCase::Feb, "PL1J-6JOckZtETrbzwZE7mRIIK6BzWNLAs"), (DateCase::Feb, "PL1J-6JOckZtETrbzwZE7mRIIK6BzWNLAs"),

32
notes/dictionary.md Normal file
View file

@ -0,0 +1,32 @@
# Parsing localized data from YouTube
Since YouTube's API is outputting the website as it should be rendered by the client,
the data received from the API is already localized. This affects dates, times and
number formats.
To be able to successfully parse them, we need to collect samples in every language and
build a dictionary.
### Timeago
- Relative date format used for video upload dates and comments.
- Examples: "1 hour ago", "3 months ago"
### Playlist dates
- Playlist update dates are always day-accurate, either as textual dates or in the form
of "n days ago"
- Examples: "Last updated on Jan 3, 2020", "Updated today", "Updated yesterday",
"Updated 3 days ago"
### Video duration
- In Danisch ("da") video durations are formatted using dots instead of colons. Example:
"12.31", "3.03.52"
### Numbers
- Large numbers (subscriber/view counts) are rounded and shown using a decimal prefix
- Examples: "1.4M views"
- There is an exception for the value 0 ("no views") and in some languages for the value
1 (pt: "Um vídeo")

View file

@ -587,7 +587,9 @@ impl MusicListMapper {
(subtitle_parts.rev().next(), None, None) (subtitle_parts.rev().next(), None, None)
} else { } else {
// Skip first part (track type) // Skip first part (track type)
if subtitle_parts.len() > 3 { if subtitle_parts.len() > 3
|| (is_video && subtitle_parts.len() == 2)
{
subtitle_parts.next(); subtitle_parts.next();
} }

View file

@ -536,6 +536,11 @@ mod tests {
"Last updated on Jun 04, 2003", "Last updated on Jun 04, 2003",
Some(ParsedDate::Absolute(date!(2003-6-4))) Some(ParsedDate::Absolute(date!(2003-6-4)))
)] )]
#[case(
Language::Bn,
"যোগ দিয়েছেন 24 সেপ, 2013",
Some(ParsedDate::Absolute(date!(2013-9-24)))
)]
fn t_parse_date( fn t_parse_date(
#[case] lang: Language, #[case] lang: Language,
#[case] textual_date: &str, #[case] textual_date: &str,

File diff suppressed because it is too large Load diff

View file

@ -143,7 +143,7 @@ where
/// and return the duration in seconds. /// and return the duration in seconds.
pub fn parse_video_length(text: &str) -> Option<u32> { pub fn parse_video_length(text: &str) -> Option<u32> {
static VIDEO_LENGTH_REGEX: Lazy<Regex> = static VIDEO_LENGTH_REGEX: Lazy<Regex> =
Lazy::new(|| Regex::new(r#"(?:(\d+):)?(\d{1,2}):(\d{2})"#).unwrap()); Lazy::new(|| Regex::new(r#"(?:(\d+)[:.])?(\d{1,2})[:.](\d{2})"#).unwrap());
VIDEO_LENGTH_REGEX.captures(text).map(|cap| { VIDEO_LENGTH_REGEX.captures(text).map(|cap| {
let hrs = cap let hrs = cap
.get(1) .get(1)
@ -294,11 +294,40 @@ where
} }
} else if c == decimal_point { } else if c == decimal_point {
after_point = true; after_point = true;
} else if !matches!(c, '\u{200b}' | '.' | ',') { } else if !matches!(
c,
'\u{200b}'
| '\u{202b}'
| '\u{202c}'
| '\u{202e}'
| '\u{200e}'
| '\u{200f}'
| '.'
| ','
) {
filtered.push(c); filtered.push(c);
} }
} }
(ok_or_bail!(buf.parse::<u64>(), None), exp, filtered) if buf.is_empty() {
// TODO: integrate into dictionary
if lang == Language::Ar && string.contains("واحد")
|| lang == Language::Iw && string.contains("אחד")
|| lang == Language::As && string.contains('১') // ১টা
|| lang == Language::Bn && string.contains('১')
|| lang == Language::Fa && string.contains('۱')
|| lang == Language::Is && (string.contains("Eitt ") || string.contains("Einn "))
|| lang == Language::My && string.contains('၁')
|| lang == Language::No && string.contains("Én ")
|| lang == Language::Pt && string.contains("Um ")
|| lang == Language::Ro && string.contains("Un ")
{
return 1.try_into().ok();
}
return None;
} else {
(buf.parse::<u64>().ok()?, exp, filtered)
}
}; };
let lookup_token = |token: &str| match token { let lookup_token = |token: &str| match token {
@ -467,6 +496,17 @@ pub(crate) mod tests {
assert_eq!(res, expect); assert_eq!(res, expect);
} }
#[rstest]
#[case(
Language::Iw,
"\u{200f}\u{202b}3.36M\u{200f}\u{202c}\u{200f} \u{200f}מנויים\u{200f}",
3360000
)]
fn t_parse_large_numstr_1(#[case] lang: Language, #[case] string: &str, #[case] expect: u64) {
let res = parse_large_numstr::<u64>(string, lang).unwrap();
assert_eq!(res, expect);
}
#[test] #[test]
fn t_parse_large_numstr_samples() { fn t_parse_large_numstr_samples() {
let json_path = path!(*TESTFILES / "dict" / "large_number_samples.json"); let json_path = path!(*TESTFILES / "dict" / "large_number_samples.json");

View file

@ -141,8 +141,7 @@
"آلاف": 3, "آلاف": 3,
"ألف": 3, "ألف": 3,
"مليار": 9, "مليار": 9,
"مليون": 6, "مليون": 6
"واحد": 0
}, },
"album_types": { "album_types": {
"أغنية منفردة": "Single", "أغنية منفردة": "Single",
@ -176,7 +175,12 @@
"নিঃটা": 6, "নিঃটা": 6,
"নিযুতটা": 6, "নিযুতটা": 6,
"লাখটা": 5, "লাখটা": 5,
"হাজাৰটা": 3 "হাজাৰটা": 3,
"লাখ": 5,
"নিযুত": 6,
"হাজাৰ": 3,
"হা": 3,
"লা": 5
}, },
"album_types": { "album_types": {
"ep": "Ep", "ep": "Ep",
@ -345,18 +349,18 @@
}, },
"date_order": "DY", "date_order": "DY",
"months": { "months": {
"অক্টোবর,": 10, "অক্টো,": 10,
"আগস্ট,": 8, "আগস্ট,": 8,
"এপ্রি,": 4, "এপ্রি,": 4,
"জানু,": 1, "জানু,": 1,
"জুন,": 6, "জুন,": 6,
"জুলাই,": 7, "জুল,": 7,
"ডিসেম্বর,": 12, "ডিসেম্বর,": 12,
"নভেম্বর,": 11, "নভে,": 11,
"ফেব,": 2, "ফেব,": 2,
"মার্চ,": 3, "মার্চ,": 3,
"মে,": 5, "মে,": 5,
"সেপ্টেম্বর,": 9 "সেপ,": 9
}, },
"timeago_nd_tokens": { "timeago_nd_tokens": {
"আজ": "0D", "আজ": "0D",
@ -367,7 +371,10 @@
"কোটি": 7, "কোটি": 7,
"লাটি": 5, "লাটি": 5,
"শত": 2, "শত": 2,
"হাটি": 3 "হাটি": 3,
"হা": 3,
"লা": 5,
"কো": 7
}, },
"album_types": { "album_types": {
"অডিওবুক": "Audiobook", "অডিওবুক": "Audiobook",
@ -399,7 +406,8 @@
"sedmicu": "W", "sedmicu": "W",
"sekunde": "s", "sekunde": "s",
"sekundi": "s", "sekundi": "s",
"sekundu": "s" "sekundu": "s",
"sekunda": "s"
}, },
"date_order": "DY", "date_order": "DY",
"months": { "months": {
@ -504,7 +512,10 @@
"sekundami": "s", "sekundami": "s",
"sekundou": "s", "sekundou": "s",
"týdnem": "W", "týdnem": "W",
"týdny": "W" "týdny": "W",
"sekund": "s",
"sekunda": "s",
"minuta": "m"
}, },
"date_order": "DMY", "date_order": "DMY",
"months": {}, "months": {},
@ -1267,6 +1278,7 @@
"sekunde": "s", "sekunde": "s",
"sekundi": "s", "sekundi": "s",
"sekundu": "s", "sekundu": "s",
"sekunda": "s",
"tjedan": "W", "tjedan": "W",
"tjedna": "W" "tjedna": "W"
}, },
@ -1313,10 +1325,12 @@
"hónappal": "M", "hónappal": "M",
"másodperccel": "s", "másodperccel": "s",
"másodperce": "s", "másodperce": "s",
"másodperc": "s",
"napja": "D", "napja": "D",
"nappal": "D", "nappal": "D",
"perccel": "m", "perccel": "m",
"perce": "m", "perce": "m",
"perc": "m",
"éve": "Y", "éve": "Y",
"évvel": "Y", "évvel": "Y",
"órája": "h", "órája": "h",
@ -1457,8 +1471,11 @@
"mánuðum": "M", "mánuðum": "M",
"mínútu": "m", "mínútu": "m",
"mínútum": "m", "mínútum": "m",
"mínúta": "m",
"sekúndu": "s", "sekúndu": "s",
"sekúndum": "s", "sekúndum": "s",
"sekúnda": "s",
"sekúndur": "s",
"viku": "W", "viku": "W",
"vikum": "W", "vikum": "W",
"ári": "Y", "ári": "Y",
@ -1566,6 +1583,7 @@
"שנה": "Y", "שנה": "Y",
"שניות": "s", "שניות": "s",
"שנייה": "s", "שנייה": "s",
"שניה": "s",
"שנים": "Y", "שנים": "Y",
"שנתיים": "2Y", "שנתיים": "2Y",
"שעה": "h", "שעה": "h",
@ -1594,9 +1612,9 @@
}, },
"comma_decimal": false, "comma_decimal": false,
"number_tokens": { "number_tokens": {
"B": 9, "B": 9,
"K": 3, "K": 3,
"M": 6 "M": 6
}, },
"album_types": { "album_types": {
"אלבום": "Album", "אלבום": "Album",
@ -1647,7 +1665,9 @@
"საათის": "h", "საათის": "h",
"წამის": "s", "წამის": "s",
"წლის": "Y", "წლის": "Y",
"წუთის": "m" "წუთის": "m",
"წუთი": "m",
"წამი": "s"
}, },
"date_order": "DY", "date_order": "DY",
"months": { "months": {
@ -1738,7 +1758,9 @@
"នាទីមុន": "m", "នាទីមុន": "m",
"ម៉ោងមុន": "h", "ម៉ោងមុន": "h",
"វិនាទីមុន": "s", "វិនាទីមុន": "s",
"សប្ដាហ៍មុន": "W" "សប្ដាហ៍មុន": "W",
"នាទី": "m",
"វិនាទី": "s"
}, },
"date_order": "DY", "date_order": "DY",
"months": { "months": {
@ -1757,6 +1779,7 @@
}, },
"timeago_nd_tokens": { "timeago_nd_tokens": {
"បានធ្វើបច្ចុប្បន្នភាពថ្ងៃនេះ": "0D", "បានធ្វើបច្ចុប្បន្នភាពថ្ងៃនេះ": "0D",
"បានធ្វើបច្ចុប្បន្នភាព​នៅថ្ងៃនេះ": "0D",
"បានធ្វើបច្ចុប្បន្នភាពម្សិលមិញ": "1D" "បានធ្វើបច្ចុប្បន្នភាពម្សិលមិញ": "1D"
}, },
"comma_decimal": true, "comma_decimal": true,
@ -1790,7 +1813,9 @@
"ವಾರಗಳ": "W", "ವಾರಗಳ": "W",
"ವಾರದ": "W", "ವಾರದ": "W",
"ಸೆಕೆಂಡುಗಳ": "s", "ಸೆಕೆಂಡುಗಳ": "s",
"ಸೆಕೆಂಡ್": "s" "ಸೆಕೆಂಡ್": "s",
"ಸೆಕೆಂಡುಗಳು": "s",
"ನಿಮಿಷವು": "m"
}, },
"date_order": "DY", "date_order": "DY",
"months": { "months": {
@ -1845,7 +1870,10 @@
"number_tokens": { "number_tokens": {
"만회": 4, "만회": 4,
"억회": 8, "억회": 8,
"천회": 3 "천회": 3,
"만명": 4,
"억명": 8,
"천명": 3
}, },
"album_types": { "album_types": {
"ep": "Ep", "ep": "Ep",
@ -1910,7 +1938,9 @@
"ມື້ກ່ອນ": "D", "ມື້ກ່ອນ": "D",
"ວິນາທີກ່ອນ": "s", "ວິນາທີກ່ອນ": "s",
"ອາທິດກ່ອນ": "W", "ອາທິດກ່ອນ": "W",
"ເດືອນກ່ອນ": "M" "ເດືອນກ່ອນ": "M",
"ວິນາທີ": "s",
"ນາທີ": "m"
}, },
"date_order": "DY", "date_order": "DY",
"months": { "months": {
@ -1958,6 +1988,7 @@
"metų": "Y", "metų": "Y",
"minutes": "m", "minutes": "m",
"minutę": "m", "minutę": "m",
"minutė": "m",
"minučių": "m", "minučių": "m",
"mėnesius": "M", "mėnesius": "M",
"mėnesių": "M", "mėnesių": "M",
@ -1967,6 +1998,8 @@
"savaičių": "W", "savaičių": "W",
"sekundes": "s", "sekundes": "s",
"sekundę": "s", "sekundę": "s",
"sekundės": "s",
"sekundė": "s",
"sekundžių": "s", "sekundžių": "s",
"valandas": "h", "valandas": "h",
"valandą": "h", "valandą": "h",
@ -2138,7 +2171,9 @@
"секундын": "s", "секундын": "s",
"хоногийн": "W", "хоногийн": "W",
"цагийн": "h", "цагийн": "h",
"өдрийн": "D" "өдрийн": "D",
"секунд": "s",
"минут": "m"
}, },
"date_order": "YMD", "date_order": "YMD",
"months": {}, "months": {},
@ -2177,7 +2212,9 @@
"वर्षांपूर्वी": "Y", "वर्षांपूर्वी": "Y",
"वर्षापूर्वी": "Y", "वर्षापूर्वी": "Y",
"सेकंदांपूर्वी": "s", "सेकंदांपूर्वी": "s",
"सेकंदापूर्वी": "s" "सेकंदापूर्वी": "s",
"सेकंद": "s",
"मिनिट": "m"
}, },
"date_order": "DY", "date_order": "DY",
"months": { "months": {
@ -2371,18 +2408,18 @@
}, },
"date_order": "DY", "date_order": "DY",
"months": { "months": {
"apr.": 4, "apr": 4,
"aug.": 8, "aug": 8,
"dec.": 12, "dec": 12,
"feb.": 2, "feb": 2,
"jan.": 1, "jan": 1,
"jul.": 7, "jul": 7,
"jun.": 6, "jun": 6,
"mei": 5, "mei": 5,
"mrt.": 3, "mrt": 3,
"nov.": 11, "nov": 11,
"okt.": 10, "okt": 10,
"sep.": 9 "sep": 9
}, },
"timeago_nd_tokens": { "timeago_nd_tokens": {
"gisteren": "1D", "gisteren": "1D",
@ -2462,7 +2499,8 @@
"ମାସ": "M", "ମାସ": "M",
"ମିନିଟ୍": "m", "ମିନିଟ୍": "m",
"ସପ୍ତାହ": "W", "ସପ୍ତାହ": "W",
"ସେକେଣ୍ଡ": "s" "ସେକେଣ୍ଡ": "s",
"ମିନିଟ୍‌": "m"
}, },
"date_order": "DY", "date_order": "DY",
"months": { "months": {
@ -2487,7 +2525,10 @@
"number_tokens": { "number_tokens": {
"ନିଟି": 6, "ନିଟି": 6,
"ବିଟି": 9, "ବିଟି": 9,
"ହଟି": 3 "ହଟି": 3,
"ବିଜଣ": 9,
"ନିଜଣ": 6,
"ହଜଣ": 3
}, },
"album_types": { "album_types": {
"ep": "Ep", "ep": "Ep",
@ -2563,10 +2604,12 @@
"minut": "m", "minut": "m",
"minuty": "m", "minuty": "m",
"minutę": "m", "minutę": "m",
"minuta": "m",
"rok": "Y", "rok": "Y",
"sekund": "s", "sekund": "s",
"sekundy": "s", "sekundy": "s",
"sekundę": "s", "sekundę": "s",
"sekunda": "s",
"tydzień": "W", "tydzień": "W",
"tygodnie": "W" "tygodnie": "W"
}, },
@ -2861,10 +2904,13 @@
"mesiacom": "M", "mesiacom": "M",
"minútami": "m", "minútami": "m",
"minútou": "m", "minútou": "m",
"minúta": "m",
"rokmi": "Y", "rokmi": "Y",
"rokom": "Y", "rokom": "Y",
"sekundami": "s", "sekundami": "s",
"sekundou": "s", "sekundou": "s",
"sekúnd": "s",
"sekunda": "s",
"týždňami": "W", "týždňami": "W",
"týždňom": "W" "týždňom": "W"
}, },
@ -2905,9 +2951,12 @@
"minutama": "m", "minutama": "m",
"minutami": "m", "minutami": "m",
"minuto": "m", "minuto": "m",
"minuta": "m",
"sekundama": "s", "sekundama": "s",
"sekundami": "s", "sekundami": "s",
"sekundo": "s", "sekundo": "s",
"sekund": "s",
"sekunda": "s",
"tedni": "W", "tedni": "W",
"tednom": "W", "tednom": "W",
"tednoma": "W", "tednoma": "W",
@ -3009,13 +3058,15 @@
"месеца": "M", "месеца": "M",
"месеци": "M", "месеци": "M",
"минута": "m", "минута": "m",
"минут": "m",
"недеље": "W", "недеље": "W",
"недељу": "W", "недељу": "W",
"сат": "h", "сат": "h",
"сата": "h", "сата": "h",
"сати": "h", "сати": "h",
"секунде": "s", "секунде": "s",
"секунди": "s" "секунди": "s",
"секунда": "s"
}, },
"date_order": "DMY", "date_order": "DMY",
"months": {}, "months": {},
@ -3050,6 +3101,7 @@
"meseca": "M", "meseca": "M",
"meseci": "M", "meseci": "M",
"minuta": "m", "minuta": "m",
"minut": "m",
"nedelja": "W", "nedelja": "W",
"nedelje": "W", "nedelje": "W",
"nedelju": "W", "nedelju": "W",
@ -3057,7 +3109,8 @@
"sata": "h", "sata": "h",
"sati": "h", "sati": "h",
"sekunde": "s", "sekunde": "s",
"sekundi": "s" "sekundi": "s",
"sekunda": "s"
}, },
"date_order": "DMY", "date_order": "DMY",
"months": {}, "months": {},
@ -3192,7 +3245,10 @@
"வாரங்களுக்கு": "W", "வாரங்களுக்கு": "W",
"வாரம்": "W", "வாரம்": "W",
"விநாடிகளுக்கு": "s", "விநாடிகளுக்கு": "s",
"விநாடிக்கு": "s" "விநாடிக்கு": "s",
"விநாடிகள்": "s",
"விநாடி": "s",
"நிமிடம்": "m"
}, },
"date_order": "DY", "date_order": "DY",
"months": { "months": {
@ -3243,7 +3299,8 @@
"సంవత్సరం": "Y", "సంవత్సరం": "Y",
"సంవత్సరాల": "Y", "సంవత్సరాల": "Y",
"సెకను": "s", "సెకను": "s",
"సెకన్ల": "s" "సెకన్ల": "s",
"సెకన్లు": "s"
}, },
"date_order": "DY", "date_order": "DY",
"months": { "months": {

File diff suppressed because it is too large Load diff

View file

@ -5,7 +5,7 @@ expression: album
MusicAlbum( MusicAlbum(
id: "MPREb_u1I69lSAe5v", id: "MPREb_u1I69lSAe5v",
playlist_id: Some("OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY"), playlist_id: Some("OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY"),
name: "Waldbrand", name: "[name]",
cover: "[cover]", cover: "[cover]",
artists: [ artists: [
ArtistId( ArtistId(
@ -14,7 +14,7 @@ MusicAlbum(
), ),
], ],
artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"),
description: None, description: "[description]",
album_type: Ep, album_type: Ep,
year: Some(2016), year: Some(2016),
by_va: false, by_va: false,
@ -33,7 +33,7 @@ MusicAlbum(
artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_u1I69lSAe5v", id: "MPREb_u1I69lSAe5v",
name: "Waldbrand", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -54,7 +54,7 @@ MusicAlbum(
artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_u1I69lSAe5v", id: "MPREb_u1I69lSAe5v",
name: "Waldbrand", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -75,7 +75,7 @@ MusicAlbum(
artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_u1I69lSAe5v", id: "MPREb_u1I69lSAe5v",
name: "Waldbrand", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -96,7 +96,7 @@ MusicAlbum(
artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_u1I69lSAe5v", id: "MPREb_u1I69lSAe5v",
name: "Waldbrand", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -117,7 +117,7 @@ MusicAlbum(
artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"), artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_u1I69lSAe5v", id: "MPREb_u1I69lSAe5v",
name: "Waldbrand", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,

View file

@ -5,11 +5,11 @@ expression: album
MusicAlbum( MusicAlbum(
id: "MPREb_bqWA6mAZFWS", id: "MPREb_bqWA6mAZFWS",
playlist_id: Some("OLAK5uy_mUiRbMqeQXFUH6h9KB87RcEmNtm45Qvs0"), playlist_id: Some("OLAK5uy_mUiRbMqeQXFUH6h9KB87RcEmNtm45Qvs0"),
name: "Pedha Rasi Peddamma Katha", name: "[name]",
cover: "[cover]", cover: "[cover]",
artists: [], artists: [],
artist_id: None, artist_id: None,
description: None, description: "[description]",
album_type: Ep, album_type: Ep,
year: Some(1968), year: Some(1968),
by_va: false, by_va: false,
@ -28,7 +28,7 @@ MusicAlbum(
artist_id: Some("UC1C05NyYICFB2mVGn9_ttEw"), artist_id: Some("UC1C05NyYICFB2mVGn9_ttEw"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_bqWA6mAZFWS", id: "MPREb_bqWA6mAZFWS",
name: "Pedha Rasi Peddamma Katha", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -49,7 +49,7 @@ MusicAlbum(
artist_id: Some("UCDqpyYkgWy2h03HamIfODjw"), artist_id: Some("UCDqpyYkgWy2h03HamIfODjw"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_bqWA6mAZFWS", id: "MPREb_bqWA6mAZFWS",
name: "Pedha Rasi Peddamma Katha", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -70,7 +70,7 @@ MusicAlbum(
artist_id: None, artist_id: None,
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_bqWA6mAZFWS", id: "MPREb_bqWA6mAZFWS",
name: "Pedha Rasi Peddamma Katha", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -91,7 +91,7 @@ MusicAlbum(
artist_id: Some("UCl4iPtukwe7m0kIxUMskkgA"), artist_id: Some("UCl4iPtukwe7m0kIxUMskkgA"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_bqWA6mAZFWS", id: "MPREb_bqWA6mAZFWS",
name: "Pedha Rasi Peddamma Katha", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -118,11 +118,11 @@ MusicAlbum(
artists: [ artists: [
ArtistId( ArtistId(
id: Some("UCl4iPtukwe7m0kIxUMskkgA"), id: Some("UCl4iPtukwe7m0kIxUMskkgA"),
name: "S P Balasubramaniam", name: "[name]",
), ),
ArtistId( ArtistId(
id: Some("UCWgAqlYG7mXTUxrFiLyDSsg"), id: Some("UCWgAqlYG7mXTUxrFiLyDSsg"),
name: "S Janaki", name: "[name]",
), ),
], ],
artist_id: Some("UCl4iPtukwe7m0kIxUMskkgA"), artist_id: Some("UCl4iPtukwe7m0kIxUMskkgA"),

View file

@ -5,7 +5,7 @@ expression: album
MusicAlbum( MusicAlbum(
id: "MPREb_F3Af9UZZVxX", id: "MPREb_F3Af9UZZVxX",
playlist_id: Some("OLAK5uy_nim4i4eycEtlBtS3Ci6j4SvvTmdfBcRX4"), playlist_id: Some("OLAK5uy_nim4i4eycEtlBtS3Ci6j4SvvTmdfBcRX4"),
name: "La Ultima Vez (Remix)", name: "[name]",
cover: "[cover]", cover: "[cover]",
artists: [ artists: [
ArtistId( ArtistId(
@ -22,7 +22,7 @@ MusicAlbum(
), ),
], ],
artist_id: Some("UCAJwa_1l4rHzBJyWbeBtGZw"), artist_id: Some("UCAJwa_1l4rHzBJyWbeBtGZw"),
description: None, description: "[description]",
album_type: Single, album_type: Single,
year: None, year: None,
by_va: false, by_va: false,
@ -49,7 +49,7 @@ MusicAlbum(
artist_id: Some("UCAJwa_1l4rHzBJyWbeBtGZw"), artist_id: Some("UCAJwa_1l4rHzBJyWbeBtGZw"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_F3Af9UZZVxX", id: "MPREb_F3Af9UZZVxX",
name: "La Ultima Vez (Remix)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,

View file

@ -5,7 +5,7 @@ expression: album
MusicAlbum( MusicAlbum(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
playlist_id: Some("OLAK5uy_myZkBX2d2TzcrlQhIwLy3hCj2MkAMaPR4"), playlist_id: Some("OLAK5uy_myZkBX2d2TzcrlQhIwLy3hCj2MkAMaPR4"),
name: "Märchen enden gut", name: "[name]",
cover: "[cover]", cover: "[cover]",
artists: [ artists: [
ArtistId( ArtistId(
@ -14,7 +14,7 @@ MusicAlbum(
), ),
], ],
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
description: None, description: "[description]",
album_type: Album, album_type: Album,
year: Some(2016), year: Some(2016),
by_va: false, by_va: false,
@ -33,7 +33,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -54,7 +54,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -75,7 +75,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -96,7 +96,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -117,7 +117,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -138,7 +138,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -159,7 +159,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -180,7 +180,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -201,7 +201,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -222,7 +222,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -243,7 +243,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -264,7 +264,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -285,7 +285,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -306,7 +306,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -327,7 +327,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -348,7 +348,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -369,7 +369,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -390,7 +390,7 @@ MusicAlbum(
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_nlBWQROfvjo", id: "MPREb_nlBWQROfvjo",
name: "Märchen enden gut", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -417,7 +417,7 @@ MusicAlbum(
artists: [ artists: [
ArtistId( ArtistId(
id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
name: "Oonagh", name: "[name]",
), ),
], ],
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"), artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),

View file

@ -5,7 +5,7 @@ expression: album
MusicAlbum( MusicAlbum(
id: "MPREb_cwzk8EUwypZ", id: "MPREb_cwzk8EUwypZ",
playlist_id: Some("OLAK5uy_kODvYZ5CEpYdtd4VPsmg0eRTlpazG0dvA"), playlist_id: Some("OLAK5uy_kODvYZ5CEpYdtd4VPsmg0eRTlpazG0dvA"),
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)", name: "[name]",
cover: "[cover]", cover: "[cover]",
artists: [ artists: [
ArtistId( ArtistId(
@ -14,7 +14,7 @@ MusicAlbum(
), ),
], ],
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"), artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
description: None, description: "[description]",
album_type: Show, album_type: Show,
year: Some(2022), year: Some(2022),
by_va: false, by_va: false,
@ -33,7 +33,7 @@ MusicAlbum(
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"), artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_cwzk8EUwypZ", id: "MPREb_cwzk8EUwypZ",
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -54,7 +54,7 @@ MusicAlbum(
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"), artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_cwzk8EUwypZ", id: "MPREb_cwzk8EUwypZ",
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -75,7 +75,7 @@ MusicAlbum(
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"), artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_cwzk8EUwypZ", id: "MPREb_cwzk8EUwypZ",
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -96,7 +96,7 @@ MusicAlbum(
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"), artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_cwzk8EUwypZ", id: "MPREb_cwzk8EUwypZ",
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -117,7 +117,7 @@ MusicAlbum(
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"), artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_cwzk8EUwypZ", id: "MPREb_cwzk8EUwypZ",
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -138,7 +138,7 @@ MusicAlbum(
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"), artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_cwzk8EUwypZ", id: "MPREb_cwzk8EUwypZ",
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -159,7 +159,7 @@ MusicAlbum(
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"), artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_cwzk8EUwypZ", id: "MPREb_cwzk8EUwypZ",
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -180,7 +180,7 @@ MusicAlbum(
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"), artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_cwzk8EUwypZ", id: "MPREb_cwzk8EUwypZ",
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -201,7 +201,7 @@ MusicAlbum(
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"), artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_cwzk8EUwypZ", id: "MPREb_cwzk8EUwypZ",
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -222,7 +222,7 @@ MusicAlbum(
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"), artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_cwzk8EUwypZ", id: "MPREb_cwzk8EUwypZ",
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -243,7 +243,7 @@ MusicAlbum(
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"), artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_cwzk8EUwypZ", id: "MPREb_cwzk8EUwypZ",
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -264,7 +264,7 @@ MusicAlbum(
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"), artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_cwzk8EUwypZ", id: "MPREb_cwzk8EUwypZ",
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -285,7 +285,7 @@ MusicAlbum(
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"), artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_cwzk8EUwypZ", id: "MPREb_cwzk8EUwypZ",
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -306,7 +306,7 @@ MusicAlbum(
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"), artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_cwzk8EUwypZ", id: "MPREb_cwzk8EUwypZ",
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,

View file

@ -5,7 +5,7 @@ expression: album
MusicAlbum( MusicAlbum(
id: "MPREb_bHfHGoy7vuv", id: "MPREb_bHfHGoy7vuv",
playlist_id: Some("OLAK5uy_kdSWBZ-9AZDkYkuy0QCc3p0KO9DEHVNH0"), playlist_id: Some("OLAK5uy_kdSWBZ-9AZDkYkuy0QCc3p0KO9DEHVNH0"),
name: "Der Himmel reißt auf", name: "[name]",
cover: "[cover]", cover: "[cover]",
artists: [ artists: [
ArtistId( ArtistId(
@ -18,7 +18,7 @@ MusicAlbum(
), ),
], ],
artist_id: Some("UCXGYZ-OhdOpPBamHX3K9YRg"), artist_id: Some("UCXGYZ-OhdOpPBamHX3K9YRg"),
description: None, description: "[description]",
album_type: Single, album_type: Single,
year: Some(2020), year: Some(2020),
by_va: false, by_va: false,
@ -41,7 +41,7 @@ MusicAlbum(
artist_id: Some("UCXGYZ-OhdOpPBamHX3K9YRg"), artist_id: Some("UCXGYZ-OhdOpPBamHX3K9YRg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_bHfHGoy7vuv", id: "MPREb_bHfHGoy7vuv",
name: "Der Himmel reißt auf", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,

View file

@ -5,11 +5,11 @@ expression: album
MusicAlbum( MusicAlbum(
id: "MPREb_AzuWg8qAVVl", id: "MPREb_AzuWg8qAVVl",
playlist_id: Some("OLAK5uy_mux5ygfN9sbiR1ma3yh1GHTmqNekZNoAI"), playlist_id: Some("OLAK5uy_mux5ygfN9sbiR1ma3yh1GHTmqNekZNoAI"),
name: "13 Reasons Why (Season 3)", name: "[name]",
cover: "[cover]", cover: "[cover]",
artists: [], artists: [],
artist_id: None, artist_id: None,
description: None, description: "[description]",
album_type: Album, album_type: Album,
year: Some(2019), year: Some(2019),
by_va: true, by_va: true,
@ -28,7 +28,7 @@ MusicAlbum(
artist_id: Some("UCCj0RlDqqahEB5BXVtDcPqg"), artist_id: Some("UCCj0RlDqqahEB5BXVtDcPqg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_AzuWg8qAVVl", id: "MPREb_AzuWg8qAVVl",
name: "13 Reasons Why (Season 3)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -49,7 +49,7 @@ MusicAlbum(
artist_id: Some("UCMrCoizKiBxqeg5pTpBXn1A"), artist_id: Some("UCMrCoizKiBxqeg5pTpBXn1A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_AzuWg8qAVVl", id: "MPREb_AzuWg8qAVVl",
name: "13 Reasons Why (Season 3)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -70,7 +70,7 @@ MusicAlbum(
artist_id: Some("UCWjoDY2SXJ5dvcdunWI6mjQ"), artist_id: Some("UCWjoDY2SXJ5dvcdunWI6mjQ"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_AzuWg8qAVVl", id: "MPREb_AzuWg8qAVVl",
name: "13 Reasons Why (Season 3)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -91,7 +91,7 @@ MusicAlbum(
artist_id: Some("UChzK2t3sjnQkWzGnyKXOSSg"), artist_id: Some("UChzK2t3sjnQkWzGnyKXOSSg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_AzuWg8qAVVl", id: "MPREb_AzuWg8qAVVl",
name: "13 Reasons Why (Season 3)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -112,7 +112,7 @@ MusicAlbum(
artist_id: Some("UCvsgN5NKOzXnAURfaf3TOig"), artist_id: Some("UCvsgN5NKOzXnAURfaf3TOig"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_AzuWg8qAVVl", id: "MPREb_AzuWg8qAVVl",
name: "13 Reasons Why (Season 3)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -133,7 +133,7 @@ MusicAlbum(
artist_id: Some("UCI4YNnmHjXFaaKvfdmpWvJQ"), artist_id: Some("UCI4YNnmHjXFaaKvfdmpWvJQ"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_AzuWg8qAVVl", id: "MPREb_AzuWg8qAVVl",
name: "13 Reasons Why (Season 3)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -154,7 +154,7 @@ MusicAlbum(
artist_id: Some("UCDaFVUr2n8T7_X1f5yJ1xlw"), artist_id: Some("UCDaFVUr2n8T7_X1f5yJ1xlw"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_AzuWg8qAVVl", id: "MPREb_AzuWg8qAVVl",
name: "13 Reasons Why (Season 3)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -175,7 +175,7 @@ MusicAlbum(
artist_id: Some("UCZcc-WkffIMBVGUr6j9e6aQ"), artist_id: Some("UCZcc-WkffIMBVGUr6j9e6aQ"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_AzuWg8qAVVl", id: "MPREb_AzuWg8qAVVl",
name: "13 Reasons Why (Season 3)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -196,7 +196,7 @@ MusicAlbum(
artist_id: Some("UCQPPz_A65SWYi2wXX8z76AQ"), artist_id: Some("UCQPPz_A65SWYi2wXX8z76AQ"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_AzuWg8qAVVl", id: "MPREb_AzuWg8qAVVl",
name: "13 Reasons Why (Season 3)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -217,7 +217,7 @@ MusicAlbum(
artist_id: Some("UChTOXkDhGJ0JftnfMWjpCCg"), artist_id: Some("UChTOXkDhGJ0JftnfMWjpCCg"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_AzuWg8qAVVl", id: "MPREb_AzuWg8qAVVl",
name: "13 Reasons Why (Season 3)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -238,7 +238,7 @@ MusicAlbum(
artist_id: Some("UCMUB52aO4CqrUXmLwbfRWYA"), artist_id: Some("UCMUB52aO4CqrUXmLwbfRWYA"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_AzuWg8qAVVl", id: "MPREb_AzuWg8qAVVl",
name: "13 Reasons Why (Season 3)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -259,7 +259,7 @@ MusicAlbum(
artist_id: Some("UC4YvDAbE1EYwZpj6gQ-lpLw"), artist_id: Some("UC4YvDAbE1EYwZpj6gQ-lpLw"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_AzuWg8qAVVl", id: "MPREb_AzuWg8qAVVl",
name: "13 Reasons Why (Season 3)", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,

View file

@ -5,11 +5,11 @@ expression: album
MusicAlbum( MusicAlbum(
id: "MPREb_8QkDeEIawvX", id: "MPREb_8QkDeEIawvX",
playlist_id: Some("OLAK5uy_mEX9ljZeeEWgTM1xLL1isyiGaWXoPyoOk"), playlist_id: Some("OLAK5uy_mEX9ljZeeEWgTM1xLL1isyiGaWXoPyoOk"),
name: "Queendom2 FINAL", name: "[name]",
cover: "[cover]", cover: "[cover]",
artists: [], artists: [],
artist_id: None, artist_id: None,
description: None, description: "[description]",
album_type: Single, album_type: Single,
year: Some(2022), year: Some(2022),
by_va: true, by_va: true,
@ -28,7 +28,7 @@ MusicAlbum(
artist_id: None, artist_id: None,
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_8QkDeEIawvX", id: "MPREb_8QkDeEIawvX",
name: "Queendom2 FINAL", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -49,7 +49,7 @@ MusicAlbum(
artist_id: None, artist_id: None,
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_8QkDeEIawvX", id: "MPREb_8QkDeEIawvX",
name: "Queendom2 FINAL", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -70,7 +70,7 @@ MusicAlbum(
artist_id: Some("UCAKvDuIX3m1AUdPpDSqV_3w"), artist_id: Some("UCAKvDuIX3m1AUdPpDSqV_3w"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_8QkDeEIawvX", id: "MPREb_8QkDeEIawvX",
name: "Queendom2 FINAL", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -91,7 +91,7 @@ MusicAlbum(
artist_id: None, artist_id: None,
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_8QkDeEIawvX", id: "MPREb_8QkDeEIawvX",
name: "Queendom2 FINAL", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -112,7 +112,7 @@ MusicAlbum(
artist_id: None, artist_id: None,
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_8QkDeEIawvX", id: "MPREb_8QkDeEIawvX",
name: "Queendom2 FINAL", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -133,7 +133,7 @@ MusicAlbum(
artist_id: None, artist_id: None,
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_8QkDeEIawvX", id: "MPREb_8QkDeEIawvX",
name: "Queendom2 FINAL", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,

View file

@ -5,7 +5,7 @@ expression: album
MusicAlbum( MusicAlbum(
id: "MPREb_h8ltx5oKvyY", id: "MPREb_h8ltx5oKvyY",
playlist_id: Some("OLAK5uy_lIDfTi_k8V1RJ54MeJJGK_BduAeYbm-0s"), playlist_id: Some("OLAK5uy_lIDfTi_k8V1RJ54MeJJGK_BduAeYbm-0s"),
name: "Pedha Rasi Peddamma Katha", name: "[name]",
cover: "[cover]", cover: "[cover]",
artists: [ artists: [
ArtistId( ArtistId(
@ -18,7 +18,7 @@ MusicAlbum(
), ),
], ],
artist_id: Some("UCl4iPtukwe7m0kIxUMskkgA"), artist_id: Some("UCl4iPtukwe7m0kIxUMskkgA"),
description: None, description: "[description]",
album_type: Ep, album_type: Ep,
year: Some(1968), year: Some(1968),
by_va: false, by_va: false,
@ -41,7 +41,7 @@ MusicAlbum(
artist_id: Some("UCl4iPtukwe7m0kIxUMskkgA"), artist_id: Some("UCl4iPtukwe7m0kIxUMskkgA"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_h8ltx5oKvyY", id: "MPREb_h8ltx5oKvyY",
name: "Pedha Rasi Peddamma Katha", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -62,7 +62,7 @@ MusicAlbum(
artist_id: Some("UC1C05NyYICFB2mVGn9_ttEw"), artist_id: Some("UC1C05NyYICFB2mVGn9_ttEw"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_h8ltx5oKvyY", id: "MPREb_h8ltx5oKvyY",
name: "Pedha Rasi Peddamma Katha", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -83,7 +83,7 @@ MusicAlbum(
artist_id: Some("UC_KQPMiRQl3CFAIKTVfCHwA"), artist_id: Some("UC_KQPMiRQl3CFAIKTVfCHwA"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_h8ltx5oKvyY", id: "MPREb_h8ltx5oKvyY",
name: "Pedha Rasi Peddamma Katha", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,
@ -104,7 +104,7 @@ MusicAlbum(
artist_id: Some("UCDqpyYkgWy2h03HamIfODjw"), artist_id: Some("UCDqpyYkgWy2h03HamIfODjw"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_h8ltx5oKvyY", id: "MPREb_h8ltx5oKvyY",
name: "Pedha Rasi Peddamma Katha", name: "[name]",
)), )),
view_count: None, view_count: None,
is_video: false, is_video: false,

View file

@ -4,26 +4,30 @@ expression: track
--- ---
TrackDetails( TrackDetails(
track: TrackItem( track: TrackItem(
id: "7nigXQS1Xb0", id: "qIZ-vvg-wiU",
name: "INVU", name: "Scheiße baut sich nicht von alleine",
duration: Some(205), duration: Some(232),
cover: "[cover]", cover: "[cover]",
artists: [ artists: [
ArtistId( ArtistId(
id: Some("UCwzCuKxyMY_sT7hr1E8G1XA"), id: Some("UCAbxL0lZcmlaQrzoUbrvS3A"),
name: "TAEYEON", name: "SDP",
),
ArtistId(
id: Some("UCVRREKn7V1Cb8qvf43dwZ6w"),
name: "257ers",
), ),
], ],
artist_id: Some("UCwzCuKxyMY_sT7hr1E8G1XA"), artist_id: Some("UCAbxL0lZcmlaQrzoUbrvS3A"),
album: Some(AlbumId( album: Some(AlbumId(
id: "MPREb_4xbv14CiQJm", id: "MPREb_cjEzeaBgZAq",
name: "INVU - The 3rd Album", name: "Ein Gutes Schlechtes Vorbild",
)), )),
view_count: "[view_count]", view_count: "[view_count]",
is_video: false, is_video: false,
track_nr: None, track_nr: None,
by_va: false, by_va: false,
), ),
lyrics_id: Some("MPLYt_4xbv14CiQJm-1"), lyrics_id: Some("MPLYt_cjEzeaBgZAq-2"),
related_id: Some("MPTRt_4xbv14CiQJm-1"), related_id: Some("MPTRt_cjEzeaBgZAq-2"),
) )

View file

@ -348,11 +348,14 @@ fn get_playlist(
#[case] description: Option<String>, #[case] description: Option<String>,
#[case] channel: Option<(&str, &str)>, #[case] channel: Option<(&str, &str)>,
rp: RustyPipe, rp: RustyPipe,
unlocalized: bool,
) { ) {
let playlist = tokio_test::block_on(rp.query().playlist(id)).unwrap(); let playlist = tokio_test::block_on(rp.query().playlist(id)).unwrap();
assert_eq!(playlist.id, id); assert_eq!(playlist.id, id);
assert_eq!(playlist.name, name); if unlocalized {
assert_eq!(playlist.name, name);
}
assert!(!playlist.videos.is_empty()); assert!(!playlist.videos.is_empty());
assert_eq!(!playlist.videos.is_exhausted(), is_long); assert_eq!(!playlist.videos.is_exhausted(), is_long);
assert_gte( assert_gte(
@ -1046,11 +1049,12 @@ mod channel_rss {
fn search(rp: RustyPipe, unlocalized: bool) { fn search(rp: RustyPipe, unlocalized: bool) {
let result = tokio_test::block_on(rp.query().search("doobydoobap")).unwrap(); let result = tokio_test::block_on(rp.query().search("doobydoobap")).unwrap();
assert!( assert_gte(
result.items.count.unwrap() > 1000, result.items.count.unwrap(),
"expected > 1000 total results, got {}", if unlocalized { 7000 } else { 150 },
result.items.count.unwrap() "results",
); );
if unlocalized { if unlocalized {
assert_eq!(result.corrected_query.unwrap(), "doobydobap"); assert_eq!(result.corrected_query.unwrap(), "doobydobap");
} }
@ -1330,10 +1334,14 @@ fn music_album(#[case] name: &str, #[case] id: &str, rp: RustyPipe, unlocalized:
} else { } else {
insta::assert_ron_snapshot!(format!("music_album_{name}_intl"), album, insta::assert_ron_snapshot!(format!("music_album_{name}_intl"), album,
{ {
".name" => "[name]",
".cover" => "[cover]", ".cover" => "[cover]",
".description" => "[description]",
".artists[].name" => "[name]", ".artists[].name" => "[name]",
".tracks[].name" => "[name]", ".tracks[].name" => "[name]",
".tracks[].album.name" => "[name]",
".tracks[].artists[].name" => "[name]", ".tracks[].artists[].name" => "[name]",
".variants[].artists[].name" => "[name]",
} }
); );
} }
@ -1461,7 +1469,9 @@ fn music_search(#[case] typo: bool, rp: RustyPipe, unlocalized: bool) {
assert_eq!(res.order[0], MusicItemType::Track); assert_eq!(res.order[0], MusicItemType::Track);
if typo { if typo {
assert_eq!(res.corrected_query.unwrap(), "lieblingsmensch namika"); if unlocalized {
assert_eq!(res.corrected_query.unwrap(), "lieblingsmensch namika");
}
} else { } else {
assert_eq!(res.corrected_query, None); assert_eq!(res.corrected_query, None);
} }
@ -1655,6 +1665,7 @@ fn music_search_albums(
#[case] album_type: AlbumType, #[case] album_type: AlbumType,
#[case] more: bool, #[case] more: bool,
rp: RustyPipe, rp: RustyPipe,
unlocalized: bool,
) { ) {
let res = tokio_test::block_on(rp.query().music_search_albums(query)).unwrap(); let res = tokio_test::block_on(rp.query().music_search_albums(query)).unwrap();
@ -1664,7 +1675,9 @@ fn music_search_albums(
assert_eq!(album.artists.len(), 1); assert_eq!(album.artists.len(), 1);
let album_artist = &album.artists[0]; let album_artist = &album.artists[0];
assert_eq!(album_artist.id.as_ref().unwrap(), artist_id); assert_eq!(album_artist.id.as_ref().unwrap(), artist_id);
assert_eq!(album_artist.name, artist); if unlocalized {
assert_eq!(album_artist.name, artist);
}
assert_eq!(album.artist_id.as_ref().unwrap(), artist_id); assert_eq!(album.artist_id.as_ref().unwrap(), artist_id);
assert!(!album.cover.is_empty(), "got no cover"); assert!(!album.cover.is_empty(), "got no cover");
@ -1823,7 +1836,7 @@ fn music_search_suggestion(
#[rstest] #[rstest]
#[case::mv("mv", "ZeerrnuLi5E")] #[case::mv("mv", "ZeerrnuLi5E")]
#[case::track("track", "7nigXQS1Xb0")] #[case::track("track", "qIZ-vvg-wiU")]
fn music_details(#[case] name: &str, #[case] id: &str, rp: RustyPipe) { fn music_details(#[case] name: &str, #[case] id: &str, rp: RustyPipe) {
let track = tokio_test::block_on(rp.query().music_details(id)).unwrap(); let track = tokio_test::block_on(rp.query().music_details(id)).unwrap();