31 lines
805 B
Go
31 lines
805 B
Go
package app
|
|
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
type playbackActivityWriter struct {
|
|
http.ResponseWriter
|
|
app *UIApp
|
|
run *playbackRunContext
|
|
nextTouch time.Time
|
|
}
|
|
|
|
func (writer *playbackActivityWriter) Unwrap() http.ResponseWriter {
|
|
return writer.ResponseWriter
|
|
}
|
|
|
|
func (writer *playbackActivityWriter) Write(data []byte) (int, error) {
|
|
count, err := writer.ResponseWriter.Write(data)
|
|
if count > 0 && err == nil && time.Now().After(writer.nextTouch) {
|
|
writer.app.playbackMu.Lock()
|
|
if session := writer.app.playbacks[writer.run.id]; session == writer.run.session && session.run == writer.run.run && writer.run.ctx.Err() == nil {
|
|
writer.app.touchPlaybackLocked(session)
|
|
}
|
|
writer.app.playbackMu.Unlock()
|
|
writer.nextTouch = time.Now().Add(20 * time.Second)
|
|
}
|
|
return count, err
|
|
}
|