hex avatar experiment

This commit is contained in:
Ted Unangst 2022-01-22 16:30:02 -05:00
parent 60bc158774
commit e9a742a132
6 changed files with 39 additions and 4 deletions

View File

@ -1470,7 +1470,11 @@ func junkuser(user *WhatAbout) junk.Junk {
if ava := user.Options.Avatar; ava != "" { if ava := user.Options.Avatar; ava != "" {
a["url"] = ava a["url"] = ava
} else { } else {
a["url"] = fmt.Sprintf("https://%s/a?a=%s", serverName, url.QueryEscape(user.URL)) u := fmt.Sprintf("https://%s/a?a=%s", serverName, url.QueryEscape(user.URL))
if user.Options.Avahex {
u += "&hex=1"
}
a["url"] = u
} }
j["icon"] = a j["icon"] = a
} else { } else {

View File

@ -66,7 +66,7 @@ func loadAvatarColors() {
} }
} }
func genAvatar(name string) []byte { func genAvatar(name string, hex bool) []byte {
h := sha512.New() h := sha512.New()
h.Write([]byte(name)) h.Write([]byte(name))
s := h.Sum(nil) s := h.Sum(nil)
@ -74,6 +74,27 @@ func genAvatar(name string) []byte {
for i := 0; i < 64; i++ { for i := 0; i < 64; i++ {
for j := 0; j < 64; j++ { for j := 0; j < 64; j++ {
p := i*img.Stride + j*4 p := i*img.Stride + j*4
if hex {
tan := 0.577
if i < 32 {
if j < 17-int(float64(i)*tan) || j > 46+int(float64(i)*tan) {
img.Pix[p+0] = 0
img.Pix[p+1] = 0
img.Pix[p+2] = 0
img.Pix[p+3] = 255
continue
}
} else {
if j < 17-int(float64(64-i)*tan) || j > 46+int(float64(64-i)*tan) {
img.Pix[p+0] = 0
img.Pix[p+1] = 0
img.Pix[p+2] = 0
img.Pix[p+3] = 255
continue
}
}
}
xx := i/16*16 + j/16 xx := i/16*16 + j/16
x := s[xx] x := s[xx]
if x < 64 { if x < 64 {

View File

@ -51,10 +51,11 @@ type WhatAbout struct {
type UserOptions struct { type UserOptions struct {
SkinnyCSS bool `json:",omitempty"` SkinnyCSS bool `json:",omitempty"`
OmitImages bool `json:",omitempty"` OmitImages bool `json:",omitempty"`
Avahex bool `json:",omitempty"`
MentionAll bool `json:",omitempty"`
Avatar string `json:",omitempty"` Avatar string `json:",omitempty"`
MapLink string `json:",omitempty"` MapLink string `json:",omitempty"`
Reaction string `json:",omitempty"` Reaction string `json:",omitempty"`
MentionAll bool
Chats int Chats int
} }

View File

@ -1,3 +1,4 @@
//go:build openbsd
// +build openbsd // +build openbsd
// //

View File

@ -10,6 +10,8 @@
<p><textarea name="whatabout">{{ .WhatAbout }}</textarea> <p><textarea name="whatabout">{{ .WhatAbout }}</textarea>
<p><label class="button" for="skinny">skinny layout:</label> <p><label class="button" for="skinny">skinny layout:</label>
<input tabindex=1 type="checkbox" id="skinny" name="skinny" value="skinny" {{ if .User.Options.SkinnyCSS }}checked{{ end }}><span></span> <input tabindex=1 type="checkbox" id="skinny" name="skinny" value="skinny" {{ if .User.Options.SkinnyCSS }}checked{{ end }}><span></span>
<p><label class="button" for="avahex">hex avatar:</label>
<input tabindex=1 type="checkbox" id="avahex" name="avahex" value="avahex" {{ if .User.Options.Avahex }}checked{{ end }}><span></span>
<p><label class="button" for="omitimages">omit images:</label> <p><label class="button" for="omitimages">omit images:</label>
<input tabindex=1 type="checkbox" id="omitimages" name="omitimages" value="omitimages" {{ if .User.Options.OmitImages }}checked{{ end }}><span></span> <input tabindex=1 type="checkbox" id="omitimages" name="omitimages" value="omitimages" {{ if .User.Options.OmitImages }}checked{{ end }}><span></span>
<p><label class="button" for="mentionall">mention all:</label> <p><label class="button" for="mentionall">mention all:</label>

8
web.go
View File

@ -1107,6 +1107,11 @@ func saveuser(w http.ResponseWriter, r *http.Request) {
} else { } else {
options.SkinnyCSS = false options.SkinnyCSS = false
} }
if r.FormValue("avahex") == "avahex" {
options.Avahex = true
} else {
options.Avahex = false
}
if r.FormValue("omitimages") == "omitimages" { if r.FormValue("omitimages") == "omitimages" {
options.OmitImages = true options.OmitImages = true
} else { } else {
@ -2104,7 +2109,8 @@ func avatate(w http.ResponseWriter, r *http.Request) {
loadAvatarColors() loadAvatarColors()
} }
n := r.FormValue("a") n := r.FormValue("a")
a := genAvatar(n) hex := r.FormValue("hex") == "1"
a := genAvatar(n, hex)
if !debugMode { if !debugMode {
w.Header().Set("Cache-Control", "max-age="+somedays()) w.Header().Set("Cache-Control", "max-age="+somedays())
} }