source-aware playback statuses.

This commit is contained in:
Dmitry Sergeev
2026-09-01 21:22:30 +03:00
parent d3ea99233d
commit cd0298b136
10 changed files with 151 additions and 41 deletions
+14 -8
View File
@@ -59,8 +59,13 @@ func NewSyncWorker(
}, nil
}
func (w *SyncWorker) emit(ctx context.Context, status Status) {
func (w *SyncWorker) emit(
ctx context.Context,
pair SyncPairConfig,
status Status,
) {
status.Generation = generationFromContext(ctx)
status.Pair = pair
if w.observer != nil {
w.observer(status)
}
@@ -80,6 +85,7 @@ func (w *SyncWorker) Run(
if !videoConfig.Active || !audioConfig.Active {
return ErrSyncFeedsInactive
}
pair := SyncPairConfig{Video: videoConfig, Audio: audioConfig}
attemptNumber := 0
var latestRetry retryEvent
@@ -91,7 +97,7 @@ func (w *SyncWorker) Run(
if attemptNumber > 1 {
state = StateReconnecting
}
w.emit(ctx, Status{
w.emit(ctx, pair, Status{
Unit: UnitSync,
State: state,
Attempt: attemptNumber,
@@ -100,7 +106,7 @@ func (w *SyncWorker) Run(
attemptAudioSink := &stabilityAudioSink{
sink: w.audioSink,
onStable: func() {
w.emit(ctx, Status{
w.emit(ctx, pair, Status{
Unit: UnitSync,
State: StatePlaying,
Attempt: attemptNumber,
@@ -134,7 +140,7 @@ func (w *SyncWorker) Run(
if !event.WillRetry {
return
}
w.emit(ctx, Status{
w.emit(ctx, pair, Status{
Unit: UnitSync,
State: StateReconnecting,
Attempt: attemptNumber + 1,
@@ -152,18 +158,18 @@ func (w *SyncWorker) Run(
observeRetry,
)
if ctx.Err() != nil {
w.emit(ctx, Status{
w.emit(ctx, pair, Status{
Unit: UnitSync,
State: StateStopping,
})
w.emit(ctx, Status{
w.emit(ctx, pair, Status{
Unit: UnitSync,
State: StateIdle,
})
return ctx.Err()
}
if err != nil {
w.emit(ctx, Status{
w.emit(ctx, pair, Status{
Unit: UnitSync,
State: StateFailed,
Attempt: attemptNumber,
@@ -172,7 +178,7 @@ func (w *SyncWorker) Run(
})
return err
}
w.emit(ctx, Status{
w.emit(ctx, pair, Status{
Unit: UnitSync,
State: StateIdle,
})