Fix language code matching (ISO639-2 synonyms)
This commit is contained in:
@@ -359,7 +359,8 @@ sealed class CinemaMediaSourceManager : IMediaSourceManager
|
||||
|
||||
if (m.subtitles != null && subtitleLang != null)
|
||||
foreach (StreamSubtitle j in m.subtitles)
|
||||
if (ISO639_1ToISO639_2(j.language) == subtitleLang)
|
||||
if (ISO639_1ToISO639_2(j.language).Primary == subtitleLang
|
||||
|| ISO639_1ToISO639_2(j.language).Synonym == subtitleLang)
|
||||
{
|
||||
score += 4; // proper subtitles are preferred but much better resulution still rules
|
||||
break;
|
||||
@@ -367,7 +368,8 @@ sealed class CinemaMediaSourceManager : IMediaSourceManager
|
||||
|
||||
if (m.audio != null && audioLang != null)
|
||||
foreach (StreamAudio j in m.audio)
|
||||
if (ISO639_1ToISO639_2(j.language) == audioLang)
|
||||
if (ISO639_1ToISO639_2(j.language).Primary == audioLang
|
||||
|| ISO639_1ToISO639_2(j.language).Synonym == audioLang)
|
||||
{
|
||||
score += 25; // proper audio channel overrides resolution and other minor bonuses
|
||||
break;
|
||||
@@ -649,7 +651,7 @@ sealed class CinemaMediaSourceManager : IMediaSourceManager
|
||||
MediaStream a = new MediaStream();
|
||||
a.Index = -1;
|
||||
a.Type = MediaStreamType.Subtitle;
|
||||
a.Language = ISO639_1ToISO639_2(j.language);
|
||||
a.Language = ISO639_1ToISO639_2(j.language).Primary;
|
||||
a.IsForced = j.forced;
|
||||
a.DeliveryUrl = j.src;
|
||||
a.IsExternalUrl = true;
|
||||
@@ -705,7 +707,7 @@ sealed class CinemaMediaSourceManager : IMediaSourceManager
|
||||
MediaStream a = new MediaStream();
|
||||
a.Index = uniqueId--;
|
||||
a.Type = MediaStreamType.Audio;
|
||||
a.Language = ISO639_1ToISO639_2(j.language);
|
||||
a.Language = ISO639_1ToISO639_2(j.language).Primary;
|
||||
a.Codec = j.codec;
|
||||
a.Channels = j.channels;
|
||||
|
||||
@@ -721,7 +723,7 @@ sealed class CinemaMediaSourceManager : IMediaSourceManager
|
||||
MediaStream a = new MediaStream();
|
||||
a.Index = uniqueId--;
|
||||
a.Type = MediaStreamType.Subtitle;
|
||||
a.Language = ISO639_1ToISO639_2(j.language);
|
||||
a.Language = ISO639_1ToISO639_2(j.language).Primary;
|
||||
a.IsForced = j.forced;
|
||||
a.DeliveryUrl = j.src;
|
||||
a.IsExternalUrl = true;
|
||||
@@ -904,195 +906,195 @@ sealed class CinemaMediaSourceManager : IMediaSourceManager
|
||||
/// <summary>
|
||||
/// Converts two-letter 639-1 language code to three letter 639-2.
|
||||
/// </summary>
|
||||
private static string? ISO639_1ToISO639_2(string? twoLetter639_1)
|
||||
private static (string? Primary, string? Synonym) ISO639_1ToISO639_2(string? twoLetter639_1)
|
||||
{
|
||||
// Based on https://www.loc.gov/standards/iso639-2/php/code_list-utf8.php
|
||||
switch (twoLetter639_1)
|
||||
{
|
||||
case "aa": return "aar";
|
||||
case "ab": return "abk";
|
||||
case "af": return "afr";
|
||||
case "ak": return "aka";
|
||||
case "sq": return "alb";
|
||||
case "am": return "amh";
|
||||
case "ar": return "ara";
|
||||
case "an": return "arg";
|
||||
case "hy": return "arm";
|
||||
case "as": return "asm";
|
||||
case "av": return "ava";
|
||||
case "ae": return "ave";
|
||||
case "ay": return "aym";
|
||||
case "az": return "aze";
|
||||
case "ba": return "bak";
|
||||
case "bm": return "bam";
|
||||
case "eu": return "baq";
|
||||
case "be": return "bel";
|
||||
case "bn": return "ben";
|
||||
case "bi": return "bis";
|
||||
case "bo": return "tib";
|
||||
case "bs": return "bos";
|
||||
case "br": return "bre";
|
||||
case "bg": return "bul";
|
||||
case "my": return "bur";
|
||||
case "ca": return "cat";
|
||||
case "cs": return "cze";
|
||||
case "ch": return "cha";
|
||||
case "ce": return "che";
|
||||
case "zh": return "chi";
|
||||
case "cu": return "chu";
|
||||
case "cv": return "chv";
|
||||
case "kw": return "cor";
|
||||
case "co": return "cos";
|
||||
case "cr": return "cre";
|
||||
case "cy": return "wel";
|
||||
case "da": return "dan";
|
||||
case "de": return "ger";
|
||||
case "dv": return "div";
|
||||
case "nl": return "dut";
|
||||
case "dz": return "dzo";
|
||||
case "el": return "gre";
|
||||
case "en": return "eng";
|
||||
case "eo": return "epo";
|
||||
case "et": return "est";
|
||||
case "ee": return "ewe";
|
||||
case "fo": return "fao";
|
||||
case "fa": return "per";
|
||||
case "fj": return "fij";
|
||||
case "fi": return "fin";
|
||||
case "fr": return "fre";
|
||||
case "fy": return "fry";
|
||||
case "ff": return "ful";
|
||||
case "ka": return "geo";
|
||||
case "gd": return "gla";
|
||||
case "ga": return "gle";
|
||||
case "gl": return "glg";
|
||||
case "gv": return "glv";
|
||||
case "gn": return "grn";
|
||||
case "gu": return "guj";
|
||||
case "ht": return "hat";
|
||||
case "ha": return "hau";
|
||||
case "he": return "heb";
|
||||
case "hz": return "her";
|
||||
case "hi": return "hin";
|
||||
case "ho": return "hmo";
|
||||
case "hr": return "hrv";
|
||||
case "hu": return "hun";
|
||||
case "ig": return "ibo";
|
||||
case "is": return "ice";
|
||||
case "io": return "ido";
|
||||
case "ii": return "iii";
|
||||
case "iu": return "iku";
|
||||
case "ie": return "ile";
|
||||
case "ia": return "ina";
|
||||
case "id": return "ind";
|
||||
case "ik": return "ipk";
|
||||
case "it": return "ita";
|
||||
case "jv": return "jav";
|
||||
case "ja": return "jpn";
|
||||
case "kl": return "kal";
|
||||
case "kn": return "kan";
|
||||
case "ks": return "kas";
|
||||
case "kr": return "kau";
|
||||
case "kk": return "kaz";
|
||||
case "km": return "khm";
|
||||
case "ki": return "kik";
|
||||
case "rw": return "kin";
|
||||
case "ky": return "kir";
|
||||
case "kv": return "kom";
|
||||
case "kg": return "kon";
|
||||
case "ko": return "kor";
|
||||
case "kj": return "kua";
|
||||
case "ku": return "kur";
|
||||
case "lo": return "lao";
|
||||
case "la": return "lat";
|
||||
case "lv": return "lav";
|
||||
case "li": return "lim";
|
||||
case "ln": return "lin";
|
||||
case "lt": return "lit";
|
||||
case "lb": return "ltz";
|
||||
case "lu": return "lub";
|
||||
case "lg": return "lug";
|
||||
case "mk": return "mac";
|
||||
case "mh": return "mah";
|
||||
case "ml": return "mal";
|
||||
case "mi": return "mao";
|
||||
case "mr": return "mar";
|
||||
case "ms": return "may";
|
||||
case "mg": return "mlg";
|
||||
case "mt": return "mlt";
|
||||
case "mn": return "mon";
|
||||
case "na": return "nau";
|
||||
case "nv": return "nav";
|
||||
case "nr": return "nbl";
|
||||
case "nd": return "nde";
|
||||
case "ng": return "ndo";
|
||||
case "ne": return "nep";
|
||||
case "nn": return "nno";
|
||||
case "nb": return "nob";
|
||||
case "no": return "nor";
|
||||
case "ny": return "nya";
|
||||
case "oc": return "oci";
|
||||
case "oj": return "oji";
|
||||
case "or": return "ori";
|
||||
case "om": return "orm";
|
||||
case "os": return "oss";
|
||||
case "pa": return "pan";
|
||||
case "pi": return "pli";
|
||||
case "pl": return "pol";
|
||||
case "pt": return "por";
|
||||
case "ps": return "pus";
|
||||
case "qu": return "que";
|
||||
case "rm": return "roh";
|
||||
case "ro": return "rum";
|
||||
case "rn": return "run";
|
||||
case "ru": return "rus";
|
||||
case "sg": return "sag";
|
||||
case "sa": return "san";
|
||||
case "si": return "sin";
|
||||
case "sk": return "slo";
|
||||
case "sl": return "slv";
|
||||
case "se": return "sme";
|
||||
case "sm": return "smo";
|
||||
case "sn": return "sna";
|
||||
case "sd": return "snd";
|
||||
case "so": return "som";
|
||||
case "st": return "sot";
|
||||
case "es": return "spa";
|
||||
case "sc": return "srd";
|
||||
case "sr": return "srp";
|
||||
case "ss": return "ssw";
|
||||
case "su": return "sun";
|
||||
case "sw": return "swa";
|
||||
case "sv": return "swe";
|
||||
case "ty": return "tah";
|
||||
case "ta": return "tam";
|
||||
case "tt": return "tat";
|
||||
case "te": return "tel";
|
||||
case "tg": return "tgk";
|
||||
case "tl": return "tgl";
|
||||
case "th": return "tha";
|
||||
case "ti": return "tir";
|
||||
case "to": return "ton";
|
||||
case "tn": return "tsn";
|
||||
case "ts": return "tso";
|
||||
case "tk": return "tuk";
|
||||
case "tr": return "tur";
|
||||
case "tw": return "twi";
|
||||
case "ug": return "uig";
|
||||
case "uk": return "ukr";
|
||||
case "ur": return "urd";
|
||||
case "uz": return "uzb";
|
||||
case "ve": return "ven";
|
||||
case "vi": return "vie";
|
||||
case "vo": return "vol";
|
||||
case "wa": return "wln";
|
||||
case "wo": return "wol";
|
||||
case "xh": return "xho";
|
||||
case "yi": return "yid";
|
||||
case "yo": return "yor";
|
||||
case "za": return "zha";
|
||||
case "zu": return "zul";
|
||||
default: return twoLetter639_1;
|
||||
case "aa": return ("aar", null);
|
||||
case "ab": return ("abk", null);
|
||||
case "af": return ("afr", null);
|
||||
case "ak": return ("aka", null);
|
||||
case "sq": return ("alb", "sqi");
|
||||
case "am": return ("amh", null);
|
||||
case "ar": return ("ara", null);
|
||||
case "an": return ("arg", null);
|
||||
case "hy": return ("arm", "hye");
|
||||
case "as": return ("asm", null);
|
||||
case "av": return ("ava", null);
|
||||
case "ae": return ("ave", null);
|
||||
case "ay": return ("aym", null);
|
||||
case "az": return ("aze", null);
|
||||
case "ba": return ("bak", null);
|
||||
case "bm": return ("bam", null);
|
||||
case "eu": return ("baq", "eus");
|
||||
case "be": return ("bel", null);
|
||||
case "bn": return ("ben", null);
|
||||
case "bi": return ("bis", null);
|
||||
case "bo": return ("tib", "bod");
|
||||
case "bs": return ("bos", null);
|
||||
case "br": return ("bre", null);
|
||||
case "bg": return ("bul", null);
|
||||
case "my": return ("bur", "mya");
|
||||
case "ca": return ("cat", null);
|
||||
case "cs": return ("cze", "ces");
|
||||
case "ch": return ("cha", null);
|
||||
case "ce": return ("che", null);
|
||||
case "zh": return ("chi", "zho");
|
||||
case "cu": return ("chu", null);
|
||||
case "cv": return ("chv", null);
|
||||
case "kw": return ("cor", null);
|
||||
case "co": return ("cos", null);
|
||||
case "cr": return ("cre", null);
|
||||
case "cy": return ("wel", "cym");
|
||||
case "da": return ("dan", null);
|
||||
case "de": return ("ger", "deu");
|
||||
case "dv": return ("div", null);
|
||||
case "nl": return ("dut", "nld");
|
||||
case "dz": return ("dzo", null);
|
||||
case "el": return ("gre", "ell");
|
||||
case "en": return ("eng", null);
|
||||
case "eo": return ("epo", null);
|
||||
case "et": return ("est", null);
|
||||
case "ee": return ("ewe", null);
|
||||
case "fo": return ("fao", null);
|
||||
case "fa": return ("per", "fas");
|
||||
case "fj": return ("fij", null);
|
||||
case "fi": return ("fin", null);
|
||||
case "fr": return ("fre", "fra");
|
||||
case "fy": return ("fry", null);
|
||||
case "ff": return ("ful", null);
|
||||
case "ka": return ("geo", "kat");
|
||||
case "gd": return ("gla", null);
|
||||
case "ga": return ("gle", null);
|
||||
case "gl": return ("glg", null);
|
||||
case "gv": return ("glv", null);
|
||||
case "gn": return ("grn", null);
|
||||
case "gu": return ("guj", null);
|
||||
case "ht": return ("hat", null);
|
||||
case "ha": return ("hau", null);
|
||||
case "he": return ("heb", null);
|
||||
case "hz": return ("her", null);
|
||||
case "hi": return ("hin", null);
|
||||
case "ho": return ("hmo", null);
|
||||
case "hr": return ("hrv", null);
|
||||
case "hu": return ("hun", null);
|
||||
case "ig": return ("ibo", null);
|
||||
case "is": return ("ice", "isl");
|
||||
case "io": return ("ido", null);
|
||||
case "ii": return ("iii", null);
|
||||
case "iu": return ("iku", null);
|
||||
case "ie": return ("ile", null);
|
||||
case "ia": return ("ina", null);
|
||||
case "id": return ("ind", null);
|
||||
case "ik": return ("ipk", null);
|
||||
case "it": return ("ita", null);
|
||||
case "jv": return ("jav", null);
|
||||
case "ja": return ("jpn", null);
|
||||
case "kl": return ("kal", null);
|
||||
case "kn": return ("kan", null);
|
||||
case "ks": return ("kas", null);
|
||||
case "kr": return ("kau", null);
|
||||
case "kk": return ("kaz", null);
|
||||
case "km": return ("khm", null);
|
||||
case "ki": return ("kik", null);
|
||||
case "rw": return ("kin", null);
|
||||
case "ky": return ("kir", null);
|
||||
case "kv": return ("kom", null);
|
||||
case "kg": return ("kon", null);
|
||||
case "ko": return ("kor", null);
|
||||
case "kj": return ("kua", null);
|
||||
case "ku": return ("kur", null);
|
||||
case "lo": return ("lao", null);
|
||||
case "la": return ("lat", null);
|
||||
case "lv": return ("lav", null);
|
||||
case "li": return ("lim", null);
|
||||
case "ln": return ("lin", null);
|
||||
case "lt": return ("lit", null);
|
||||
case "lb": return ("ltz", null);
|
||||
case "lu": return ("lub", null);
|
||||
case "lg": return ("lug", null);
|
||||
case "mk": return ("mac", "mkd");
|
||||
case "mh": return ("mah", null);
|
||||
case "ml": return ("mal", null);
|
||||
case "mi": return ("mao", "mri");
|
||||
case "mr": return ("mar", null);
|
||||
case "ms": return ("may", "msa");
|
||||
case "mg": return ("mlg", null);
|
||||
case "mt": return ("mlt", null);
|
||||
case "mn": return ("mon", null);
|
||||
case "na": return ("nau", null);
|
||||
case "nv": return ("nav", null);
|
||||
case "nr": return ("nbl", null);
|
||||
case "nd": return ("nde", null);
|
||||
case "ng": return ("ndo", null);
|
||||
case "ne": return ("nep", null);
|
||||
case "nn": return ("nno", null);
|
||||
case "nb": return ("nob", null);
|
||||
case "no": return ("nor", null);
|
||||
case "ny": return ("nya", null);
|
||||
case "oc": return ("oci", null);
|
||||
case "oj": return ("oji", null);
|
||||
case "or": return ("ori", null);
|
||||
case "om": return ("orm", null);
|
||||
case "os": return ("oss", null);
|
||||
case "pa": return ("pan", null);
|
||||
case "pi": return ("pli", null);
|
||||
case "pl": return ("pol", null);
|
||||
case "pt": return ("por", null);
|
||||
case "ps": return ("pus", null);
|
||||
case "qu": return ("que", null);
|
||||
case "rm": return ("roh", null);
|
||||
case "ro": return ("rum", "ron");
|
||||
case "rn": return ("run", null);
|
||||
case "ru": return ("rus", null);
|
||||
case "sg": return ("sag", null);
|
||||
case "sa": return ("san", null);
|
||||
case "si": return ("sin", null);
|
||||
case "sk": return ("slo", "slk");
|
||||
case "sl": return ("slv", null);
|
||||
case "se": return ("sme", null);
|
||||
case "sm": return ("smo", null);
|
||||
case "sn": return ("sna", null);
|
||||
case "sd": return ("snd", null);
|
||||
case "so": return ("som", null);
|
||||
case "st": return ("sot", null);
|
||||
case "es": return ("spa", null);
|
||||
case "sc": return ("srd", null);
|
||||
case "sr": return ("srp", null);
|
||||
case "ss": return ("ssw", null);
|
||||
case "su": return ("sun", null);
|
||||
case "sw": return ("swa", null);
|
||||
case "sv": return ("swe", null);
|
||||
case "ty": return ("tah", null);
|
||||
case "ta": return ("tam", null);
|
||||
case "tt": return ("tat", null);
|
||||
case "te": return ("tel", null);
|
||||
case "tg": return ("tgk", null);
|
||||
case "tl": return ("tgl", null);
|
||||
case "th": return ("tha", null);
|
||||
case "ti": return ("tir", null);
|
||||
case "to": return ("ton", null);
|
||||
case "tn": return ("tsn", null);
|
||||
case "ts": return ("tso", null);
|
||||
case "tk": return ("tuk", null);
|
||||
case "tr": return ("tur", null);
|
||||
case "tw": return ("twi", null);
|
||||
case "ug": return ("uig", null);
|
||||
case "uk": return ("ukr", null);
|
||||
case "ur": return ("urd", null);
|
||||
case "uz": return ("uzb", null);
|
||||
case "ve": return ("ven", null);
|
||||
case "vi": return ("vie", null);
|
||||
case "vo": return ("vol", null);
|
||||
case "wa": return ("wln", null);
|
||||
case "wo": return ("wol", null);
|
||||
case "xh": return ("xho", null);
|
||||
case "yi": return ("yid", null);
|
||||
case "yo": return ("yor", null);
|
||||
case "za": return ("zha", null);
|
||||
case "zu": return ("zul", null);
|
||||
default: return (twoLetter639_1, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user