From 2ef8cc8a80ca2dcb63a4957be2a4373d7f0971b6 Mon Sep 17 00:00:00 2001 From: Ted Unangst Date: Fri, 2 Aug 2019 10:38:42 -0400 Subject: [PATCH] save attached images past preview --- docs/changelog.txt | 2 + honk.go | 107 ++++++++++++++++++++++++++------------------ views/honkform.html | 3 +- 3 files changed, 67 insertions(+), 45 deletions(-) diff --git a/docs/changelog.txt b/docs/changelog.txt index 2253b44..2b33f05 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -2,6 +2,8 @@ changelog -- next ++ Attached images are not lost when previewing. + - Remove sensitivity to spicy peppers. + Keep reply to setting during preview. diff --git a/honk.go b/honk.go index 305a233..78c0962 100644 --- a/honk.go +++ b/honk.go @@ -1014,59 +1014,77 @@ func savehonk(w http.ResponseWriter, r *http.Request) { honk.Noise = noise honk.Convoy = convoy - file, filehdr, err := r.FormFile("donk") - if err == nil { - var buf bytes.Buffer - io.Copy(&buf, file) - file.Close() - data := buf.Bytes() - xid := xfiltrate() - var media, name string - img, err := image.Vacuum(&buf, image.Params{MaxWidth: 2048, MaxHeight: 2048}) + donkxid := r.FormValue("donkxid") + if donkxid == "" { + file, filehdr, err := r.FormFile("donk") if err == nil { - data = img.Data - format := img.Format - media = "image/" + format - if format == "jpeg" { - format = "jpg" - } - name = xid + "." + format - xid = name - } else { - maxsize := 100000 - if len(data) > maxsize { - log.Printf("bad image: %s too much text: %d", err, len(data)) - http.Error(w, "didn't like your attachment", http.StatusUnsupportedMediaType) - return - } - for i := 0; i < len(data); i++ { - if data[i] < 32 && data[i] != '\t' && data[i] != '\r' && data[i] != '\n' { - log.Printf("bad image: %s not text: %d", err, data[i]) + var buf bytes.Buffer + io.Copy(&buf, file) + file.Close() + data := buf.Bytes() + xid := xfiltrate() + var media, name string + img, err := image.Vacuum(&buf, image.Params{MaxWidth: 2048, MaxHeight: 2048}) + if err == nil { + data = img.Data + format := img.Format + media = "image/" + format + if format == "jpeg" { + format = "jpg" + } + name = xid + "." + format + xid = name + } else { + maxsize := 100000 + if len(data) > maxsize { + log.Printf("bad image: %s too much text: %d", err, len(data)) http.Error(w, "didn't like your attachment", http.StatusUnsupportedMediaType) return } + for i := 0; i < len(data); i++ { + if data[i] < 32 && data[i] != '\t' && data[i] != '\r' && data[i] != '\n' { + log.Printf("bad image: %s not text: %d", err, data[i]) + http.Error(w, "didn't like your attachment", http.StatusUnsupportedMediaType) + return + } + } + media = "text/plain" + name = filehdr.Filename + if name == "" { + name = xid + ".txt" + } + xid += ".txt" } - media = "text/plain" - name = filehdr.Filename - if name == "" { - name = xid + ".txt" + url := fmt.Sprintf("https://%s/d/%s", serverName, xid) + res, err := stmtSaveFile.Exec(xid, name, url, media, 1, data) + if err != nil { + log.Printf("unable to save image: %s", err) + return } - xid += ".txt" + var d Donk + d.FileID, _ = res.LastInsertId() + d.XID = name + d.Name = name + d.Media = media + d.URL = url + d.Local = true + honk.Donks = append(honk.Donks, &d) + donkxid = d.XID } + } else { + xid := donkxid url := fmt.Sprintf("https://%s/d/%s", serverName, xid) - res, err := stmtSaveFile.Exec(xid, name, url, media, 1, data) - if err != nil { - log.Printf("unable to save image: %s", err) - return + var donk Donk + row := stmtFindFile.QueryRow(url) + err := row.Scan(&donk.FileID) + if err == nil { + donk.XID = xid + donk.Local = true + donk.URL = url + honk.Donks = append(honk.Donks, &donk) + } else { + log.Printf("can't find file: %s", xid) } - var d Donk - d.FileID, _ = res.LastInsertId() - d.XID = name - d.Name = name - d.Media = media - d.URL = url - d.Local = true - honk.Donks = append(honk.Donks, &d) } herd := herdofemus(honk.Noise) for _, e := range herd { @@ -1091,6 +1109,7 @@ func savehonk(w http.ResponseWriter, r *http.Request) { templinfo["Honks"] = honks templinfo["InReplyTo"] = r.FormValue("rid") templinfo["Noise"] = r.FormValue("noise") + templinfo["SavedFile"] = donkxid templinfo["ServerMessage"] = "honk preview" err := readviews.Execute(w, "honkpage.html", templinfo) if err != nil { diff --git a/views/honkform.html b/views/honkform.html index 7c45149..fc675f5 100644 --- a/views/honkform.html +++ b/views/honkform.html @@ -5,7 +5,8 @@ in reply to:

- + +