diff --git a/go.mod b/go.mod
index 7d06244..f285ca3 100644
--- a/go.mod
+++ b/go.mod
@@ -5,6 +5,7 @@ go 1.16
require (
github.com/fogleman/gg v1.3.0
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
+ github.com/gorilla/mux v1.8.0 // indirect
github.com/mitchellh/go-homedir v1.1.0
golang.org/x/image v0.0.0-20210504121937-7319ad40d33e
golang.org/x/mod v0.4.2
diff --git a/go.sum b/go.sum
index 9892b01..d2e5d2f 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
+github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
+github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
diff --git a/upload/upload.go b/upload/upload.go
index b40d79d..2c6114e 100644
--- a/upload/upload.go
+++ b/upload/upload.go
@@ -15,6 +15,7 @@ import (
"net/http"
"os"
"path/filepath"
+ "sync/atomic"
"time"
"github.com/fogleman/gg"
@@ -26,13 +27,16 @@ import (
type State string
const (
- StatePending State = "Pending"
- StateQueued State = "Queued"
- StateUploading State = "Uploading"
- StateComplete State = "Complete"
- StateFailed State = "Failed"
+ StatePending State = "Pending" // waiting for decision to upload (could be edited)
+ StateQueued State = "Queued" // ready for upload
+ StateUploading State = "Uploading" // uploading
+ StateComplete State = "Complete" // finished successfully
+ StateFailed State = "Failed" // failed
+ StateSkipped State = "Skipped" // user did not want to upload
)
+var currentId int32
+
type HTTPClient interface {
Do(req *http.Request) (*http.Response, error)
}
@@ -42,10 +46,11 @@ type Uploader struct {
}
type Upload struct {
+ Id int32 `json:"id"`
UploadedAt time.Time `json:"uploaded_at"`
- originalFilename string // path on the local disk
- filenameToUpload string // post-watermark, or just original if unwatermarked
+ OriginalFilename string `json:"original_file"` // path on the local disk
+ TemporaryFileToUpload string // post-watermark, or just original if unwatermarked
webhookURL string
@@ -71,8 +76,10 @@ func NewUploader() *Uploader {
}
func (u *Uploader) AddFile(file string, conf config.Watcher) {
+ atomic.AddInt32(¤tId, 1)
thisUpload := Upload{
- originalFilename: file,
+ Id: currentId,
+ OriginalFilename: file,
watermark: !conf.NoWatermark,
webhookURL: conf.WebHookURL,
usernameOverride: conf.Username,
@@ -92,7 +99,7 @@ func (u *Uploader) Upload() {
}
func (u *Upload) processUpload() error {
- daulog.SendLog(fmt.Sprintf("Uploading: %s", u.originalFilename), daulog.LogTypeInfo)
+ daulog.SendLog(fmt.Sprintf("Uploading: %s", u.OriginalFilename), daulog.LogTypeInfo)
if u.webhookURL == "" {
daulog.SendLog("WebHookURL is not configured - cannot upload!", daulog.LogTypeError)
@@ -103,7 +110,7 @@ func (u *Upload) processUpload() error {
daulog.SendLog("Watermarking image", daulog.LogTypeInfo)
u.applyWatermark()
} else {
- u.filenameToUpload = u.originalFilename
+ u.TemporaryFileToUpload = u.OriginalFilename
}
extraParams := map[string]string{}
@@ -130,7 +137,7 @@ func (u *Upload) processUpload() error {
var retriesRemaining = 5
for retriesRemaining > 0 {
- request, err := newfileUploadRequest(u.webhookURL, extraParams, "file", u.filenameToUpload)
+ request, err := newfileUploadRequest(u.webhookURL, extraParams, "file", u.TemporaryFileToUpload)
if err != nil {
log.Printf("error creating upload request: %s", err)
return fmt.Errorf("could not create upload request: %s", err)
@@ -216,8 +223,8 @@ func (u *Upload) processUpload() error {
}
if u.watermark {
- daulog.SendLog(fmt.Sprintf("Removing temporary file: %s", u.filenameToUpload), daulog.LogTypeDebug)
- os.Remove(u.filenameToUpload)
+ daulog.SendLog(fmt.Sprintf("Removing temporary file: %s", u.TemporaryFileToUpload), daulog.LogTypeDebug)
+ os.Remove(u.TemporaryFileToUpload)
}
if retriesRemaining == 0 {
@@ -261,7 +268,7 @@ func newfileUploadRequest(uri string, params map[string]string, paramName, path
func (u *Upload) applyWatermark() {
- reader, err := os.Open(u.originalFilename)
+ reader, err := os.Open(u.OriginalFilename)
if err != nil {
log.Fatal(err)
}
@@ -271,7 +278,7 @@ func (u *Upload) applyWatermark() {
if err != nil {
daulog.SendLog(fmt.Sprintf("Cannot decode image: %v - skipping watermarking", err), daulog.LogTypeError)
u.watermark = false
- u.filenameToUpload = u.originalFilename
+ u.TemporaryFileToUpload = u.OriginalFilename
return
}
bounds := im.Bounds()
@@ -302,7 +309,7 @@ func (u *Upload) applyWatermark() {
actualName := tempfile.Name() + ".png"
dc.SavePNG(actualName)
- u.filenameToUpload = actualName
+ u.TemporaryFileToUpload = actualName
}
func sleepForRetries(retry int) {
diff --git a/upload/upload_test.go b/upload/upload_test.go
index c840bdd..89dfd14 100644
--- a/upload/upload_test.go
+++ b/upload/upload_test.go
@@ -43,7 +43,7 @@ func TestSuccessfulUpload(t *testing.T) {
// we will not really be uploading it here
f, _ := os.CreateTemp("", "dautest-upload-*")
defer os.Remove(f.Name())
- u := Upload{webhookURL: "https://127.0.0.1/", originalFilename: f.Name()}
+ u := Upload{webhookURL: "https://127.0.0.1/", OriginalFilename: f.Name()}
u.Client = &MockClient{DoFunc: DoGoodUpload}
err := u.processUpload()
if err != nil {
@@ -62,7 +62,7 @@ func TestTooBigUpload(t *testing.T) {
// we will not really be uploading it here
f, _ := os.CreateTemp("", "dautest-upload-*")
defer os.Remove(f.Name())
- u := Upload{webhookURL: "https://127.0.0.1/", originalFilename: f.Name()}
+ u := Upload{webhookURL: "https://127.0.0.1/", OriginalFilename: f.Name()}
u.Client = &MockClient{DoFunc: DoTooBigUpload}
err := u.processUpload()
if err == nil {
diff --git a/web/data/config.html b/web/data/config.html
index 7c79ccd..36d4425 100644
--- a/web/data/config.html
+++ b/web/data/config.html
@@ -160,7 +160,6 @@
{{ end }}
{{ define "js" }}
-
{{ end }}
diff --git a/web/data/wrapper.tmpl b/web/data/wrapper.tmpl
index 3678a26..7e2229d 100644
--- a/web/data/wrapper.tmpl
+++ b/web/data/wrapper.tmpl
@@ -10,7 +10,7 @@
-
+