|
|
|
@ -17,12 +17,24 @@ import (
|
|
|
|
|
"github.com/fsnotify/fsnotify"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type duration time.Duration
|
|
|
|
|
|
|
|
|
|
func (d *duration) UnmarshalText(text []byte) error {
|
|
|
|
|
dur, err := time.ParseDuration(string(text))
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
*d = duration(dur)
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var config struct {
|
|
|
|
|
S3 s3Config `toml:"s3"`
|
|
|
|
|
URL urlShortenerConfig `toml:"url"`
|
|
|
|
|
FS fswatchConfig `toml:"fswatch"`
|
|
|
|
|
|
|
|
|
|
ShareTTL duration `toml:"share_ttl"`
|
|
|
|
|
|
|
|
|
|
LogFile string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -34,7 +46,7 @@ func init() {
|
|
|
|
|
fmt.Println()
|
|
|
|
|
fmt.Println("Command spaced automatically uploads screenshots and puts a shareable URL in")
|
|
|
|
|
fmt.Println("the system clipboard. The screenshots are uploaded to an S3-compatible bucket,")
|
|
|
|
|
fmt.Println("and eokvin as a URL shortening service.")
|
|
|
|
|
fmt.Println("and eokvin is used as a URL shortening service.")
|
|
|
|
|
fmt.Println()
|
|
|
|
|
fmt.Println("spaced works with an S3-compatible storage, such as DigitalOcean Spaces.")
|
|
|
|
|
fmt.Println()
|
|
|
|
@ -142,18 +154,20 @@ func worker(stop chan struct{}) {
|
|
|
|
|
log.Println("error writing to storage:", err.Error())
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
u, err := s3.PresignedGetObject(f, 30*time.Minute, url.Values{})
|
|
|
|
|
u, err := s3.PresignedGetObject(f, time.Duration(config.ShareTTL), url.Values{})
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Println("error getting public aws url:", err.Error())
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
log.Println("AWS URL:", u.String())
|
|
|
|
|
su, err := c.NewShortURL(u)
|
|
|
|
|
su, err := c.NewShortURL(u, time.Duration(config.ShareTTL))
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Println("error getting short share url:", err.Error())
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
log.Println("Share URL:", su.String())
|
|
|
|
|
log.Printf("Share URL: %s\t(valid until %s)\n",
|
|
|
|
|
su.String(),
|
|
|
|
|
time.Now().Add(time.Duration(config.ShareTTL)).Format("Jan 02 15:02 MST"))
|
|
|
|
|
cmd := exec.Command("pbcopy")
|
|
|
|
|
p, err := cmd.StdinPipe()
|
|
|
|
|
if err != nil {
|
|
|
|
|