From 4b2ee1f0e6769e81be04821c4ebdccb0fc71a710 Mon Sep 17 00:00:00 2001 From: Schnitzel5 Date: Sat, 22 Mar 2025 22:10:02 +0100 Subject: [PATCH] added option to load own subtitles --- lib/l10n/app_de.arb | 3 +- lib/l10n/app_en.arb | 3 +- lib/modules/anime/anime_player_view.dart | 74 ++++++++++++++++-------- 3 files changed, 53 insertions(+), 27 deletions(-) diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 14fe5c2a..03a0302f 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -444,5 +444,6 @@ "repo_added": "Erweiterungs-Repository hinzugefügt!", "genre_search_library": "Genre im Bibliothek suchen", "genre_search_source": "Zur Erweiterung navigieren", - "source_not_added": "Die Erweiterung ist nicht installiert!" + "source_not_added": "Die Erweiterung ist nicht installiert!", + "load_own_subtitles": "Deine eigene Untertiteln laden..." } \ No newline at end of file diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index ae2d3f8d..5d3784c2 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -457,5 +457,6 @@ "add_repo": "Add Repository?", "genre_search_library": "Search genre in library", "genre_search_source": "Browse in source", - "source_not_added": "Source is not installed!" + "source_not_added": "Source is not installed!", + "load_own_subtitles": "Load your own subtitles..." } \ No newline at end of file diff --git a/lib/modules/anime/anime_player_view.dart b/lib/modules/anime/anime_player_view.dart index 635642cd..8ae53747 100644 --- a/lib/modules/anime/anime_player_view.dart +++ b/lib/modules/anime/anime_player_view.dart @@ -1,10 +1,12 @@ import 'dart:async'; import 'dart:io'; import 'package:bot_toast/bot_toast.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart' as riv; +import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/video.dart' as vid; @@ -627,32 +629,54 @@ class _AnimeStreamPageState extends riv.ConsumerState return Padding( padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 12), child: Column( - children: - videoSubtitleLast.toSet().toList().map((sub) { - final title = - sub.title ?? - sub.subtitle?.title ?? - sub.subtitle?.language ?? - sub.subtitle?.channels ?? - "None"; + children: [ + ...videoSubtitleLast.toSet().toList().map((sub) { + final title = + sub.title ?? + sub.subtitle?.title ?? + sub.subtitle?.language ?? + sub.subtitle?.channels ?? + "None"; - final selected = - (title == - (subtitle.title ?? - subtitle.language ?? - subtitle.channels ?? - "None")) || - (subtitle.id == "no" && title == "None"); - return GestureDetector( - onTap: () { - Navigator.pop(context); - try { - _player.setSubtitleTrack(sub.subtitle!); - } catch (_) {} - }, - child: textWidget(title, selected), - ); - }).toList(), + final selected = + (title == + (subtitle.title ?? + subtitle.language ?? + subtitle.channels ?? + "None")) || + (subtitle.id == "no" && title == "None"); + return GestureDetector( + onTap: () { + Navigator.pop(context); + try { + _player.setSubtitleTrack(sub.subtitle!); + } catch (_) {} + }, + child: textWidget(title, selected), + ); + }), + GestureDetector( + onTap: () async { + try { + FilePickerResult? result = await FilePicker.platform.pickFiles( + allowMultiple: false, + ); + + if (result != null && context.mounted) { + _player.setSubtitleTrack( + SubtitleTrack.uri(result.files.first.path!), + ); + } + if (!context.mounted) return; + Navigator.pop(context); + } catch (_) { + botToast("Error"); + Navigator.pop(context); + } + }, + child: textWidget(context.l10n.load_own_subtitles, false), + ), + ], ), ); }