diff --git a/common/lib/src/playback.dart b/common/lib/src/playback.dart index 6de8a16..ac81eaa 100644 --- a/common/lib/src/playback.dart +++ b/common/lib/src/playback.dart @@ -45,7 +45,7 @@ abstract class MusicusPlayback { final normalizedPosition = BehaviorSubject.seeded(0.0); /// Initialize the player. - /// + /// /// This will be called after the database was initialized. Future setup(); @@ -93,4 +93,38 @@ abstract class MusicusPlayback { duration.close(); normalizedPosition.close(); } -} \ No newline at end of file + + /// Update [position] and [normalizedPosition]. + /// + /// Requires [duration] to be up to date + void updatePosition(int positionMs) { + position.add(Duration(milliseconds: positionMs)); + _setNormalizedPosition(positionMs / duration.value.inMilliseconds); + } + + /// Update [position], [duration] and [normalizedPosition]. + void updateDuration(int positionMs, int durationMs) { + position.add(Duration(milliseconds: positionMs)); + duration.add(Duration(milliseconds: durationMs)); + _setNormalizedPosition(positionMs / durationMs); + } + + /// Update [normalizedPosition] ensuring its value is between 0.0 and 1.0. + void _setNormalizedPosition(double value) { + if (value <= 0.0) { + normalizedPosition.add(0.0); + } else if (value >= 1.0) { + normalizedPosition.add(1.0); + } else { + normalizedPosition.add(value); + } + } + + /// Update [currentIndex] and [currentTrack]. + /// + /// Requires [playlist] to be up to date. + void updateCurrentTrack(int index) { + currentIndex.add(index); + currentTrack.add(playlist.value[index]); + } +} diff --git a/mobile/lib/playback.dart b/mobile/lib/playback.dart index 51fec66..0b72720 100644 --- a/mobile/lib/playback.dart +++ b/mobile/lib/playback.dart @@ -34,40 +34,6 @@ class Playback extends MusicusPlayback { } } - /// Update [position] and [normalizedPosition]. - /// - /// Requires [duration] to be up to date - void _updatePosition(int positionMs) { - position.add(Duration(milliseconds: positionMs)); - _setNormalizedPosition(positionMs / duration.value.inMilliseconds); - } - - /// Update [position], [duration] and [normalizedPosition]. - void _updateDuration(int positionMs, int durationMs) { - position.add(Duration(milliseconds: positionMs)); - duration.add(Duration(milliseconds: durationMs)); - _setNormalizedPosition(positionMs / durationMs); - } - - /// Update [normalizedPosition] ensuring its value is between 0.0 and 1.0. - void _setNormalizedPosition(double value) { - if (value <= 0.0) { - normalizedPosition.add(0.0); - } else if (value >= 1.0) { - normalizedPosition.add(1.0); - } else { - normalizedPosition.add(value); - } - } - - /// Update [currentIndex] and [currentTrack]. - /// - /// Requires [playlist] to be up to date. - void _updateCurrentTrack(int index) { - currentIndex.add(index); - currentTrack.add(playlist.value[index]); - } - @override Future setup() async { if (_playbackServiceStateSubscription != null) { @@ -93,14 +59,14 @@ class Playback extends MusicusPlayback { if (msg is _StatusMessage) { playing.add(msg.playing); } else if (msg is _PositionMessage) { - _updatePosition(msg.positionMs); + updatePosition(msg.positionMs); } else if (msg is _TrackMessage) { - _updateCurrentTrack(msg.currentTrack); - _updateDuration(msg.positionMs, msg.durationMs); + updateCurrentTrack(msg.currentTrack); + updateDuration(msg.positionMs, msg.durationMs); } else if (msg is _PlaylistMessage) { playlist.add(msg.playlist); - _updateCurrentTrack(msg.currentTrack); - _updateDuration(msg.positionMs, msg.durationMs); + updateCurrentTrack(msg.currentTrack); + updateDuration(msg.positionMs, msg.durationMs); } } });