33 lines
693 B
Go
33 lines
693 B
Go
package main
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"sync/atomic"
|
|
|
|
"gitea.k3s.k0.nu/tools/photocli/internal/photos"
|
|
)
|
|
|
|
func runMain(args []string, stdout, stderr *os.File, bridge photos.Bridge) int {
|
|
return runMainWithSignal(args, stdout, stderr, bridge, defaultSignalChan())
|
|
}
|
|
|
|
func runMainWithSignal(args []string, stdout *os.File, stderr io.Writer, bridge photos.Bridge, sigCh <-chan struct{}) int {
|
|
done := make(chan struct{})
|
|
var rc atomic.Int32
|
|
|
|
go func() {
|
|
rc.Store(int32(run(args, stdout, stderr, bridge)))
|
|
close(done)
|
|
}()
|
|
|
|
select {
|
|
case <-done:
|
|
case <-sigCh:
|
|
bridge.Cancel()
|
|
stderr.Write([]byte("\nreceived signal, finishing current file...\n"))
|
|
<-done
|
|
}
|
|
|
|
return int(rc.Load())
|
|
} |