private static string __GetTitle(IEnumerable <Title> seriesTitles, IEnumerable <Title> episodeTitles, string seriesTitle, string episodeTitle, DisplayTitleType outputType, params string[] languageCandidates) { // Lazy init string builder when/if we need it. StringBuilder titleBuilder = null; switch (outputType) { default: return(null); case DisplayTitleType.MainTitle: case DisplayTitleType.FullTitle: { string title = (GetTitleByTypeAndLanguage(seriesTitles, "official", languageCandidates) ?? seriesTitle)?.Trim(); // Return series title. if (outputType == DisplayTitleType.MainTitle) { return(title); } titleBuilder = new StringBuilder(title); goto case DisplayTitleType.SubTitle; } case DisplayTitleType.SubTitle: { string title = (GetTitleByLanguages(episodeTitles, languageCandidates) ?? episodeTitle)?.Trim(); // Return episode title. if (outputType == DisplayTitleType.SubTitle) { return(title); } // Ignore sub-title of movie if it strictly equals the text below. if (title != "Complete Movie" && !string.IsNullOrEmpty(title?.Trim())) { titleBuilder?.Append($": {title}"); } return(titleBuilder?.ToString() ?? ""); } } }
public static string GetTitle(IEnumerable <Title> seriesTitles, IEnumerable <Title> episodeTitles, string seriesTitle, string episodeTitle, DisplayTitleType outputType, string metadataLanguage, params string[] originLanguages) => GetTitle(seriesTitles, episodeTitles, seriesTitle, episodeTitle, Plugin.Instance.Configuration.TitleMainType, outputType, metadataLanguage, originLanguages);
public static string GetTitle(IEnumerable <Title> seriesTitles, IEnumerable <Title> episodeTitles, string seriesTitle, string episodeTitle, DisplayLanguageType languageType, DisplayTitleType outputType, string displayLanguage, params string[] originLanguages) { // Don't process anything if the series titles are not provided. if (seriesTitles == null) { return(null); } // Guess origin language if not provided. if (originLanguages.Length == 0) { originLanguages = GuessOriginLanguage(seriesTitles); } switch (languageType) { // 'Ignore' will always return null, and all other values will also return null. default: case DisplayLanguageType.Ignore: return(null); // Let Shoko decide the title. case DisplayLanguageType.Default: return(__GetTitle(null, null, seriesTitle, episodeTitle, outputType)); // Display in metadata-preferred language, or fallback to default. case DisplayLanguageType.MetadataPreferred: var title = __GetTitle(seriesTitles, episodeTitles, seriesTitle, episodeTitle, outputType, displayLanguage); if (string.IsNullOrEmpty(title)) { goto case DisplayLanguageType.Default; } return(title); // Display in origin language without fallback. case DisplayLanguageType.Origin: return(__GetTitle(seriesTitles, episodeTitles, seriesTitle, episodeTitle, outputType, originLanguages)); } }
public static (string, string) GetTitles(IEnumerable <Title> seriesTitles, IEnumerable <Title> episodeTitles, string seriesTitle, string episodeTitle, DisplayTitleType outputType, string metadataLanguage) { // Don't process anything if the series titles are not provided. if (seriesTitles == null) { return(null, null); } var originLanguage = GuessOriginLanguage(seriesTitles); return( GetTitle(seriesTitles, episodeTitles, seriesTitle, episodeTitle, Plugin.Instance.Configuration.TitleMainType, outputType, metadataLanguage, originLanguage), GetTitle(seriesTitles, episodeTitles, seriesTitle, episodeTitle, Plugin.Instance.Configuration.TitleAlternateType, outputType, metadataLanguage, originLanguage) ); }