configurable avatar colors
This commit is contained in:
parent
ff9d4336db
commit
150af9cc7c
10
admin.go
10
admin.go
|
@ -36,6 +36,9 @@ func adminscreen() {
|
|||
smcup := esc + "[?1049h"
|
||||
rmcup := esc + "[?1049l"
|
||||
|
||||
var avatarColors string
|
||||
getconfig("avatarcolors", &avatarColors)
|
||||
|
||||
messages := []*struct {
|
||||
name string
|
||||
label string
|
||||
|
@ -56,6 +59,11 @@ func adminscreen() {
|
|||
label: "login",
|
||||
text: string(loginMsg),
|
||||
},
|
||||
{
|
||||
name: "avatarcolors",
|
||||
label: "avatar colors (4 RGBA hex numbers)",
|
||||
text: string(avatarColors),
|
||||
},
|
||||
}
|
||||
cursel := 0
|
||||
|
||||
|
@ -239,7 +247,7 @@ func adminscreen() {
|
|||
stdout.Flush()
|
||||
}
|
||||
editing = false
|
||||
updateconfig(m.name, m.text)
|
||||
setconfig(m.name, m.text)
|
||||
hidecursor()
|
||||
drawscreen()
|
||||
}
|
||||
|
|
73
avatar.go
73
avatar.go
|
@ -16,13 +16,52 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"crypto/sha512"
|
||||
"image"
|
||||
"image/png"
|
||||
"log"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func avatar(name string) []byte {
|
||||
var avatarcolors = [4][4]byte{
|
||||
{16, 0, 48, 255},
|
||||
{48, 0, 96, 255},
|
||||
{72, 0, 144, 255},
|
||||
{96, 0, 192, 255},
|
||||
}
|
||||
|
||||
func loadAvatarColors() {
|
||||
var colors string
|
||||
getconfig("avatarcolors", &colors)
|
||||
if colors == "" {
|
||||
return
|
||||
}
|
||||
r := bufio.NewReader(strings.NewReader(colors))
|
||||
for i := 0; i < 4; i++ {
|
||||
l, _ := r.ReadString(' ')
|
||||
for l == " " {
|
||||
l, _ = r.ReadString(' ')
|
||||
}
|
||||
l = strings.Trim(l, "# \n")
|
||||
if len(l) == 6 {
|
||||
l = l + "ff"
|
||||
}
|
||||
c, err := strconv.ParseUint(l, 16, 32)
|
||||
if err != nil {
|
||||
log.Printf("error reading avatar color %d: %s", i, err)
|
||||
continue
|
||||
}
|
||||
avatarcolors[i][0] = byte(c >> 24 & 0xff)
|
||||
avatarcolors[i][1] = byte(c >> 16 & 0xff)
|
||||
avatarcolors[i][2] = byte(c >> 8 & 0xff)
|
||||
avatarcolors[i][3] = byte(c >> 0 & 0xff)
|
||||
}
|
||||
}
|
||||
|
||||
func genAvatar(name string) []byte {
|
||||
h := sha512.New()
|
||||
h.Write([]byte(name))
|
||||
s := h.Sum(nil)
|
||||
|
@ -33,25 +72,25 @@ func avatar(name string) []byte {
|
|||
xx := i/16*16 + j/16
|
||||
x := s[xx]
|
||||
if x < 64 {
|
||||
img.Pix[p+0] = 16
|
||||
img.Pix[p+1] = 0
|
||||
img.Pix[p+2] = 48
|
||||
img.Pix[p+3] = 255
|
||||
img.Pix[p+0] = avatarcolors[0][0]
|
||||
img.Pix[p+1] = avatarcolors[0][1]
|
||||
img.Pix[p+2] = avatarcolors[0][2]
|
||||
img.Pix[p+3] = avatarcolors[0][3]
|
||||
} else if x < 128 {
|
||||
img.Pix[p+0] = 48
|
||||
img.Pix[p+1] = 0
|
||||
img.Pix[p+2] = 96
|
||||
img.Pix[p+3] = 255
|
||||
img.Pix[p+0] = avatarcolors[1][0]
|
||||
img.Pix[p+1] = avatarcolors[1][1]
|
||||
img.Pix[p+2] = avatarcolors[1][2]
|
||||
img.Pix[p+3] = avatarcolors[1][3]
|
||||
} else if x < 192 {
|
||||
img.Pix[p+0] = 72
|
||||
img.Pix[p+1] = 0
|
||||
img.Pix[p+2] = 144
|
||||
img.Pix[p+3] = 255
|
||||
img.Pix[p+0] = avatarcolors[2][0]
|
||||
img.Pix[p+1] = avatarcolors[2][1]
|
||||
img.Pix[p+2] = avatarcolors[2][2]
|
||||
img.Pix[p+3] = avatarcolors[2][3]
|
||||
} else {
|
||||
img.Pix[p+0] = 96
|
||||
img.Pix[p+1] = 0
|
||||
img.Pix[p+2] = 192
|
||||
img.Pix[p+3] = 255
|
||||
img.Pix[p+0] = avatarcolors[3][0]
|
||||
img.Pix[p+1] = avatarcolors[3][1]
|
||||
img.Pix[p+2] = avatarcolors[3][2]
|
||||
img.Pix[p+3] = avatarcolors[3][3]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,8 @@ changelog
|
|||
|
||||
-- next
|
||||
|
||||
+ Configurable avatar colors.
|
||||
|
||||
+ Optional pleroma color scheme for the home sick...
|
||||
|
||||
+ Rebalance colors slightly. Looks a little fresher now?
|
||||
|
|
|
@ -100,6 +100,8 @@ Displayed on the home page.
|
|||
Displayed on the about page.
|
||||
.It login
|
||||
Displayed about the login form.
|
||||
.It avatar colors
|
||||
Four 32-bit hex colors (RGBA).
|
||||
.El
|
||||
.Pp
|
||||
.Ss User Admin
|
||||
|
|
4
honk.go
4
honk.go
|
@ -262,9 +262,9 @@ func main() {
|
|||
}
|
||||
switch args[1] {
|
||||
case "on":
|
||||
updateconfig("debug", 1)
|
||||
setconfig("debug", 1)
|
||||
case "off":
|
||||
updateconfig("debug", 0)
|
||||
setconfig("debug", 0)
|
||||
default:
|
||||
log.Fatal("argument must be on or off")
|
||||
}
|
||||
|
|
7
util.go
7
util.go
|
@ -391,16 +391,11 @@ func getconfig(key string, value interface{}) error {
|
|||
|
||||
func setconfig(key string, val interface{}) error {
|
||||
db := opendatabase()
|
||||
db.Exec("delete from config where key = ?", key)
|
||||
_, err := db.Exec("insert into config (key, value) values (?, ?)", key, val)
|
||||
return err
|
||||
}
|
||||
|
||||
func updateconfig(key string, val interface{}) error {
|
||||
db := opendatabase()
|
||||
_, err := db.Exec("update config set value = ? where key = ?", val, key)
|
||||
return err
|
||||
}
|
||||
|
||||
func openListener() (net.Listener, error) {
|
||||
var listenAddr string
|
||||
err := getconfig("listenaddr", &listenAddr)
|
||||
|
|
6
web.go
6
web.go
|
@ -1988,8 +1988,11 @@ func somedays() string {
|
|||
}
|
||||
|
||||
func avatate(w http.ResponseWriter, r *http.Request) {
|
||||
if debugMode {
|
||||
loadAvatarColors()
|
||||
}
|
||||
n := r.FormValue("a")
|
||||
a := avatar(n)
|
||||
a := genAvatar(n)
|
||||
w.Header().Set("Cache-Control", "max-age="+somedays())
|
||||
w.Write(a)
|
||||
}
|
||||
|
@ -2261,6 +2264,7 @@ func serve() {
|
|||
for _, s := range assets {
|
||||
savedassetparams[s] = getassetparam(s)
|
||||
}
|
||||
loadAvatarColors()
|
||||
}
|
||||
|
||||
for _, h := range preservehooks {
|
||||
|
|
Loading…
Reference in New Issue