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)