tests: completed for all languages
fix: parsing search videos without duration
This commit is contained in:
parent
b88faa9d05
commit
bb396968dc
20 changed files with 927 additions and 688 deletions
18
Justfile
18
Justfile
|
|
@ -15,6 +15,24 @@ testyt10:
|
|||
cargo test --all-features --test youtube; \
|
||||
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:
|
||||
cargo run -p rustypipe-codegen -- -d . download-testfiles
|
||||
|
||||
|
|
|
|||
|
|
@ -67,11 +67,8 @@ pub async fn collect_dates(project_root: &Path, concurrency: usize) {
|
|||
|
||||
// These are the sample playlists
|
||||
let cases = [
|
||||
(
|
||||
DateCase::Today,
|
||||
"RDCLAK5uy_kj3rhiar1LINmyDcuFnXihEO0K1NQa2jI",
|
||||
),
|
||||
(DateCase::Yesterday, "PL7zsB-C3aNu2yRY2869T0zj1FhtRIu5am"),
|
||||
(DateCase::Today, "PLMC9KNkIncKtPzgY-5rmhvj7fax8fdxoj"),
|
||||
(DateCase::Yesterday, "PLcirGkCPmbmFeQ1sm4wFciF03D_EroIfr"),
|
||||
(DateCase::Ago, "PLmB6td997u3kUOrfFwkULZ910ho44oQSy"),
|
||||
(DateCase::Jan, "PL1J-6JOckZtFjcni6Xj1pLYglJp6JCpKD"),
|
||||
(DateCase::Feb, "PL1J-6JOckZtETrbzwZE7mRIIK6BzWNLAs"),
|
||||
|
|
|
|||
32
notes/dictionary.md
Normal file
32
notes/dictionary.md
Normal 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")
|
||||
|
|
@ -587,7 +587,9 @@ impl MusicListMapper {
|
|||
(subtitle_parts.rev().next(), None, None)
|
||||
} else {
|
||||
// Skip first part (track type)
|
||||
if subtitle_parts.len() > 3 {
|
||||
if subtitle_parts.len() > 3
|
||||
|| (is_video && subtitle_parts.len() == 2)
|
||||
{
|
||||
subtitle_parts.next();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -536,6 +536,11 @@ mod tests {
|
|||
"Last updated on Jun 04, 2003",
|
||||
Some(ParsedDate::Absolute(date!(2003-6-4)))
|
||||
)]
|
||||
#[case(
|
||||
Language::Bn,
|
||||
"যোগ দিয়েছেন 24 সেপ, 2013",
|
||||
Some(ParsedDate::Absolute(date!(2013-9-24)))
|
||||
)]
|
||||
fn t_parse_date(
|
||||
#[case] lang: Language,
|
||||
#[case] textual_date: &str,
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -143,7 +143,7 @@ where
|
|||
/// and return the duration in seconds.
|
||||
pub fn parse_video_length(text: &str) -> Option<u32> {
|
||||
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| {
|
||||
let hrs = cap
|
||||
.get(1)
|
||||
|
|
@ -294,11 +294,40 @@ where
|
|||
}
|
||||
} else if c == decimal_point {
|
||||
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);
|
||||
}
|
||||
}
|
||||
(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 {
|
||||
|
|
@ -467,6 +496,17 @@ pub(crate) mod tests {
|
|||
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]
|
||||
fn t_parse_large_numstr_samples() {
|
||||
let json_path = path!(*TESTFILES / "dict" / "large_number_samples.json");
|
||||
|
|
|
|||
|
|
@ -141,8 +141,7 @@
|
|||
"آلاف": 3,
|
||||
"ألف": 3,
|
||||
"مليار": 9,
|
||||
"مليون": 6,
|
||||
"واحد": 0
|
||||
"مليون": 6
|
||||
},
|
||||
"album_types": {
|
||||
"أغنية منفردة": "Single",
|
||||
|
|
@ -176,7 +175,12 @@
|
|||
"নিঃটা": 6,
|
||||
"নিযুতটা": 6,
|
||||
"লাখটা": 5,
|
||||
"হাজাৰটা": 3
|
||||
"হাজাৰটা": 3,
|
||||
"লাখ": 5,
|
||||
"নিযুত": 6,
|
||||
"হাজাৰ": 3,
|
||||
"হা": 3,
|
||||
"লা": 5
|
||||
},
|
||||
"album_types": {
|
||||
"ep": "Ep",
|
||||
|
|
@ -345,18 +349,18 @@
|
|||
},
|
||||
"date_order": "DY",
|
||||
"months": {
|
||||
"অক্টোবর,": 10,
|
||||
"অক্টো,": 10,
|
||||
"আগস্ট,": 8,
|
||||
"এপ্রিল,": 4,
|
||||
"এপ্রি,": 4,
|
||||
"জানু,": 1,
|
||||
"জুন,": 6,
|
||||
"জুলাই,": 7,
|
||||
"জুল,": 7,
|
||||
"ডিসেম্বর,": 12,
|
||||
"নভেম্বর,": 11,
|
||||
"নভে,": 11,
|
||||
"ফেব,": 2,
|
||||
"মার্চ,": 3,
|
||||
"মে,": 5,
|
||||
"সেপ্টেম্বর,": 9
|
||||
"সেপ,": 9
|
||||
},
|
||||
"timeago_nd_tokens": {
|
||||
"আজ": "0D",
|
||||
|
|
@ -367,7 +371,10 @@
|
|||
"কোটি": 7,
|
||||
"লাটি": 5,
|
||||
"শত": 2,
|
||||
"হাটি": 3
|
||||
"হাটি": 3,
|
||||
"হা": 3,
|
||||
"লা": 5,
|
||||
"কো": 7
|
||||
},
|
||||
"album_types": {
|
||||
"অডিওবুক": "Audiobook",
|
||||
|
|
@ -399,7 +406,8 @@
|
|||
"sedmicu": "W",
|
||||
"sekunde": "s",
|
||||
"sekundi": "s",
|
||||
"sekundu": "s"
|
||||
"sekundu": "s",
|
||||
"sekunda": "s"
|
||||
},
|
||||
"date_order": "DY",
|
||||
"months": {
|
||||
|
|
@ -504,7 +512,10 @@
|
|||
"sekundami": "s",
|
||||
"sekundou": "s",
|
||||
"týdnem": "W",
|
||||
"týdny": "W"
|
||||
"týdny": "W",
|
||||
"sekund": "s",
|
||||
"sekunda": "s",
|
||||
"minuta": "m"
|
||||
},
|
||||
"date_order": "DMY",
|
||||
"months": {},
|
||||
|
|
@ -1267,6 +1278,7 @@
|
|||
"sekunde": "s",
|
||||
"sekundi": "s",
|
||||
"sekundu": "s",
|
||||
"sekunda": "s",
|
||||
"tjedan": "W",
|
||||
"tjedna": "W"
|
||||
},
|
||||
|
|
@ -1313,10 +1325,12 @@
|
|||
"hónappal": "M",
|
||||
"másodperccel": "s",
|
||||
"másodperce": "s",
|
||||
"másodperc": "s",
|
||||
"napja": "D",
|
||||
"nappal": "D",
|
||||
"perccel": "m",
|
||||
"perce": "m",
|
||||
"perc": "m",
|
||||
"éve": "Y",
|
||||
"évvel": "Y",
|
||||
"órája": "h",
|
||||
|
|
@ -1457,8 +1471,11 @@
|
|||
"mánuðum": "M",
|
||||
"mínútu": "m",
|
||||
"mínútum": "m",
|
||||
"mínúta": "m",
|
||||
"sekúndu": "s",
|
||||
"sekúndum": "s",
|
||||
"sekúnda": "s",
|
||||
"sekúndur": "s",
|
||||
"viku": "W",
|
||||
"vikum": "W",
|
||||
"ári": "Y",
|
||||
|
|
@ -1566,6 +1583,7 @@
|
|||
"שנה": "Y",
|
||||
"שניות": "s",
|
||||
"שנייה": "s",
|
||||
"שניה": "s",
|
||||
"שנים": "Y",
|
||||
"שנתיים": "2Y",
|
||||
"שעה": "h",
|
||||
|
|
@ -1594,9 +1612,9 @@
|
|||
},
|
||||
"comma_decimal": false,
|
||||
"number_tokens": {
|
||||
"B": 9,
|
||||
"K": 3,
|
||||
"M": 6
|
||||
"B": 9,
|
||||
"K": 3,
|
||||
"M": 6
|
||||
},
|
||||
"album_types": {
|
||||
"אלבום": "Album",
|
||||
|
|
@ -1647,7 +1665,9 @@
|
|||
"საათის": "h",
|
||||
"წამის": "s",
|
||||
"წლის": "Y",
|
||||
"წუთის": "m"
|
||||
"წუთის": "m",
|
||||
"წუთი": "m",
|
||||
"წამი": "s"
|
||||
},
|
||||
"date_order": "DY",
|
||||
"months": {
|
||||
|
|
@ -1738,7 +1758,9 @@
|
|||
"នាទីមុន": "m",
|
||||
"ម៉ោងមុន": "h",
|
||||
"វិនាទីមុន": "s",
|
||||
"សប្ដាហ៍មុន": "W"
|
||||
"សប្ដាហ៍មុន": "W",
|
||||
"នាទី": "m",
|
||||
"វិនាទី": "s"
|
||||
},
|
||||
"date_order": "DY",
|
||||
"months": {
|
||||
|
|
@ -1757,6 +1779,7 @@
|
|||
},
|
||||
"timeago_nd_tokens": {
|
||||
"បានធ្វើបច្ចុប្បន្នភាពថ្ងៃនេះ": "0D",
|
||||
"បានធ្វើបច្ចុប្បន្នភាពនៅថ្ងៃនេះ": "0D",
|
||||
"បានធ្វើបច្ចុប្បន្នភាពម្សិលមិញ": "1D"
|
||||
},
|
||||
"comma_decimal": true,
|
||||
|
|
@ -1790,7 +1813,9 @@
|
|||
"ವಾರಗಳ": "W",
|
||||
"ವಾರದ": "W",
|
||||
"ಸೆಕೆಂಡುಗಳ": "s",
|
||||
"ಸೆಕೆಂಡ್": "s"
|
||||
"ಸೆಕೆಂಡ್": "s",
|
||||
"ಸೆಕೆಂಡುಗಳು": "s",
|
||||
"ನಿಮಿಷವು": "m"
|
||||
},
|
||||
"date_order": "DY",
|
||||
"months": {
|
||||
|
|
@ -1845,7 +1870,10 @@
|
|||
"number_tokens": {
|
||||
"만회": 4,
|
||||
"억회": 8,
|
||||
"천회": 3
|
||||
"천회": 3,
|
||||
"만명": 4,
|
||||
"억명": 8,
|
||||
"천명": 3
|
||||
},
|
||||
"album_types": {
|
||||
"ep": "Ep",
|
||||
|
|
@ -1910,7 +1938,9 @@
|
|||
"ມື້ກ່ອນ": "D",
|
||||
"ວິນາທີກ່ອນ": "s",
|
||||
"ອາທິດກ່ອນ": "W",
|
||||
"ເດືອນກ່ອນ": "M"
|
||||
"ເດືອນກ່ອນ": "M",
|
||||
"ວິນາທີ": "s",
|
||||
"ນາທີ": "m"
|
||||
},
|
||||
"date_order": "DY",
|
||||
"months": {
|
||||
|
|
@ -1958,6 +1988,7 @@
|
|||
"metų": "Y",
|
||||
"minutes": "m",
|
||||
"minutę": "m",
|
||||
"minutė": "m",
|
||||
"minučių": "m",
|
||||
"mėnesius": "M",
|
||||
"mėnesių": "M",
|
||||
|
|
@ -1967,6 +1998,8 @@
|
|||
"savaičių": "W",
|
||||
"sekundes": "s",
|
||||
"sekundę": "s",
|
||||
"sekundės": "s",
|
||||
"sekundė": "s",
|
||||
"sekundžių": "s",
|
||||
"valandas": "h",
|
||||
"valandą": "h",
|
||||
|
|
@ -2138,7 +2171,9 @@
|
|||
"секундын": "s",
|
||||
"хоногийн": "W",
|
||||
"цагийн": "h",
|
||||
"өдрийн": "D"
|
||||
"өдрийн": "D",
|
||||
"секунд": "s",
|
||||
"минут": "m"
|
||||
},
|
||||
"date_order": "YMD",
|
||||
"months": {},
|
||||
|
|
@ -2177,7 +2212,9 @@
|
|||
"वर्षांपूर्वी": "Y",
|
||||
"वर्षापूर्वी": "Y",
|
||||
"सेकंदांपूर्वी": "s",
|
||||
"सेकंदापूर्वी": "s"
|
||||
"सेकंदापूर्वी": "s",
|
||||
"सेकंद": "s",
|
||||
"मिनिट": "m"
|
||||
},
|
||||
"date_order": "DY",
|
||||
"months": {
|
||||
|
|
@ -2371,18 +2408,18 @@
|
|||
},
|
||||
"date_order": "DY",
|
||||
"months": {
|
||||
"apr.": 4,
|
||||
"aug.": 8,
|
||||
"dec.": 12,
|
||||
"feb.": 2,
|
||||
"jan.": 1,
|
||||
"jul.": 7,
|
||||
"jun.": 6,
|
||||
"apr": 4,
|
||||
"aug": 8,
|
||||
"dec": 12,
|
||||
"feb": 2,
|
||||
"jan": 1,
|
||||
"jul": 7,
|
||||
"jun": 6,
|
||||
"mei": 5,
|
||||
"mrt.": 3,
|
||||
"nov.": 11,
|
||||
"okt.": 10,
|
||||
"sep.": 9
|
||||
"mrt": 3,
|
||||
"nov": 11,
|
||||
"okt": 10,
|
||||
"sep": 9
|
||||
},
|
||||
"timeago_nd_tokens": {
|
||||
"gisteren": "1D",
|
||||
|
|
@ -2462,7 +2499,8 @@
|
|||
"ମାସ": "M",
|
||||
"ମିନିଟ୍": "m",
|
||||
"ସପ୍ତାହ": "W",
|
||||
"ସେକେଣ୍ଡ": "s"
|
||||
"ସେକେଣ୍ଡ": "s",
|
||||
"ମିନିଟ୍": "m"
|
||||
},
|
||||
"date_order": "DY",
|
||||
"months": {
|
||||
|
|
@ -2487,7 +2525,10 @@
|
|||
"number_tokens": {
|
||||
"ନିଟି": 6,
|
||||
"ବିଟି": 9,
|
||||
"ହଟି": 3
|
||||
"ହଟି": 3,
|
||||
"ବିଜଣ": 9,
|
||||
"ନିଜଣ": 6,
|
||||
"ହଜଣ": 3
|
||||
},
|
||||
"album_types": {
|
||||
"ep": "Ep",
|
||||
|
|
@ -2563,10 +2604,12 @@
|
|||
"minut": "m",
|
||||
"minuty": "m",
|
||||
"minutę": "m",
|
||||
"minuta": "m",
|
||||
"rok": "Y",
|
||||
"sekund": "s",
|
||||
"sekundy": "s",
|
||||
"sekundę": "s",
|
||||
"sekunda": "s",
|
||||
"tydzień": "W",
|
||||
"tygodnie": "W"
|
||||
},
|
||||
|
|
@ -2861,10 +2904,13 @@
|
|||
"mesiacom": "M",
|
||||
"minútami": "m",
|
||||
"minútou": "m",
|
||||
"minúta": "m",
|
||||
"rokmi": "Y",
|
||||
"rokom": "Y",
|
||||
"sekundami": "s",
|
||||
"sekundou": "s",
|
||||
"sekúnd": "s",
|
||||
"sekunda": "s",
|
||||
"týždňami": "W",
|
||||
"týždňom": "W"
|
||||
},
|
||||
|
|
@ -2905,9 +2951,12 @@
|
|||
"minutama": "m",
|
||||
"minutami": "m",
|
||||
"minuto": "m",
|
||||
"minuta": "m",
|
||||
"sekundama": "s",
|
||||
"sekundami": "s",
|
||||
"sekundo": "s",
|
||||
"sekund": "s",
|
||||
"sekunda": "s",
|
||||
"tedni": "W",
|
||||
"tednom": "W",
|
||||
"tednoma": "W",
|
||||
|
|
@ -3009,13 +3058,15 @@
|
|||
"месеца": "M",
|
||||
"месеци": "M",
|
||||
"минута": "m",
|
||||
"минут": "m",
|
||||
"недеље": "W",
|
||||
"недељу": "W",
|
||||
"сат": "h",
|
||||
"сата": "h",
|
||||
"сати": "h",
|
||||
"секунде": "s",
|
||||
"секунди": "s"
|
||||
"секунди": "s",
|
||||
"секунда": "s"
|
||||
},
|
||||
"date_order": "DMY",
|
||||
"months": {},
|
||||
|
|
@ -3050,6 +3101,7 @@
|
|||
"meseca": "M",
|
||||
"meseci": "M",
|
||||
"minuta": "m",
|
||||
"minut": "m",
|
||||
"nedelja": "W",
|
||||
"nedelje": "W",
|
||||
"nedelju": "W",
|
||||
|
|
@ -3057,7 +3109,8 @@
|
|||
"sata": "h",
|
||||
"sati": "h",
|
||||
"sekunde": "s",
|
||||
"sekundi": "s"
|
||||
"sekundi": "s",
|
||||
"sekunda": "s"
|
||||
},
|
||||
"date_order": "DMY",
|
||||
"months": {},
|
||||
|
|
@ -3192,7 +3245,10 @@
|
|||
"வாரங்களுக்கு": "W",
|
||||
"வாரம்": "W",
|
||||
"விநாடிகளுக்கு": "s",
|
||||
"விநாடிக்கு": "s"
|
||||
"விநாடிக்கு": "s",
|
||||
"விநாடிகள்": "s",
|
||||
"விநாடி": "s",
|
||||
"நிமிடம்": "m"
|
||||
},
|
||||
"date_order": "DY",
|
||||
"months": {
|
||||
|
|
@ -3243,7 +3299,8 @@
|
|||
"సంవత్సరం": "Y",
|
||||
"సంవత్సరాల": "Y",
|
||||
"సెకను": "s",
|
||||
"సెకన్ల": "s"
|
||||
"సెకన్ల": "s",
|
||||
"సెకన్లు": "s"
|
||||
},
|
||||
"date_order": "DY",
|
||||
"months": {
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -5,7 +5,7 @@ expression: album
|
|||
MusicAlbum(
|
||||
id: "MPREb_u1I69lSAe5v",
|
||||
playlist_id: Some("OLAK5uy_lGP_zv0vJDUlecQDzugUJmjcF7pvyVNyY"),
|
||||
name: "Waldbrand",
|
||||
name: "[name]",
|
||||
cover: "[cover]",
|
||||
artists: [
|
||||
ArtistId(
|
||||
|
|
@ -14,7 +14,7 @@ MusicAlbum(
|
|||
),
|
||||
],
|
||||
artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"),
|
||||
description: None,
|
||||
description: "[description]",
|
||||
album_type: Ep,
|
||||
year: Some(2016),
|
||||
by_va: false,
|
||||
|
|
@ -33,7 +33,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_u1I69lSAe5v",
|
||||
name: "Waldbrand",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -54,7 +54,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_u1I69lSAe5v",
|
||||
name: "Waldbrand",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -75,7 +75,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_u1I69lSAe5v",
|
||||
name: "Waldbrand",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -96,7 +96,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_u1I69lSAe5v",
|
||||
name: "Waldbrand",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -117,7 +117,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCpJyCbFbdTrx0M90HCNBHFQ"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_u1I69lSAe5v",
|
||||
name: "Waldbrand",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@ expression: album
|
|||
MusicAlbum(
|
||||
id: "MPREb_bqWA6mAZFWS",
|
||||
playlist_id: Some("OLAK5uy_mUiRbMqeQXFUH6h9KB87RcEmNtm45Qvs0"),
|
||||
name: "Pedha Rasi Peddamma Katha",
|
||||
name: "[name]",
|
||||
cover: "[cover]",
|
||||
artists: [],
|
||||
artist_id: None,
|
||||
description: None,
|
||||
description: "[description]",
|
||||
album_type: Ep,
|
||||
year: Some(1968),
|
||||
by_va: false,
|
||||
|
|
@ -28,7 +28,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC1C05NyYICFB2mVGn9_ttEw"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_bqWA6mAZFWS",
|
||||
name: "Pedha Rasi Peddamma Katha",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -49,7 +49,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCDqpyYkgWy2h03HamIfODjw"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_bqWA6mAZFWS",
|
||||
name: "Pedha Rasi Peddamma Katha",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -70,7 +70,7 @@ MusicAlbum(
|
|||
artist_id: None,
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_bqWA6mAZFWS",
|
||||
name: "Pedha Rasi Peddamma Katha",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -91,7 +91,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCl4iPtukwe7m0kIxUMskkgA"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_bqWA6mAZFWS",
|
||||
name: "Pedha Rasi Peddamma Katha",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -118,11 +118,11 @@ MusicAlbum(
|
|||
artists: [
|
||||
ArtistId(
|
||||
id: Some("UCl4iPtukwe7m0kIxUMskkgA"),
|
||||
name: "S P Balasubramaniam",
|
||||
name: "[name]",
|
||||
),
|
||||
ArtistId(
|
||||
id: Some("UCWgAqlYG7mXTUxrFiLyDSsg"),
|
||||
name: "S Janaki",
|
||||
name: "[name]",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UCl4iPtukwe7m0kIxUMskkgA"),
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ expression: album
|
|||
MusicAlbum(
|
||||
id: "MPREb_F3Af9UZZVxX",
|
||||
playlist_id: Some("OLAK5uy_nim4i4eycEtlBtS3Ci6j4SvvTmdfBcRX4"),
|
||||
name: "La Ultima Vez (Remix)",
|
||||
name: "[name]",
|
||||
cover: "[cover]",
|
||||
artists: [
|
||||
ArtistId(
|
||||
|
|
@ -22,7 +22,7 @@ MusicAlbum(
|
|||
),
|
||||
],
|
||||
artist_id: Some("UCAJwa_1l4rHzBJyWbeBtGZw"),
|
||||
description: None,
|
||||
description: "[description]",
|
||||
album_type: Single,
|
||||
year: None,
|
||||
by_va: false,
|
||||
|
|
@ -49,7 +49,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCAJwa_1l4rHzBJyWbeBtGZw"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_F3Af9UZZVxX",
|
||||
name: "La Ultima Vez (Remix)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ expression: album
|
|||
MusicAlbum(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
playlist_id: Some("OLAK5uy_myZkBX2d2TzcrlQhIwLy3hCj2MkAMaPR4"),
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
cover: "[cover]",
|
||||
artists: [
|
||||
ArtistId(
|
||||
|
|
@ -14,7 +14,7 @@ MusicAlbum(
|
|||
),
|
||||
],
|
||||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
description: None,
|
||||
description: "[description]",
|
||||
album_type: Album,
|
||||
year: Some(2016),
|
||||
by_va: false,
|
||||
|
|
@ -33,7 +33,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -54,7 +54,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -75,7 +75,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -96,7 +96,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -117,7 +117,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -138,7 +138,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -159,7 +159,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -180,7 +180,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -201,7 +201,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -222,7 +222,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -243,7 +243,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -264,7 +264,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -285,7 +285,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -306,7 +306,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -327,7 +327,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -348,7 +348,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -369,7 +369,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -390,7 +390,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_nlBWQROfvjo",
|
||||
name: "Märchen enden gut",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -417,7 +417,7 @@ MusicAlbum(
|
|||
artists: [
|
||||
ArtistId(
|
||||
id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
name: "Oonagh",
|
||||
name: "[name]",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UC_vmjW5e1xEHhYjY2a0kK1A"),
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ expression: album
|
|||
MusicAlbum(
|
||||
id: "MPREb_cwzk8EUwypZ",
|
||||
playlist_id: Some("OLAK5uy_kODvYZ5CEpYdtd4VPsmg0eRTlpazG0dvA"),
|
||||
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)",
|
||||
name: "[name]",
|
||||
cover: "[cover]",
|
||||
artists: [
|
||||
ArtistId(
|
||||
|
|
@ -14,7 +14,7 @@ MusicAlbum(
|
|||
),
|
||||
],
|
||||
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
|
||||
description: None,
|
||||
description: "[description]",
|
||||
album_type: Show,
|
||||
year: Some(2022),
|
||||
by_va: false,
|
||||
|
|
@ -33,7 +33,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_cwzk8EUwypZ",
|
||||
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -54,7 +54,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_cwzk8EUwypZ",
|
||||
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -75,7 +75,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_cwzk8EUwypZ",
|
||||
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -96,7 +96,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_cwzk8EUwypZ",
|
||||
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -117,7 +117,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_cwzk8EUwypZ",
|
||||
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -138,7 +138,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_cwzk8EUwypZ",
|
||||
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -159,7 +159,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_cwzk8EUwypZ",
|
||||
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -180,7 +180,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_cwzk8EUwypZ",
|
||||
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -201,7 +201,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_cwzk8EUwypZ",
|
||||
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -222,7 +222,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_cwzk8EUwypZ",
|
||||
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -243,7 +243,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_cwzk8EUwypZ",
|
||||
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -264,7 +264,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_cwzk8EUwypZ",
|
||||
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -285,7 +285,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_cwzk8EUwypZ",
|
||||
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -306,7 +306,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCNoyEM0e2A7WlsBmP2w3avg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_cwzk8EUwypZ",
|
||||
name: "Folge 2: Eiszeit (Das Original-Hörspiel zur TV-Serie)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ expression: album
|
|||
MusicAlbum(
|
||||
id: "MPREb_bHfHGoy7vuv",
|
||||
playlist_id: Some("OLAK5uy_kdSWBZ-9AZDkYkuy0QCc3p0KO9DEHVNH0"),
|
||||
name: "Der Himmel reißt auf",
|
||||
name: "[name]",
|
||||
cover: "[cover]",
|
||||
artists: [
|
||||
ArtistId(
|
||||
|
|
@ -18,7 +18,7 @@ MusicAlbum(
|
|||
),
|
||||
],
|
||||
artist_id: Some("UCXGYZ-OhdOpPBamHX3K9YRg"),
|
||||
description: None,
|
||||
description: "[description]",
|
||||
album_type: Single,
|
||||
year: Some(2020),
|
||||
by_va: false,
|
||||
|
|
@ -41,7 +41,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCXGYZ-OhdOpPBamHX3K9YRg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_bHfHGoy7vuv",
|
||||
name: "Der Himmel reißt auf",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@ expression: album
|
|||
MusicAlbum(
|
||||
id: "MPREb_AzuWg8qAVVl",
|
||||
playlist_id: Some("OLAK5uy_mux5ygfN9sbiR1ma3yh1GHTmqNekZNoAI"),
|
||||
name: "13 Reasons Why (Season 3)",
|
||||
name: "[name]",
|
||||
cover: "[cover]",
|
||||
artists: [],
|
||||
artist_id: None,
|
||||
description: None,
|
||||
description: "[description]",
|
||||
album_type: Album,
|
||||
year: Some(2019),
|
||||
by_va: true,
|
||||
|
|
@ -28,7 +28,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCCj0RlDqqahEB5BXVtDcPqg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_AzuWg8qAVVl",
|
||||
name: "13 Reasons Why (Season 3)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -49,7 +49,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCMrCoizKiBxqeg5pTpBXn1A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_AzuWg8qAVVl",
|
||||
name: "13 Reasons Why (Season 3)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -70,7 +70,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCWjoDY2SXJ5dvcdunWI6mjQ"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_AzuWg8qAVVl",
|
||||
name: "13 Reasons Why (Season 3)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -91,7 +91,7 @@ MusicAlbum(
|
|||
artist_id: Some("UChzK2t3sjnQkWzGnyKXOSSg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_AzuWg8qAVVl",
|
||||
name: "13 Reasons Why (Season 3)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -112,7 +112,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCvsgN5NKOzXnAURfaf3TOig"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_AzuWg8qAVVl",
|
||||
name: "13 Reasons Why (Season 3)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -133,7 +133,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCI4YNnmHjXFaaKvfdmpWvJQ"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_AzuWg8qAVVl",
|
||||
name: "13 Reasons Why (Season 3)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -154,7 +154,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCDaFVUr2n8T7_X1f5yJ1xlw"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_AzuWg8qAVVl",
|
||||
name: "13 Reasons Why (Season 3)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -175,7 +175,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCZcc-WkffIMBVGUr6j9e6aQ"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_AzuWg8qAVVl",
|
||||
name: "13 Reasons Why (Season 3)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -196,7 +196,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCQPPz_A65SWYi2wXX8z76AQ"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_AzuWg8qAVVl",
|
||||
name: "13 Reasons Why (Season 3)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -217,7 +217,7 @@ MusicAlbum(
|
|||
artist_id: Some("UChTOXkDhGJ0JftnfMWjpCCg"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_AzuWg8qAVVl",
|
||||
name: "13 Reasons Why (Season 3)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -238,7 +238,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCMUB52aO4CqrUXmLwbfRWYA"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_AzuWg8qAVVl",
|
||||
name: "13 Reasons Why (Season 3)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -259,7 +259,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC4YvDAbE1EYwZpj6gQ-lpLw"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_AzuWg8qAVVl",
|
||||
name: "13 Reasons Why (Season 3)",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@ expression: album
|
|||
MusicAlbum(
|
||||
id: "MPREb_8QkDeEIawvX",
|
||||
playlist_id: Some("OLAK5uy_mEX9ljZeeEWgTM1xLL1isyiGaWXoPyoOk"),
|
||||
name: "<Queendom2> FINAL",
|
||||
name: "[name]",
|
||||
cover: "[cover]",
|
||||
artists: [],
|
||||
artist_id: None,
|
||||
description: None,
|
||||
description: "[description]",
|
||||
album_type: Single,
|
||||
year: Some(2022),
|
||||
by_va: true,
|
||||
|
|
@ -28,7 +28,7 @@ MusicAlbum(
|
|||
artist_id: None,
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_8QkDeEIawvX",
|
||||
name: "<Queendom2> FINAL",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -49,7 +49,7 @@ MusicAlbum(
|
|||
artist_id: None,
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_8QkDeEIawvX",
|
||||
name: "<Queendom2> FINAL",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -70,7 +70,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCAKvDuIX3m1AUdPpDSqV_3w"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_8QkDeEIawvX",
|
||||
name: "<Queendom2> FINAL",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -91,7 +91,7 @@ MusicAlbum(
|
|||
artist_id: None,
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_8QkDeEIawvX",
|
||||
name: "<Queendom2> FINAL",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -112,7 +112,7 @@ MusicAlbum(
|
|||
artist_id: None,
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_8QkDeEIawvX",
|
||||
name: "<Queendom2> FINAL",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -133,7 +133,7 @@ MusicAlbum(
|
|||
artist_id: None,
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_8QkDeEIawvX",
|
||||
name: "<Queendom2> FINAL",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ expression: album
|
|||
MusicAlbum(
|
||||
id: "MPREb_h8ltx5oKvyY",
|
||||
playlist_id: Some("OLAK5uy_lIDfTi_k8V1RJ54MeJJGK_BduAeYbm-0s"),
|
||||
name: "Pedha Rasi Peddamma Katha",
|
||||
name: "[name]",
|
||||
cover: "[cover]",
|
||||
artists: [
|
||||
ArtistId(
|
||||
|
|
@ -18,7 +18,7 @@ MusicAlbum(
|
|||
),
|
||||
],
|
||||
artist_id: Some("UCl4iPtukwe7m0kIxUMskkgA"),
|
||||
description: None,
|
||||
description: "[description]",
|
||||
album_type: Ep,
|
||||
year: Some(1968),
|
||||
by_va: false,
|
||||
|
|
@ -41,7 +41,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCl4iPtukwe7m0kIxUMskkgA"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_h8ltx5oKvyY",
|
||||
name: "Pedha Rasi Peddamma Katha",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -62,7 +62,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC1C05NyYICFB2mVGn9_ttEw"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_h8ltx5oKvyY",
|
||||
name: "Pedha Rasi Peddamma Katha",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -83,7 +83,7 @@ MusicAlbum(
|
|||
artist_id: Some("UC_KQPMiRQl3CFAIKTVfCHwA"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_h8ltx5oKvyY",
|
||||
name: "Pedha Rasi Peddamma Katha",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
@ -104,7 +104,7 @@ MusicAlbum(
|
|||
artist_id: Some("UCDqpyYkgWy2h03HamIfODjw"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_h8ltx5oKvyY",
|
||||
name: "Pedha Rasi Peddamma Katha",
|
||||
name: "[name]",
|
||||
)),
|
||||
view_count: None,
|
||||
is_video: false,
|
||||
|
|
|
|||
|
|
@ -4,26 +4,30 @@ expression: track
|
|||
---
|
||||
TrackDetails(
|
||||
track: TrackItem(
|
||||
id: "7nigXQS1Xb0",
|
||||
name: "INVU",
|
||||
duration: Some(205),
|
||||
id: "qIZ-vvg-wiU",
|
||||
name: "Scheiße baut sich nicht von alleine",
|
||||
duration: Some(232),
|
||||
cover: "[cover]",
|
||||
artists: [
|
||||
ArtistId(
|
||||
id: Some("UCwzCuKxyMY_sT7hr1E8G1XA"),
|
||||
name: "TAEYEON",
|
||||
id: Some("UCAbxL0lZcmlaQrzoUbrvS3A"),
|
||||
name: "SDP",
|
||||
),
|
||||
ArtistId(
|
||||
id: Some("UCVRREKn7V1Cb8qvf43dwZ6w"),
|
||||
name: "257ers",
|
||||
),
|
||||
],
|
||||
artist_id: Some("UCwzCuKxyMY_sT7hr1E8G1XA"),
|
||||
artist_id: Some("UCAbxL0lZcmlaQrzoUbrvS3A"),
|
||||
album: Some(AlbumId(
|
||||
id: "MPREb_4xbv14CiQJm",
|
||||
name: "INVU - The 3rd Album",
|
||||
id: "MPREb_cjEzeaBgZAq",
|
||||
name: "Ein Gutes Schlechtes Vorbild",
|
||||
)),
|
||||
view_count: "[view_count]",
|
||||
is_video: false,
|
||||
track_nr: None,
|
||||
by_va: false,
|
||||
),
|
||||
lyrics_id: Some("MPLYt_4xbv14CiQJm-1"),
|
||||
related_id: Some("MPTRt_4xbv14CiQJm-1"),
|
||||
lyrics_id: Some("MPLYt_cjEzeaBgZAq-2"),
|
||||
related_id: Some("MPTRt_cjEzeaBgZAq-2"),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -348,11 +348,14 @@ fn get_playlist(
|
|||
#[case] description: Option<String>,
|
||||
#[case] channel: Option<(&str, &str)>,
|
||||
rp: RustyPipe,
|
||||
unlocalized: bool,
|
||||
) {
|
||||
let playlist = tokio_test::block_on(rp.query().playlist(id)).unwrap();
|
||||
|
||||
assert_eq!(playlist.id, id);
|
||||
assert_eq!(playlist.name, name);
|
||||
if unlocalized {
|
||||
assert_eq!(playlist.name, name);
|
||||
}
|
||||
assert!(!playlist.videos.is_empty());
|
||||
assert_eq!(!playlist.videos.is_exhausted(), is_long);
|
||||
assert_gte(
|
||||
|
|
@ -1046,11 +1049,12 @@ mod channel_rss {
|
|||
fn search(rp: RustyPipe, unlocalized: bool) {
|
||||
let result = tokio_test::block_on(rp.query().search("doobydoobap")).unwrap();
|
||||
|
||||
assert!(
|
||||
result.items.count.unwrap() > 1000,
|
||||
"expected > 1000 total results, got {}",
|
||||
result.items.count.unwrap()
|
||||
assert_gte(
|
||||
result.items.count.unwrap(),
|
||||
if unlocalized { 7000 } else { 150 },
|
||||
"results",
|
||||
);
|
||||
|
||||
if unlocalized {
|
||||
assert_eq!(result.corrected_query.unwrap(), "doobydobap");
|
||||
}
|
||||
|
|
@ -1330,10 +1334,14 @@ fn music_album(#[case] name: &str, #[case] id: &str, rp: RustyPipe, unlocalized:
|
|||
} else {
|
||||
insta::assert_ron_snapshot!(format!("music_album_{name}_intl"), album,
|
||||
{
|
||||
".name" => "[name]",
|
||||
".cover" => "[cover]",
|
||||
".description" => "[description]",
|
||||
".artists[].name" => "[name]",
|
||||
".tracks[].name" => "[name]",
|
||||
".tracks[].album.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);
|
||||
|
||||
if typo {
|
||||
assert_eq!(res.corrected_query.unwrap(), "lieblingsmensch namika");
|
||||
if unlocalized {
|
||||
assert_eq!(res.corrected_query.unwrap(), "lieblingsmensch namika");
|
||||
}
|
||||
} else {
|
||||
assert_eq!(res.corrected_query, None);
|
||||
}
|
||||
|
|
@ -1655,6 +1665,7 @@ fn music_search_albums(
|
|||
#[case] album_type: AlbumType,
|
||||
#[case] more: bool,
|
||||
rp: RustyPipe,
|
||||
unlocalized: bool,
|
||||
) {
|
||||
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);
|
||||
let album_artist = &album.artists[0];
|
||||
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!(!album.cover.is_empty(), "got no cover");
|
||||
|
|
@ -1823,7 +1836,7 @@ fn music_search_suggestion(
|
|||
|
||||
#[rstest]
|
||||
#[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) {
|
||||
let track = tokio_test::block_on(rp.query().music_details(id)).unwrap();
|
||||
|
||||
|
|
|
|||
Reference in a new issue