chore: add Apache License 2.0 and ignore build directory
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
// Package terminal renders captions using terminal control sequences.
|
||||
package terminal
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"tea.chunkbyte.com/kato/captioneer/src/captions"
|
||||
)
|
||||
|
||||
type Sink struct {
|
||||
writer io.Writer
|
||||
previewVisible bool
|
||||
}
|
||||
|
||||
func New(writer io.Writer) *Sink {
|
||||
return &Sink{writer: writer}
|
||||
}
|
||||
|
||||
func (s *Sink) Publish(event captions.Event) error {
|
||||
switch event.Kind {
|
||||
case captions.Provisional:
|
||||
_, err := fmt.Fprintf(s.writer, "\r\033[2K… %s", event.Text)
|
||||
if err == nil {
|
||||
s.previewVisible = true
|
||||
}
|
||||
return err
|
||||
case captions.Final:
|
||||
if err := s.clearPreview(); err != nil {
|
||||
return err
|
||||
}
|
||||
_, err := fmt.Fprintf(s.writer, "[%.2fs-%.2fs] %s\n", event.StartedAt.Seconds(), event.EndedAt.Seconds(), event.Text)
|
||||
return err
|
||||
case captions.Hide:
|
||||
return s.clearPreview()
|
||||
default:
|
||||
return fmt.Errorf("unsupported caption event kind %d", event.Kind)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Sink) Close() error {
|
||||
return s.clearPreview()
|
||||
}
|
||||
|
||||
func (s *Sink) clearPreview() error {
|
||||
if !s.previewVisible {
|
||||
return nil
|
||||
}
|
||||
_, err := fmt.Fprint(s.writer, "\r\033[2K")
|
||||
if err == nil {
|
||||
s.previewVisible = false
|
||||
}
|
||||
return err
|
||||
}
|
||||
Reference in New Issue
Block a user