fix: Playback not cancelling if no compatible media was found (#100)

Co-authored-by: PartyDonut <PartyDonut@users.noreply.github.com>
This commit is contained in:
PartyDonut 2024-11-01 20:20:00 +01:00 committed by GitHub
parent ca115db3b9
commit 6c328e60ff
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 22 additions and 17 deletions

View file

@ -1081,5 +1081,8 @@
"autoNextOffStaticTitle": "Static", "autoNextOffStaticTitle": "Static",
"autoNextOffStaticDesc": "Show the next-up screen when 30 seconds of playtime remain", "autoNextOffStaticDesc": "Show the next-up screen when 30 seconds of playtime remain",
"playbackRate": "Playback rate", "playbackRate": "Playback rate",
"speed": "Speed" "speed": "Speed",
"unableToPlayMedia": "There was an error finding a compatible media type",
"errorOpeningMedia": "Something went trying to play this media",
"unableToPlayBooksOnWeb": "Books are not supported on web for now"
} }

View file

@ -1,6 +1,10 @@
import 'dart:math' as math; import 'dart:math' as math;
import 'package:flutter/material.dart';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:fladder/models/items/chapters_model.dart'; import 'package:fladder/models/items/chapters_model.dart';
import 'package:fladder/models/items/intro_skip_model.dart'; import 'package:fladder/models/items/intro_skip_model.dart';
import 'package:fladder/providers/video_player_provider.dart'; import 'package:fladder/providers/video_player_provider.dart';
@ -10,8 +14,6 @@ import 'package:fladder/util/string_extensions.dart';
import 'package:fladder/widgets/gapped_container_shape.dart'; import 'package:fladder/widgets/gapped_container_shape.dart';
import 'package:fladder/widgets/shared/fladder_slider.dart'; import 'package:fladder/widgets/shared/fladder_slider.dart';
import 'package:fladder/widgets/shared/trickplay_image.dart'; import 'package:fladder/widgets/shared/trickplay_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
class ChapterProgressSlider extends ConsumerStatefulWidget { class ChapterProgressSlider extends ConsumerStatefulWidget {
final Function(bool value) wasPlayingChanged; final Function(bool value) wasPlayingChanged;
@ -171,7 +173,8 @@ class _ChapterProgressSliderState extends ConsumerState<ChapterProgressSlider> {
Positioned( Positioned(
left: 0, left: 0,
child: SizedBox( child: SizedBox(
width: (constraints.maxWidth / (widget.duration.inMilliseconds / widget.buffer.inMilliseconds)), width: (constraints.maxWidth / (widget.duration.inMilliseconds / widget.buffer.inMilliseconds))
.clamp(1, constraints.maxWidth),
height: sliderHeight, height: sliderHeight,
child: GappedContainerShape( child: GappedContainerShape(
activeColor: Theme.of(context).colorScheme.primary.withOpacity(0.5), activeColor: Theme.of(context).colorScheme.primary.withOpacity(0.5),
@ -223,7 +226,8 @@ class _ChapterProgressSliderState extends ConsumerState<ChapterProgressSlider> {
if (!widget.buffering) ...[ if (!widget.buffering) ...[
chapterCard(context, position, isVisible), chapterCard(context, position, isVisible),
Positioned( Positioned(
left: (constraints.maxWidth / (widget.duration.inMilliseconds / position.inMilliseconds)), left: (constraints.maxWidth / (widget.duration.inMilliseconds / position.inMilliseconds))
.clamp(1, constraints.maxWidth),
child: Transform.translate( child: Transform.translate(
offset: Offset(-(constraints.maxHeight / 2), 0), offset: Offset(-(constraints.maxHeight / 2), 0),
child: IgnorePointer( child: IgnorePointer(

View file

@ -1,4 +1,10 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:window_manager/window_manager.dart';
import 'package:fladder/models/book_model.dart'; import 'package:fladder/models/book_model.dart';
import 'package:fladder/models/item_base_model.dart'; import 'package:fladder/models/item_base_model.dart';
import 'package:fladder/models/items/photos_model.dart'; import 'package:fladder/models/items/photos_model.dart';
@ -18,11 +24,8 @@ import 'package:fladder/screens/shared/fladder_snackbar.dart';
import 'package:fladder/screens/video_player/video_player.dart'; import 'package:fladder/screens/video_player/video_player.dart';
import 'package:fladder/util/adaptive_layout.dart'; import 'package:fladder/util/adaptive_layout.dart';
import 'package:fladder/util/list_extensions.dart'; import 'package:fladder/util/list_extensions.dart';
import 'package:fladder/util/localization_helper.dart';
import 'package:fladder/util/refresh_state.dart'; import 'package:fladder/util/refresh_state.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:window_manager/window_manager.dart';
Future<void> _showLoadingIndicator(BuildContext context) async { Future<void> _showLoadingIndicator(BuildContext context) async {
return showDialog( return showDialog(
@ -70,7 +73,7 @@ Future<void> _playVideo(
if (current == null) { if (current == null) {
if (context.mounted) { if (context.mounted) {
Navigator.of(context, rootNavigator: true).pop(); Navigator.of(context, rootNavigator: true).pop();
fladderSnackbar(context, title: "No video found to play"); fladderSnackbar(context, title: context.localized.unableToPlayMedia);
} }
return; return;
} }
@ -83,7 +86,7 @@ Future<void> _playVideo(
if (!loadedCorrectly) { if (!loadedCorrectly) {
if (context.mounted) { if (context.mounted) {
Navigator.of(context, rootNavigator: true).pop(); Navigator.of(context, rootNavigator: true).pop();
fladderSnackbar(context, title: "An error occurred loading media"); fladderSnackbar(context, title: context.localized.errorOpeningMedia);
} }
return; return;
} }
@ -121,11 +124,10 @@ extension BookBaseModelExtension on BookModel? {
BuildContext? parentContext, BuildContext? parentContext,
}) async { }) async {
if (kIsWeb) { if (kIsWeb) {
fladderSnackbar(context, title: "Books are not supported on web for now."); fladderSnackbar(context, title: context.localized.unableToPlayBooksOnWeb);
return; return;
} }
if (this == null) { if (this == null) {
fladderSnackbar(context, title: "Not a selected book");
return; return;
} }
var newProvider = provider; var newProvider = provider;
@ -239,10 +241,6 @@ extension ItemBaseModelExtensions on ItemBaseModel? {
await ref.read(playbackModelHelper).createOfflinePlaybackModel(itemModel, syncedItem); await ref.read(playbackModelHelper).createOfflinePlaybackModel(itemModel, syncedItem);
} }
if (model == null) {
return;
}
await _playVideo(context, startPosition: startPosition, current: model, ref: ref); await _playVideo(context, startPosition: startPosition, current: model, ref: ref);
} }
} }