Fix video playback position reset to 0:00 on full-screen close (#1922)

UniversalVideoGalleryItemNode.maybeStorePlaybackStatus persisted the playback
position from every MediaPlayerStatus delivered by the throttled status
subscription — including the teardown/reset status emitted when the full-screen
player is dismissed (timestamp ~0, with a freshly incremented seekId). That
status fell into the `else` branch and stored a position of 0.0, overwriting the
real saved position on every close. So the stored "resume" point was always 0
and the video always restarted at 0:00.

Persist only a genuine mid-video position; store the 0.0 "restart" sentinel only
when the video is actually near the end; and leave any saved position untouched
for timestamp <= 5s (which also covers the teardown reset that caused the bug).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Bojan Stefanović 2026-06-19 21:22:59 -04:00
parent 6e370e06d1
commit f5886ab4fa

View file

@ -2411,13 +2411,11 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode {
shouldStorePlaybacksState = status.duration >= 20.0
if shouldStorePlaybacksState {
var timestamp: Double?
if status.timestamp > 5.0 && status.timestamp < status.duration - 5.0 {
timestamp = status.timestamp
} else {
timestamp = 0.0
item.storeMediaPlaybackState(message.id, status.timestamp, status.baseRate)
} else if status.timestamp >= status.duration - 5.0 {
item.storeMediaPlaybackState(message.id, 0.0, status.baseRate)
}
item.storeMediaPlaybackState(message.id, timestamp, status.baseRate)
} else {
item.storeMediaPlaybackState(message.id, nil, status.baseRate)
}