added option to load own subtitles

This commit is contained in:
Schnitzel5 2025-03-22 22:10:02 +01:00
parent 08f686999b
commit 4b2ee1f0e6
3 changed files with 53 additions and 27 deletions

View file

@ -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..."
}

View file

@ -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..."
}

View file

@ -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<AnimeStreamPage>
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),
),
],
),
);
}