diff --git a/lib/models/playback/direct_playback_model.dart b/lib/models/playback/direct_playback_model.dart index a57b278..90fd00e 100644 --- a/lib/models/playback/direct_playback_model.dart +++ b/lib/models/playback/direct_playback_model.dart @@ -110,9 +110,7 @@ class DirectPlaybackModel implements PlaybackModel { mediaSourceId: item.id, playSessionId: playbackInfo.playSessionId, positionTicks: position.toRuntimeTicks, - failed: false, ), - totalDuration: totalDuration, ); return null; diff --git a/lib/models/playback/transcode_playback_model.dart b/lib/models/playback/transcode_playback_model.dart index 38a7c30..202a1f8 100644 --- a/lib/models/playback/transcode_playback_model.dart +++ b/lib/models/playback/transcode_playback_model.dart @@ -111,9 +111,7 @@ class TranscodePlaybackModel implements PlaybackModel { mediaSourceId: item.id, playSessionId: playbackInfo.playSessionId, positionTicks: position.toRuntimeTicks, - failed: false, ), - totalDuration: totalDuration, ); return null; diff --git a/lib/providers/service_provider.dart b/lib/providers/service_provider.dart index 621209c..681a00a 100644 --- a/lib/providers/service_provider.dart +++ b/lib/providers/service_provider.dart @@ -17,7 +17,6 @@ import 'package:fladder/models/items/trick_play_model.dart'; import 'package:fladder/providers/auth_provider.dart'; import 'package:fladder/providers/image_provider.dart'; import 'package:fladder/providers/user_provider.dart'; -import 'package:fladder/util/duration_extensions.dart'; import 'package:fladder/util/jellyfin_extension.dart'; class ServerQueryResult { @@ -492,25 +491,8 @@ class JellyService { Future sessionsPlayingStoppedPost({ required PlaybackStopInfo? body, - Duration? totalDuration, - }) async { - final position = body?.positionTicks; - final totalTime = totalDuration?.toRuntimeTicks; - final maxTime = ref.read(userProvider.select((value) => value?.serverConfiguration?.maxResumePct ?? 90)); - - final response = await api.sessionsPlayingStoppedPost( - body: body?.copyWith( - failed: false, - ), - ); - - //This is a temporary fix - if (totalTime != null && position != null && position > (totalTime * (maxTime / 100))) { - await usersUserIdPlayedItemsItemIdPost(itemId: body?.itemId, datePlayed: DateTime.now()); - } - - return response; - } + }) => + api.sessionsPlayingStoppedPost(body: body); Future sessionsPlayingProgressPost({required PlaybackProgressInfo? body}) async => api.sessionsPlayingProgressPost(body: body); diff --git a/lib/providers/video_player_provider.dart b/lib/providers/video_player_provider.dart index b61ed52..f5fd9c1 100644 --- a/lib/providers/video_player_provider.dart +++ b/lib/providers/video_player_provider.dart @@ -62,7 +62,7 @@ class VideoPlayerNotifier extends StateNotifier { final lastPosition = ref.read(mediaPlaybackProvider.select((value) => value.lastPosition)); final diff = (position.inMilliseconds - lastPosition.inMilliseconds).abs(); - if (diff > const Duration(seconds: 1, milliseconds: 500).inMilliseconds) { + if (diff > const Duration(seconds: 10).inMilliseconds) { mediaState.update((value) => value.copyWith( position: event, playing: playbackState.playing, diff --git a/lib/wrappers/media_control_wrapper.dart b/lib/wrappers/media_control_wrapper.dart index f266fa0..7b5cfa6 100644 --- a/lib/wrappers/media_control_wrapper.dart +++ b/lib/wrappers/media_control_wrapper.dart @@ -204,6 +204,8 @@ class MediaControlsWrapper extends BaseAudioHandler { processingState: AudioProcessingState.ready, )); + ref.read(playBackModel)?.playbackStarted(currentPosition ?? Duration.zero, ref); + return super.play(); } @@ -232,16 +234,22 @@ class MediaControlsWrapper extends BaseAudioHandler { @override Future stop() async { WakelockPlus.disable(); - final position = _player?.lastState.position; - final totalDuration = _player?.lastState.duration; super.stop(); _player?.stop(); + final position = _player?.lastState.position; + final totalDuration = _player?.lastState.duration; + + //Small delay so we don't post right after playback/progress update + await Future.delayed(const Duration(seconds: 1)); + ref.read(playBackModel)?.playbackStopped(position ?? Duration.zero, totalDuration, ref); ref.read(mediaPlaybackProvider.notifier).update((state) => state.copyWith(position: Duration.zero)); + smtc?.setPlaybackStatus(PlaybackStatus.stopped); smtc?.clearMetadata(); smtc?.disableSmtc(); + playbackState.add( playbackState.value.copyWith( playing: false,