Skip to content

Commit 354b762

Browse files
committed
fix: Correctly encode volume stream from mpv
The stream returns values from 0 to 100, but in the app we work with values from 0 to 1. In the volume stream, we map each result and divide it by 100, just like it is done in the volume getter.
1 parent f98ed1b commit 354b762

File tree

4 files changed

+30
-3
lines changed

4 files changed

+30
-3
lines changed

lib/models/device.dart

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,20 @@ class Device {
120120
///
121121
/// This volume is restored every time the app opens and is applied to the
122122
/// respective video player.
123-
double volume = defaultVolume;
123+
double _volume = defaultVolume;
124124
static double get defaultVolume =>
125125
SettingsProvider.instance.kInitialDevicesVolume.value;
126+
double get volume => _volume;
127+
set volume(double value) {
128+
if (value < 0.0 || value > 1.0) {
129+
throw ArgumentError.value(
130+
value,
131+
'volume',
132+
'Volume must be between 0.0 and 1.0',
133+
);
134+
}
135+
_volume = value.clamp(0.0, 1.0);
136+
}
126137

127138
/// Creates a device.
128139
Device({

lib/screens/layouts/desktop/stream_data.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ class _StreamDataState extends State<StreamData> {
212212
),
213213
Text(
214214
loc.volume(
215-
(widget.video.player.volume * 100).toInt().toString(),
215+
'${(widget.video.player.volume * 100).toInt()}',
216216
),
217217
style: theme.textTheme.headlineSmall,
218218
),

lib/utils/extensions.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,20 @@ extension FileExtension on File {
159159
}
160160

161161
extension IterableTExtension<T> on Iterable<T> {
162+
/// Find the most duplicated element in the list.
163+
///
164+
/// If there are multiple elements with the same count, the first one will be
165+
/// returned. If the list is empty, null will be returned.
166+
///
167+
/// Example:
168+
/// ```dart
169+
/// final list = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5];
170+
/// final mostDuplicated = list.findMaxDuplicatedElementInList();
171+
/// print(mostDuplicated); // 1
172+
/// ```
173+
///
174+
/// This is useful when you have a list of elements and you want to know which
175+
/// element appears the most.
162176
T findMaxDuplicatedElementInList() => fold<Map<T, int>>(
163177
{},
164178
(map, element) =>

packages/unity_video_player/unity_video_player_main/lib/unity_video_player_main.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,9 @@ class UnityVideoPlayerMediaKit extends UnityVideoPlayer {
349349
double get volume => mkPlayer.state.volume / 100;
350350

351351
@override
352-
Stream<double> get volumeStream => mkPlayer.stream.volume;
352+
Stream<double> get volumeStream => mkPlayer.stream.volume.map((volume) {
353+
return volume / 100;
354+
});
353355

354356
@override
355357
Future<void> setSpeed(double speed) => mkPlayer.setRate(speed);

0 commit comments

Comments
 (0)