From 769c8f9f2fae910eff05ef33622c08c0db0383de Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Wed, 24 Nov 2021 14:09:32 +0900 Subject: [PATCH] fixed playing videos in viewer mode --- lib/widgets/viewer/entry_viewer_page.dart | 5 ++++- lib/widgets/viewer/video/conductor.dart | 5 ++++- lib/widgets/viewer/video/controller.dart | 27 ++++++++++++++--------- lib/widgets/viewer/video/fijkplayer.dart | 8 ++++++- 4 files changed, 31 insertions(+), 14 deletions(-) diff --git a/lib/widgets/viewer/entry_viewer_page.dart b/lib/widgets/viewer/entry_viewer_page.dart index 523cfec0b..674f55963 100644 --- a/lib/widgets/viewer/entry_viewer_page.dart +++ b/lib/widgets/viewer/entry_viewer_page.dart @@ -1,3 +1,4 @@ +import 'package:aves/app_mode.dart'; import 'package:aves/model/entry.dart'; import 'package:aves/model/source/collection_lens.dart'; import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; @@ -74,7 +75,9 @@ class VideoConductorProvider extends StatelessWidget { @override Widget build(BuildContext context) { return Provider( - create: (context) => VideoConductor(), + create: (context) => VideoConductor( + persistPlayback: context.read>().value == AppMode.main, + ), dispose: (context, value) => value.dispose(), child: child, ); diff --git a/lib/widgets/viewer/video/conductor.dart b/lib/widgets/viewer/video/conductor.dart index 0598fc97e..e0882e562 100644 --- a/lib/widgets/viewer/video/conductor.dart +++ b/lib/widgets/viewer/video/conductor.dart @@ -5,9 +5,12 @@ import 'package:collection/collection.dart'; class VideoConductor { final List _controllers = []; + final bool persistPlayback; static const maxControllerCount = 3; + VideoConductor({required this.persistPlayback}); + Future dispose() async { await Future.forEach(_controllers, (controller) => controller.dispose()); _controllers.clear(); @@ -18,7 +21,7 @@ class VideoConductor { if (controller != null) { _controllers.remove(controller); } else { - controller = IjkPlayerAvesVideoController(entry); + controller = IjkPlayerAvesVideoController(entry, persistPlayback: persistPlayback); } _controllers.insert(0, controller); while (_controllers.length > maxControllerCount) { diff --git a/lib/widgets/viewer/video/controller.dart b/lib/widgets/viewer/video/controller.dart index f3bccd193..21e1c69b7 100644 --- a/lib/widgets/viewer/video/controller.dart +++ b/lib/widgets/viewer/video/controller.dart @@ -11,10 +11,11 @@ import 'package:flutter/material.dart'; abstract class AvesVideoController { final AvesEntry _entry; + final bool persistPlayback; AvesEntry get entry => _entry; - AvesVideoController(AvesEntry entry) : _entry = entry; + AvesVideoController(AvesEntry entry, {required this.persistPlayback}) : _entry = entry; static const resumeTimeSaveMinProgress = .05; static const resumeTimeSaveMaxProgress = .95; @@ -29,16 +30,18 @@ abstract class AvesVideoController { final contentId = entry.contentId; if (contentId == null || !isReady || duration < resumeTimeSaveMinDuration.inMilliseconds) return; - final _progress = progress; - if (resumeTimeSaveMinProgress < _progress && _progress < resumeTimeSaveMaxProgress) { - await metadataDb.addVideoPlayback({ - VideoPlaybackRow( - contentId: contentId, - resumeTimeMillis: currentPosition, - ) - }); - } else { - await metadataDb.removeVideoPlayback({contentId}); + if (persistPlayback) { + final _progress = progress; + if (resumeTimeSaveMinProgress < _progress && _progress < resumeTimeSaveMaxProgress) { + await metadataDb.addVideoPlayback({ + VideoPlaybackRow( + contentId: contentId, + resumeTimeMillis: currentPosition, + ) + }); + } else { + await metadataDb.removeVideoPlayback({contentId}); + } } } @@ -46,6 +49,8 @@ abstract class AvesVideoController { final contentId = entry.contentId; if (contentId == null) return null; + if (!persistPlayback) return null; + final playback = await metadataDb.loadVideoPlayback(contentId); final resumeTime = playback?.resumeTimeMillis ?? 0; if (resumeTime == 0) return null; diff --git a/lib/widgets/viewer/video/fijkplayer.dart b/lib/widgets/viewer/video/fijkplayer.dart index 6db787e10..1cec118b9 100644 --- a/lib/widgets/viewer/video/fijkplayer.dart +++ b/lib/widgets/viewer/video/fijkplayer.dart @@ -55,7 +55,13 @@ class IjkPlayerAvesVideoController extends AvesVideoController { static const gifLikeBitRateThreshold = 2 << 18; // 512kB/s (4Mb/s) static const captureFrameEnabled = true; - IjkPlayerAvesVideoController(AvesEntry entry) : super(entry) { + IjkPlayerAvesVideoController( + AvesEntry entry, { + required bool persistPlayback, + }) : super( + entry, + persistPlayback: persistPlayback, + ) { _instance = FijkPlayer(); _valueStream.map((value) => value.videoRenderStart).firstWhere((v) => v, orElse: () => false).then( (started) => canCaptureFrameNotifier.value = captureFrameEnabled && started,