Skip to content

Commit bb9c3b5

Browse files
committed
Merge branch 'master' of github.com:koel/mobile-app into master
2 parents 922354f + ffdcd75 commit bb9c3b5

File tree

3 files changed

+32
-15
lines changed

3 files changed

+32
-15
lines changed

lib/providers/audio_provider.dart

+24-15
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ import 'package:app/utils/preferences.dart' as preferences;
1010
import 'package:assets_audio_player/assets_audio_player.dart';
1111
import 'package:flutter/cupertino.dart';
1212
import 'package:rxdart/rxdart.dart';
13+
import 'package:mutex/mutex.dart';
1314

1415
class AudioProvider with StreamSubscriber, ChangeNotifier {
1516
SongProvider _songProvider;
1617
InteractionProvider _interactionProvider;
18+
Mutex _mutex;
1719

1820
late AssetsAudioPlayer _player;
1921
AssetsAudioPlayer get player => _player;
@@ -22,7 +24,8 @@ class AudioProvider with StreamSubscriber, ChangeNotifier {
2224
required SongProvider songProvider,
2325
required InteractionProvider interactionProvider,
2426
}) : _songProvider = songProvider,
25-
_interactionProvider = interactionProvider;
27+
_interactionProvider = interactionProvider,
28+
_mutex = Mutex();
2629

2730
Future<void> init() async {
2831
_player = AssetsAudioPlayer.newPlayer();
@@ -72,23 +75,29 @@ class AudioProvider with StreamSubscriber, ChangeNotifier {
7275
}
7376

7477
Future<void> play({Song? song}) async {
75-
if (song == null) {
76-
return await _player.play();
77-
}
78+
await _mutex.acquire();
7879

79-
int index = await indexInQueue(song);
80+
try {
81+
if (song == null) {
82+
return await _player.play();
83+
}
8084

81-
if (index != -1) {
82-
await _player.playlistPlayAtIndex(index);
83-
} else {
84-
await _player.playlistPlayAtIndex(
85-
_player.current.hasValue
86-
? await queueAfterCurrent(song: song)
87-
: await queueToTop(song: song),
88-
);
89-
}
85+
int index = await indexInQueue(song);
9086

91-
await _player.play();
87+
if (index != -1) {
88+
await _player.playlistPlayAtIndex(index);
89+
} else {
90+
await _player.playlistPlayAtIndex(
91+
_player.current.hasValue
92+
? await queueAfterCurrent(song: song)
93+
: await queueToTop(song: song),
94+
);
95+
}
96+
97+
await _player.play();
98+
} finally {
99+
_mutex.release();
100+
}
92101
}
93102

94103
Future<void> stop() async => await _player.stop();

pubspec.lock

+7
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,13 @@ packages:
457457
url: "https://pub.dartlang.org"
458458
source: hosted
459459
version: "5.0.12"
460+
mutex:
461+
dependency: "direct main"
462+
description:
463+
name: mutex
464+
url: "https://pub.dartlang.org"
465+
source: hosted
466+
version: "3.0.0"
460467
nested:
461468
dependency: transitive
462469
description:

pubspec.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ dependencies:
4747
uuid: ^3.0.4
4848
golden_toolkit: ^0.9.0
4949
fake_async: ^1.2.0
50+
mutex: ^3.0.0
5051

5152
dev_dependencies:
5253
flutter_test:

0 commit comments

Comments
 (0)