diff --git a/.github/workflows/flutter-ci.yaml b/.github/workflows/flutter-ci.yaml index e033e90..9f9a1fa 100644 --- a/.github/workflows/flutter-ci.yaml +++ b/.github/workflows/flutter-ci.yaml @@ -104,7 +104,7 @@ jobs: APP_NAME=$(grep '^name:' pubspec.yaml | sed 's/name: //') APP_VERSION=$(grep '^version:' pubspec.yaml | sed 's/version: //') - mv build/app/outputs/flutter-apk/{app-release,$APP_NAME-$APP_VERSION-app-universal}.aab + mv build/app/outputs/bundle/release/{app-release,$APP_NAME-$APP_VERSION-app-universal}.aab - name: Upload Android APK Artifact uses: actions/upload-artifact@v4 diff --git a/lib/features/player/core/audiobook_player.dart b/lib/features/player/core/audiobook_player.dart index da6e0c6..f464b9f 100644 --- a/lib/features/player/core/audiobook_player.dart +++ b/lib/features/player/core/audiobook_player.dart @@ -73,6 +73,8 @@ class AbsAudioHandler extends BaseAudioHandler with QueueHandler, SeekHandler { required String token, Duration? initialPosition, List? downloadedUris, + required double volume, + required double speed, }) async { final appSettings = loadOrCreateAppSettings(); // if (book == null) { @@ -118,7 +120,7 @@ class AbsAudioHandler extends BaseAudioHandler with QueueHandler, SeekHandler { '$baseUrl/api/items/${book.libraryItemId}/cover?token=$token', ), ); - addQueueItem(item); + mediaItem.add(item); await _player .setAudioSources( audioSources, @@ -130,8 +132,12 @@ class AbsAudioHandler extends BaseAudioHandler with QueueHandler, SeekHandler { _logger.shout('Error in setting audio source: $error'); return null; }); + await player.seek(initialPositionInTrack, index: initialIndex); // _player.seek(initialPositionInTrack, index: initialIndex); + setVolume(volume); + setSpeed(speed); await play(); + // 恢复上次播放位置(如果有) // if (initialPosition != null) { // await seekInBook(initialPosition); diff --git a/lib/features/player/providers/audiobook_player.g.dart b/lib/features/player/providers/audiobook_player.g.dart index 5997576..f6b25cc 100644 --- a/lib/features/player/providers/audiobook_player.g.dart +++ b/lib/features/player/providers/audiobook_player.g.dart @@ -6,7 +6,7 @@ part of 'audiobook_player.dart'; // RiverpodGenerator // ************************************************************************** -String _$audioHandlerInitHash() => r'13b9d56c8dfde3a40736432ea069c899ef35ae75'; +String _$audioHandlerInitHash() => r'f4907b614d5698c1c8fe8e999edd5fde46bc29f2'; /// See also [audioHandlerInit]. @ProviderFor(audioHandlerInit) diff --git a/lib/features/player/providers/currently_playing_provider.dart b/lib/features/player/providers/currently_playing_provider.dart index 3cebfbe..258a54f 100644 --- a/lib/features/player/providers/currently_playing_provider.dart +++ b/lib/features/player/providers/currently_playing_provider.dart @@ -43,29 +43,21 @@ class CurrentBook extends _$CurrentBook { var configurePlayerForEveryBook = appPlayerSettings.configurePlayerForEveryBook; - await Future.wait([ - audioService.setSourceAudiobook( - state!, - baseUrl: api.baseUrl, - token: api.token!, - initialPosition: currentTime, - downloadedUris: downloadedUris, - ), - // set the volume - audioService.setVolume( - configurePlayerForEveryBook - ? bookPlayerSettings.preferredDefaultVolume ?? - appPlayerSettings.preferredDefaultVolume - : appPlayerSettings.preferredDefaultVolume, - ), - // set the speed - audioService.setSpeed( - configurePlayerForEveryBook - ? bookPlayerSettings.preferredDefaultSpeed ?? - appPlayerSettings.preferredDefaultSpeed - : appPlayerSettings.preferredDefaultSpeed, - ), - ]); + audioService.setSourceAudiobook( + state!, + baseUrl: api.baseUrl, + token: api.token!, + initialPosition: currentTime, + downloadedUris: downloadedUris, + volume: configurePlayerForEveryBook + ? bookPlayerSettings.preferredDefaultVolume ?? + appPlayerSettings.preferredDefaultVolume + : appPlayerSettings.preferredDefaultVolume, + speed: configurePlayerForEveryBook + ? bookPlayerSettings.preferredDefaultSpeed ?? + appPlayerSettings.preferredDefaultSpeed + : appPlayerSettings.preferredDefaultSpeed, + ); } } diff --git a/lib/features/player/providers/currently_playing_provider.g.dart b/lib/features/player/providers/currently_playing_provider.g.dart index 67ad4a8..c592986 100644 --- a/lib/features/player/providers/currently_playing_provider.g.dart +++ b/lib/features/player/providers/currently_playing_provider.g.dart @@ -24,7 +24,7 @@ final currentChaptersProvider = @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element typedef CurrentChaptersRef = AutoDisposeProviderRef>; -String _$currentBookHash() => r'8dd534821b2b02a0259c6e6bde58012b880225c5'; +String _$currentBookHash() => r'5143d08375c2c58918e82f8d368998bb38d7b790'; /// See also [CurrentBook]. @ProviderFor(CurrentBook) diff --git a/lib/shared/widgets/shelves/book_shelf.dart b/lib/shared/widgets/shelves/book_shelf.dart index 1dfe8c7..29f0740 100644 --- a/lib/shared/widgets/shelves/book_shelf.dart +++ b/lib/shared/widgets/shelves/book_shelf.dart @@ -296,7 +296,9 @@ class _BookOnShelfPlayButton extends HookConsumerWidget { await ref.watch(libraryItemProvider(libraryItemId).future); ref.read(currentBookProvider.notifier).update( - book.media.asBookExpanded, userProgress?.currentTime); + book.media.asBookExpanded, + userProgress?.currentTime, + ); }, icon: Hero( tag: HeroTagPrefixes.libraryItemPlayButton + libraryItemId,