mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-22 04:34:44 +00:00
track playing state: only dispatch playing on first start
Per review: playing event should only fire on first start, not on every resume from pause. Add _playing field, reset on load().
This commit is contained in:
@@ -76,9 +76,21 @@
|
|||||||
audio.pause();
|
audio.pause();
|
||||||
testing.expectEqual('play,playing,pause', events.join(','));
|
testing.expectEqual('play,playing,pause', events.join(','));
|
||||||
|
|
||||||
// Load: fires emptied
|
// Third play: resume from pause, fires play only (not playing)
|
||||||
|
audio.play();
|
||||||
|
testing.expectEqual('play,playing,pause,play', events.join(','));
|
||||||
|
|
||||||
|
// Pause again
|
||||||
|
audio.pause();
|
||||||
|
testing.expectEqual('play,playing,pause,play,pause', events.join(','));
|
||||||
|
|
||||||
|
// Load: resets state, fires emptied
|
||||||
audio.load();
|
audio.load();
|
||||||
testing.expectEqual('play,playing,pause,emptied', events.join(','));
|
testing.expectEqual('play,playing,pause,play,pause,emptied', events.join(','));
|
||||||
|
|
||||||
|
// Play after load: fires play + playing again (fresh start)
|
||||||
|
audio.play();
|
||||||
|
testing.expectEqual('play,playing,pause,play,pause,emptied,play,playing', events.join(','));
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ _playback_rate: f64 = 1.0,
|
|||||||
_ready_state: ReadyState = .HAVE_NOTHING,
|
_ready_state: ReadyState = .HAVE_NOTHING,
|
||||||
_network_state: NetworkState = .NETWORK_EMPTY,
|
_network_state: NetworkState = .NETWORK_EMPTY,
|
||||||
_error: ?*MediaError = null,
|
_error: ?*MediaError = null,
|
||||||
|
_playing: bool = false,
|
||||||
|
|
||||||
pub fn asElement(self: *Media) *Element {
|
pub fn asElement(self: *Media) *Element {
|
||||||
return self._proto._proto;
|
return self._proto._proto;
|
||||||
@@ -144,7 +145,10 @@ pub fn play(self: *Media, page: *Page) !void {
|
|||||||
self._network_state = .NETWORK_IDLE;
|
self._network_state = .NETWORK_IDLE;
|
||||||
if (was_paused) {
|
if (was_paused) {
|
||||||
try self.dispatchEvent("play", page);
|
try self.dispatchEvent("play", page);
|
||||||
try self.dispatchEvent("playing", page);
|
if (!self._playing) {
|
||||||
|
self._playing = true;
|
||||||
|
try self.dispatchEvent("playing", page);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -157,6 +161,7 @@ pub fn pause(self: *Media, page: *Page) !void {
|
|||||||
|
|
||||||
pub fn load(self: *Media, page: *Page) !void {
|
pub fn load(self: *Media, page: *Page) !void {
|
||||||
self._paused = true;
|
self._paused = true;
|
||||||
|
self._playing = false;
|
||||||
self._current_time = 0;
|
self._current_time = 0;
|
||||||
self._ready_state = .HAVE_NOTHING;
|
self._ready_state = .HAVE_NOTHING;
|
||||||
self._network_state = .NETWORK_LOADING;
|
self._network_state = .NETWORK_LOADING;
|
||||||
|
|||||||
Reference in New Issue
Block a user