This commit is contained in:
rang 2025-12-01 15:34:12 +08:00
parent 1ca8e4889a
commit aad510ea45
31 changed files with 777 additions and 239 deletions

View file

@ -14,7 +14,7 @@ final _logger = Logger('PlaybackReporter');
/// and also report when the player is paused/stopped/finished/playing
class PlaybackReporter {
/// The player to watch
final AudiobookPlayer player;
final AbsAudioHandler player;
/// the api to report to
final AudiobookshelfApi authenticatedApi;
@ -75,7 +75,7 @@ class PlaybackReporter {
this.markCompleteWhenTimeLeft = const Duration(seconds: 5),
}) : _reportingInterval = reportingInterval {
// initial conditions
if (player.playing) {
if (player.player.playing) {
_stopwatch.start();
_setReportTimerIfNotAlready();
_logger.fine('starting stopwatch');

View file

@ -1,20 +1,17 @@
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:vaani/api/api_provider.dart';
import 'package:vaani/features/playback_reporting/core/playback_reporter_session.dart'
import 'package:vaani/features/playback_reporting/core/playback_reporter.dart'
as core;
import 'package:vaani/features/player/providers/audiobook_player.dart';
import 'package:vaani/features/settings/app_settings_provider.dart';
import 'package:vaani/globals.dart';
part 'playback_reporter_provider.g.dart';
@riverpod
@Riverpod(keepAlive: true)
class PlaybackReporter extends _$PlaybackReporter {
@override
Future<core.PlaybackReporter?> build() async {
final session = ref.watch(sessionProvider);
if (session == null) {
return null;
}
Future<core.PlaybackReporter> build() async {
final playerSettings = ref.watch(appSettingsProvider).playerSettings;
final player = ref.watch(playerProvider);
final api = ref.watch(authenticatedApiProvider);
@ -25,7 +22,12 @@ class PlaybackReporter extends _$PlaybackReporter {
reportingInterval: playerSettings.playbackReportInterval,
markCompleteWhenTimeLeft: playerSettings.markCompleteWhenTimeLeft,
minimumPositionForReporting: playerSettings.minimumPositionForReporting,
session: session,
deviceName: deviceName,
deviceModel: deviceModel,
deviceSdkVersion: deviceSdkVersion,
deviceClientName: appName,
deviceClientVersion: appVersion,
deviceManufacturer: deviceManufacturer,
);
ref.onDispose(reporter.dispose);
return reporter;

View file

@ -6,12 +6,12 @@ part of 'playback_reporter_provider.dart';
// RiverpodGenerator
// **************************************************************************
String _$playbackReporterHash() => r'f9be5d6e4b07815ec669406cede4b00d2278e3af';
String _$playbackReporterHash() => r'23b9770d279d921a5766fc2dda20f76dd3e181ed';
/// See also [PlaybackReporter].
@ProviderFor(PlaybackReporter)
final playbackReporterProvider = AutoDisposeAsyncNotifierProvider<
PlaybackReporter, core.PlaybackReporter?>.internal(
final playbackReporterProvider =
AsyncNotifierProvider<PlaybackReporter, core.PlaybackReporter>.internal(
PlaybackReporter.new,
name: r'playbackReporterProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
@ -21,6 +21,6 @@ final playbackReporterProvider = AutoDisposeAsyncNotifierProvider<
allTransitiveDependencies: null,
);
typedef _$PlaybackReporter = AutoDisposeAsyncNotifier<core.PlaybackReporter?>;
typedef _$PlaybackReporter = AsyncNotifier<core.PlaybackReporter>;
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package