From 777ec95cfd34f3f1338d57e1e3c5da50919c144a Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Sat, 26 Jul 2025 22:25:01 -0700 Subject: [PATCH] fix bugs in done signalling --- backend/waveformimage.go | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/backend/waveformimage.go b/backend/waveformimage.go index 470d381..e4dd45b 100644 --- a/backend/waveformimage.go +++ b/backend/waveformimage.go @@ -37,6 +37,7 @@ type WaveformImageJob struct { img *WaveformImage err error progress int // first invalid pixel in X direction + done bool cancel func() } @@ -49,7 +50,7 @@ func (w *WaveformImageJob) Cancel() { func (w *WaveformImageJob) Done() bool { w.lock.Lock() defer w.lock.Unlock() - return w.err != nil || w.progress >= w.img.Bounds().Dx() + return w.err != nil || w.done } func (w *WaveformImageJob) Err() error { @@ -172,9 +173,12 @@ type waveformData struct { RMS [1024]byte progress int // first invalid index for Peak/RMS data + done bool } func generateWaveformImage(ctx context.Context, data *waveformData, job *WaveformImageJob) { + defer func() { job.done = true }() + centerY := job.img.Rect.Dy() / 2 // 16 top := centerY - 1 bottom := centerY @@ -184,11 +188,13 @@ func generateWaveformImage(ctx context.Context, data *waveformData, job *Wavefor for x := 0; x < 1024; x++ { for data.progress <= x { - time.Sleep(10 * time.Millisecond) + if data.done { + return + } if ctx.Err() != nil { return // expired } - continue + time.Sleep(10 * time.Millisecond) } rms := float64(data.RMS[x]) / 255.0 @@ -214,14 +220,12 @@ func generateWaveformImage(ctx context.Context, data *waveformData, job *Wavefor } job.progress = x + 1 } - log.Println("done generating image") } // assumes mono, 16 bit func analyzeWavFile(ctx context.Context, transcodeFile string, data *waveformData, millisecs int64, fileDone func() bool) error { - if fileDone() { - log.Println("Analyzing completely written file!!") - } + defer func() { data.done = true }() + f, err := os.Open(transcodeFile) if err != nil { log.Println("error opening transcoded file") @@ -290,7 +294,6 @@ func analyzeWavFile(ctx context.Context, transcodeFile string, data *waveformDat n, err := decoder.PCMBuffer(buf) if n == 0 || err == io.EOF { if fileDone() { - data.progress = 1024 // set progress to done break } if err == io.EOF && !fileDone() { @@ -331,8 +334,6 @@ func analyzeWavFile(ctx context.Context, transcodeFile string, data *waveformDat data.progress = curChunk + 1 } - log.Println("final chunk is", curChunk) - return nil }