bloat: counter.cgi
This commit is contained in:
parent
cbf2756712
commit
21ca139a31
|
@ -0,0 +1,102 @@
|
||||||
|
//
|
||||||
|
// Copyright (c) 2019 Ted Unangst <tedu@tedunangst.com>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"strings"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
var bloat_mtx sync.Mutex
|
||||||
|
|
||||||
|
func bloat_counterplusone(s string) string {
|
||||||
|
bloat_mtx.Lock()
|
||||||
|
defer bloat_mtx.Unlock()
|
||||||
|
|
||||||
|
var bloat_counter int
|
||||||
|
getconfig("bloat_counter", &bloat_counter)
|
||||||
|
|
||||||
|
if bloat_counter < 9001 {
|
||||||
|
bloat_counter++
|
||||||
|
saveconfig("bloat_counter", bloat_counter)
|
||||||
|
}
|
||||||
|
// 1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10th 11th 12th 13th
|
||||||
|
suf := "th"
|
||||||
|
switch bloat_counter % 10 {
|
||||||
|
case 1:
|
||||||
|
suf = "st"
|
||||||
|
case 2:
|
||||||
|
suf = "nd"
|
||||||
|
case 3:
|
||||||
|
suf = "rd"
|
||||||
|
}
|
||||||
|
if bloat_counter == 11 || bloat_counter == 12 || bloat_counter == 13 {
|
||||||
|
suf = "th"
|
||||||
|
}
|
||||||
|
val := fmt.Sprintf("%d%s", bloat_counter, suf)
|
||||||
|
log.Printf("now producing %s counter", val)
|
||||||
|
s = strings.Replace(s, "<bloat_counter>", val, -1)
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
func bloat_counterfixhonk(honk *Honk) {
|
||||||
|
honk.Noise = bloat_counterplusone(honk.Noise)
|
||||||
|
}
|
||||||
|
|
||||||
|
func bloat_counterhtml(honk *Honk) {
|
||||||
|
honk.Noise = strings.Replace(honk.Noise, "<bloat_counter>", "1st", -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func bloat_counterannounce(user *WhatAbout, honk *Honk) {
|
||||||
|
rcpts := make(map[string]bool)
|
||||||
|
for _, a := range honk.Audience {
|
||||||
|
if a != thewholeworld && a != user.URL && !strings.HasSuffix(a, "/followers") {
|
||||||
|
box, _ := getboxes(a)
|
||||||
|
if box != nil && honk.Public && box.Shared != "" {
|
||||||
|
rcpts["%"+box.Shared] = true
|
||||||
|
} else {
|
||||||
|
rcpts[a] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if honk.Public {
|
||||||
|
for _, f := range getdubs(user.ID) {
|
||||||
|
box, _ := getboxes(f.XID)
|
||||||
|
if box != nil && box.Shared != "" {
|
||||||
|
rcpts["%"+box.Shared] = true
|
||||||
|
} else {
|
||||||
|
rcpts[f.XID] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for a := range rcpts {
|
||||||
|
bloat_counterfixhonk(honk)
|
||||||
|
jonk, _ := jonkjonk(user, honk)
|
||||||
|
jonk["@context"] = itiswhatitis
|
||||||
|
var buf bytes.Buffer
|
||||||
|
jonk.Write(&buf)
|
||||||
|
msg := buf.Bytes()
|
||||||
|
go deliverate(0, user.Name, a, msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func bloat_iscounter(honk *Honk) bool {
|
||||||
|
return strings.Contains(honk.Noise, "<bloat_counter>")
|
||||||
|
}
|
||||||
|
|
3
fun.go
3
fun.go
|
@ -48,6 +48,9 @@ func reverbolate(userid int64, honks []*Honk) {
|
||||||
h.URL = h.XID
|
h.URL = h.XID
|
||||||
if h.What != "bonked" {
|
if h.What != "bonked" {
|
||||||
h.Noise = mentionize(h.Noise)
|
h.Noise = mentionize(h.Noise)
|
||||||
|
if bloat_iscounter(h) {
|
||||||
|
bloat_counterhtml(h)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
h.Username, h.Handle = honkerhandle(h.Honker)
|
h.Username, h.Handle = honkerhandle(h.Honker)
|
||||||
} else {
|
} else {
|
||||||
|
|
12
honk.go
12
honk.go
|
@ -506,6 +506,9 @@ func outbox(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
var jonks []junk.Junk
|
var jonks []junk.Junk
|
||||||
for _, h := range honks {
|
for _, h := range honks {
|
||||||
|
if bloat_iscounter(h) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
j, _ := jonkjonk(user, h)
|
j, _ := jonkjonk(user, h)
|
||||||
jonks = append(jonks, j)
|
jonks = append(jonks, j)
|
||||||
}
|
}
|
||||||
|
@ -624,6 +627,9 @@ func showhonk(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
if friendorfoe(r.Header.Get("Accept")) {
|
if friendorfoe(r.Header.Get("Accept")) {
|
||||||
donksforhonks([]*Honk{h})
|
donksforhonks([]*Honk{h})
|
||||||
|
if bloat_iscounter(h) {
|
||||||
|
bloat_counterfixhonk(h)
|
||||||
|
}
|
||||||
_, j := jonkjonk(user, h)
|
_, j := jonkjonk(user, h)
|
||||||
j["@context"] = itiswhatitis
|
j["@context"] = itiswhatitis
|
||||||
w.Header().Set("Content-Type", theonetruename)
|
w.Header().Set("Content-Type", theonetruename)
|
||||||
|
@ -1139,7 +1145,11 @@ func savehonk(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
go honkworldwide(user, &honk)
|
if bloat_iscounter(&honk) {
|
||||||
|
go bloat_counterannounce(user, &honk)
|
||||||
|
} else {
|
||||||
|
go honkworldwide(user, &honk)
|
||||||
|
}
|
||||||
|
|
||||||
http.Redirect(w, r, xid, http.StatusSeeOther)
|
http.Redirect(w, r, xid, http.StatusSeeOther)
|
||||||
}
|
}
|
||||||
|
|
5
util.go
5
util.go
|
@ -286,6 +286,11 @@ func getconfig(key string, value interface{}) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func saveconfig(key string, val interface{}) {
|
||||||
|
db := opendatabase()
|
||||||
|
db.Exec("update config set value = ? where key = ?", val, key)
|
||||||
|
}
|
||||||
|
|
||||||
func openListener() (net.Listener, error) {
|
func openListener() (net.Listener, error) {
|
||||||
var listenAddr string
|
var listenAddr string
|
||||||
err := getconfig("listenaddr", &listenAddr)
|
err := getconfig("listenaddr", &listenAddr)
|
||||||
|
|
Loading…
Reference in New Issue