4ec0d6e54a78 — Peter Sanchez 17 days ago
Merge tedu upstream
8 files changed, 38 insertions(+), 29 deletions(-)

A => emus/disputed.png
M filestoragemanagerfactory.go
M go.mod
M go.sum
M main.go
M util.go
M views/honk.html
M web.go
A => emus/disputed.png +0 -0

        
M filestoragemanagerfactory.go +3 -0
@@ 194,6 194,9 @@ func loaddata(xid string) ([]byte, func(
 }
 
 func servefiledata(w http.ResponseWriter, r *http.Request, xid string) {
+	if strings.HasSuffix(xid, ".avif") {
+		xid = xid[:len(xid)-5]
+	}
 	var media string
 	row := stmtGetFileMedia.QueryRow(xid)
 	err := row.Scan(&media)

          
M go.mod +1 -1
@@ 11,7 11,7 @@ require (
 	humungus.tedunangst.com/r/go-sqlite3 v1.2.1
 	humungus.tedunangst.com/r/gonix v0.1.4
 	humungus.tedunangst.com/r/termvc v0.1.3
-	humungus.tedunangst.com/r/webs v0.7.18
+	humungus.tedunangst.com/r/webs v0.7.23
 )
 
 require (

          
M go.sum +2 -2
@@ 80,5 80,5 @@ humungus.tedunangst.com/r/gonix v0.1.4 h
 humungus.tedunangst.com/r/gonix v0.1.4/go.mod h1:VFBc2bPDXr1ayHOmHUutxYu8fSM+pkwK8o36h4rkORg=
 humungus.tedunangst.com/r/termvc v0.1.3 h1:BYxcqdA2Ijhqolf2BdNlGw5355qE80EzAqiNgi7d5tk=
 humungus.tedunangst.com/r/termvc v0.1.3/go.mod h1:TnlG9PbH77OpEf46iDyb/H9drjegQNwhpXalmGGrbhU=
-humungus.tedunangst.com/r/webs v0.7.18 h1:tCPZuC7p/8chlOSb1RBJYxnGauBg2Lzm5DO4cu+82HI=
-humungus.tedunangst.com/r/webs v0.7.18/go.mod h1:ylhqHSPI0Oi7b4nsnx5mSO7AjLXN7wFpEHayLfN/ugk=
+humungus.tedunangst.com/r/webs v0.7.23 h1:LEamoWvtgBOukGuzHj/T1qhRwNQkoz2RMCiwvvxwIug=
+humungus.tedunangst.com/r/webs v0.7.23/go.mod h1:ylhqHSPI0Oi7b4nsnx5mSO7AjLXN7wFpEHayLfN/ugk=

          
M main.go +8 -2
@@ 30,6 30,7 @@ import (
 	"strings"
 	"time"
 
+	"humungus.tedunangst.com/r/webs/lazif"
 	"humungus.tedunangst.com/r/webs/log"
 )
 

          
@@ 55,8 56,13 @@ func serverURL(u string, args ...interfa
 }
 
 func ElaborateUnitTests() {
-	user, _ := butwhatabout("test")
-	syndicate(user, "https://mastodon.social/tags/mastoadmin.rss")
+	data, _ := os.ReadFile("input.jpg")
+	d2 := avifEncode(data)
+	os.WriteFile("output.avif", d2, 0600)
+}
+
+func avifEncode(data []byte) []byte {
+	return lazif.Encode(data)
 }
 
 func unplugserver(hostname string) {

          
M util.go +1 -1
@@ 480,7 480,7 @@ func openListener() (net.Listener, error
 	}
 	dlog.Printf("starting web server on %s", listenAddr)
 	proto := "tcp"
-	if listenAddr[0] == '/' {
+	if listenAddr[0] == '/' || listenAddr[0] == '.' {
 		proto = "unix"
 		err := os.Remove(listenAddr)
 		if err != nil && !os.IsNotExist(err) {

          
M views/honk.html +1 -23
@@ 66,29 66,7 @@ in reply to: <a href="{{ .RID }}" rel=no
 <p>Location: {{ with .Url }}<a href="{{ . }}" rel=noreferrer>{{ end }}{{ .Name }}{{ if .Url }}</a>{{ end }}{{ if or .Latitude .Longitude }} <a href="{{ if eq $maplink "apple" }}https://maps.apple.com/?q={{ or .Name "here" }}&z=16&ll={{ .Latitude }},{{ .Longitude }}{{ else }}https://www.openstreetmap.org/?mlat={{ .Latitude }}&mlon={{ .Longitude}}#map=16/{{ .Latitude }}/{{ .Longitude }}{{ end }}" rel=noreferrer>{{ .Latitude }} {{ .Longitude }}</a></p>{{ end }}
 {{ end }}
 {{ range .Donks }}
-{{ if .Local }}
-{{ if eq .Media "text/plain" }}
-<p><a href="/d/{{ .XID }}">Attachment: {{ .Name }}</a>{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} ({{ .Meta.Length }})</p>
-{{ else if eq .Media "application/pdf" }}
-<p><a href="/d/{{ .XID }}">Attachment: {{ .Name }}</a>{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} ({{ .Meta.Length }})</p>
-{{ else }}
-{{ if $omitimages }}
-<p><a href="/d/{{ .XID }}">Image: {{ .Name }}</a>{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} ({{.Meta.Width}}x{{.Meta.Height}} {{ .Meta.Length }})</p>
-{{ else }}
-<img class="donk donklink" src="/d/{{ .XID }}" loading=lazy title="{{ .Desc }}" alt="{{ .Desc }}" width="{{.Meta.Width}}" height="{{.Meta.Height}}">
-{{ end }}
-{{ end }}
-{{ else }}
-{{ if .External }}
-<p><a href="{{ .URL }}" rel=noreferrer>External Attachment: {{ .Name }}</a>{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }}</p>
-{{ else }}
-{{ if eq .Media "video/mp4" }}
-<p><video controls src="{{ .URL }}">{{ .Name }}</video></p>
-{{ else }}
-<p><img src="{{ .URL }}" title="{{ .Desc }}" alt="{{ .Desc }}" loading="lazy">
-{{ end }}
-{{ end }}
-{{ end }}
+{{ .HTML }}
 {{ end }}
 </details>
 {{ end }}

          
M web.go +22 -0
@@ 1553,6 1553,28 @@ func honkpage(w http.ResponseWriter, u *
 	}
 }
 
+func (d *Donk) HTML() template.HTML {
+	var desc string
+	if d.Desc != d.Name {
+		desc = " " + d.Desc
+	}
+	if d.Local {
+		if d.Media == "text/plain" || d.Media == "application/pdf" {
+			return templates.Sprintf(`<p><a href="/d/%s">Attachment: %s</a>%s (%d)</p>`, d.XID, d.Name, desc, d.Meta.Length)
+		} else {
+			return templates.Sprintf(`<picture><source type="image/avif" srcset="/d/%s.avif"><img class="donk donklink" src="/d/%s" loading=lazy title="%s" alt="%s" width="%d" height="%d"></picture>`, d.XID, d.XID, d.Desc, d.Desc, d.Meta.Width, d.Meta.Height)
+		}
+	} else {
+		if d.External {
+			return templates.Sprintf(`<p><a href="%s" rel=noreferrer>External Attachment: %s</a>%s</p>`, d.URL, d.Name, desc)
+		} else if d.Media == "video/mp4" {
+			return templates.Sprintf(`<p><video controls src="%s">%s</video></p>`, d.URL, d.Name)
+		} else {
+			return templates.Sprintf(`<p><img src="%s" title="%s" alt="%s"></p>`, d.URL, d.Desc, d.Desc)
+		}
+	}
+}
+
 func saveuser(w http.ResponseWriter, r *http.Request) {
 	whatabout := r.FormValue("whatabout")
 	whatabout = strings.Replace(whatabout, "\r", "", -1)