added auto-detect language for subtitles

This commit is contained in:
Schnitzel5 2025-03-06 00:31:20 +01:00
parent 52c5ac5b48
commit 355f19dfe4
3 changed files with 118 additions and 7 deletions

View file

@ -24,6 +24,7 @@ import 'package:mangayomi/services/aniskip.dart';
import 'package:mangayomi/services/get_video_list.dart';
import 'package:mangayomi/services/torrent_server.dart';
import 'package:mangayomi/utils/extensions/build_context_extensions.dart';
import 'package:mangayomi/utils/language.dart';
import 'package:media_kit/media_kit.dart';
import 'package:media_kit_video/media_kit_video.dart';
import 'package:media_kit_video/media_kit_video_controls/src/controls/extensions/duration.dart';
@ -69,6 +70,7 @@ class _AnimePlayerViewState extends riv.ConsumerState<AnimePlayerView> {
@override
Widget build(BuildContext context) {
final l10nLocale = ref.watch(l10nLocaleStateProvider);
final serversData = ref.watch(getVideoListProvider(episode: episode));
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);
return serversData.when(
@ -91,6 +93,9 @@ class _AnimePlayerViewState extends riv.ConsumerState<AnimePlayerView> {
}
return AnimeStreamPage(
defaultSubtitle: completeLanguageNameEnglish(
l10nLocale.toLanguageTag(),
),
episode: episode,
videos: videos,
isLocal: isLocal,
@ -144,11 +149,13 @@ class _AnimePlayerViewState extends riv.ConsumerState<AnimePlayerView> {
class AnimeStreamPage extends riv.ConsumerStatefulWidget {
final List<vid.Video> videos;
final Chapter episode;
final String defaultSubtitle;
final bool isLocal;
final bool isTorrent;
final void Function(bool) desktopFullScreenPlayer;
const AnimeStreamPage({
super.key,
required this.defaultSubtitle,
required this.isLocal,
required this.videos,
required this.episode,
@ -214,9 +221,12 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage>
if (_firstVid.subtitles?.isNotEmpty ?? false) {
if (_initSubtitleAndAudio) {
try {
final file = _firstVid.subtitles!.first.file ?? "";
final label = _firstVid.subtitles!.first.label; // TODO add setting for default
print("DEBUG $file $label");
final defaultTrack = _firstVid.subtitles!.firstWhere(
(sub) => sub.label == widget.defaultSubtitle,
orElse: () => _firstVid.subtitles!.first,
);
final file = defaultTrack.file ?? "";
final label = defaultTrack.label;
_player.setSubtitleTrack(
file.startsWith("http")
? SubtitleTrack.uri(file, title: label, language: label)

View file

@ -1515,17 +1515,17 @@ class _MangaDetailViewState extends ConsumerState<MangaDetailView>
if (value == 0) {
switch (widget.manga!.itemType) {
case ItemType.manga:
context.push('/MangaLibrary');
context.replace('/MangaLibrary');
break;
case ItemType.anime:
context.push('/AnimeLibrary');
context.replace('/AnimeLibrary');
break;
case ItemType.novel:
context.push('/NovelLibrary');
context.replace('/NovelLibrary');
break;
}
} else {
context.push(
context.replace(
'/mangaHome',
extra: (source, false),
);

View file

@ -120,3 +120,104 @@ final languagesMap = {
"Uzbek": "uz",
"Tagalog": "tl",
};
completeLanguageNameEnglish(String lang) {
lang = lang.toLowerCase();
for (var element in languagesMapEnglish.entries) {
if (element.value.toLowerCase() == lang) {
return element.key;
}
}
return lang.trim().toUpperCase();
}
final languagesMapEnglish = {
'All': 'all',
'French': 'fr',
'English': 'en',
'Vietnamese': 'vi',
'Thai': 'th',
'Bulgaria': 'bg',
'Arabian': 'ar',
'Portuguese': 'pt',
'Korean': 'ko',
'Portuguese - Portuguese(Brazil)': 'pt-br',
'Italian': 'it',
'Russian': 'ru',
'Spanish': 'es',
'Spanish - Spanish(Latin_America)': 'es-la',
'Indonesia': 'id',
'Japanese': 'ja',
'Polish': 'pl',
'Turkish': 'tr',
'German': 'de',
'Chinese': 'zh',
"Filipino": "fil",
"dansk": "da",
"Afrikaans": "af",
"Azərbaycan": "az",
"bosanski": "bs",
"svenska": "sv",
"suomi": "fi",
"Norwegian Bokmål (Norway)": "nb-no",
"Norsk": "no",
"Nederlands": "nl",
"Malaysia": "ms",
"Hrvatski": "hr",
"Kurdî": "ku",
"Magyar": "hu",
"Cebuano": "ceb",
"English (United States)": "en-us",
"Esperanto": "eo",
"Estonian": "et",
"Faroese": "fo",
"Irish": "ga",
"Guarani": "gn",
"Gujarati": "gu",
"Hausa": "ha",
"Haitian Creole": "ht",
"Armenian": "hy",
"Igbo": "ig",
"Icelandic": "is",
"Georgian": "ka",
"Javanese": "jv",
"Kazakh": "kk",
"Cambodian": "km",
"Kannada": "kn",
"Kyrgyz": "ky",
"Luxembourgish": "lb",
"Laothian": "lo",
"Latvian": "lv",
"Malagasy": "mg",
"Maori": "mi",
"Macedonian": "mk",
"Marathi": "mr",
"Maltese": "mt",
"Nepali": "ne",
"Nyanja": "ny",
"Pashto": "ps",
"Portuguese (Portugal)": "pt-pt",
"Romansh": "rm",
"Sindhi": "sd",
"Sinhalese": "si",
"Slovak": "sk",
"Slovenian": "sl",
"Samoan": "sm",
"Shona": "sn",
"Somali": "so",
"Albanian": "sq",
"Serbian": "sr",
"Sesotho": "st",
"Swahili": "sw",
"Tamil": "ta",
"Tajik": "tg",
"Tigrinya": "ti",
"Turkmen": "tk",
"Tonga": "to",
"Urdu": "ur",
"Yoruba": "yo",
"Chinese (Traditional)": "zh-tw",
"Latin": "la",
"Uzbek": "uz",
"Tagalog": "tl",
};