Progress Status as stream

This commit is contained in:
gianlucaparadise 2022-01-13 19:36:50 +01:00
parent b5a22b9599
commit 030adf3920
2 changed files with 19 additions and 0 deletions

View file

@ -16,14 +16,23 @@ typedef AdBreakClipProgressListener = void Function(
); );
typedef MediaStatusListener = void Function(MediaStatus mediaStatus); typedef MediaStatusListener = void Function(MediaStatus mediaStatus);
class ProgressInfo {
int progressMs;
int durationMs;
ProgressInfo(this.progressMs, this.durationMs);
}
/// Class for controlling a media player application running on a receiver. /// Class for controlling a media player application running on a receiver.
class RemoteMediaClient { class RemoteMediaClient {
RemoteMediaClient(this._hostApi) { RemoteMediaClient(this._hostApi) {
this.mediaStatusStream = this._mediaStatusStreamController.stream; this.mediaStatusStream = this._mediaStatusStreamController.stream;
this.progressStream = this._progressStreamController.stream;
} }
void dispose() { void dispose() {
this._mediaStatusStreamController.close(); this._mediaStatusStreamController.close();
this._progressStreamController.close();
} }
final CastHostApi _hostApi; final CastHostApi _hostApi;
@ -35,6 +44,9 @@ class RemoteMediaClient {
/// Callback to get updates on the progress of the currently playing media. /// Callback to get updates on the progress of the currently playing media.
ProgressListener? onProgressUpdated; ProgressListener? onProgressUpdated;
final _progressStreamController = StreamController<ProgressInfo>.broadcast();
late Stream<ProgressInfo> progressStream;
/// Called when updated media metadata is received. /// Called when updated media metadata is received.
VoidCallback? onMetadataUpdated; VoidCallback? onMetadataUpdated;
@ -108,4 +120,10 @@ class RemoteMediaClient {
void dispatchMediaStatusUpdate(MediaStatus mediaStatus) { void dispatchMediaStatusUpdate(MediaStatus mediaStatus) {
this._mediaStatusStreamController.add(mediaStatus); this._mediaStatusStreamController.add(mediaStatus);
} }
/// Internal method that shouldn't be visible
@internal
void dispatchProgressUpdate(int progressMs, int durationMs) {
this._progressStreamController.add(ProgressInfo(progressMs, durationMs));
}
} }

View file

@ -150,6 +150,7 @@ class _CastFlutterApiImplementor extends CastFlutterApi {
@override @override
void onProgressUpdated(int progressMs, int durationMs) { void onProgressUpdated(int progressMs, int durationMs) {
remoteMediaClient.onProgressUpdated?.call(progressMs, durationMs); remoteMediaClient.onProgressUpdated?.call(progressMs, durationMs);
remoteMediaClient.dispatchProgressUpdate(progressMs, durationMs);
} }
@override @override