start work on user management

trunk
nbsp 2025-01-08 03:43:27 +02:00
parent c71a473d55
commit f2804c1fc9
No known key found for this signature in database
GPG Key ID: 7184AC1C9835CE48
6 changed files with 45 additions and 11 deletions

View File

@ -2,9 +2,12 @@ package app
import ( import (
"fmt" "fmt"
"os"
"os/user"
"strconv" "strconv"
"git.sr.ht/~rockorager/vaxis" "git.sr.ht/~rockorager/vaxis"
"git.tilde.town/nbsp/neofeels/ttbp"
"git.tilde.town/nbsp/neofeels/ui" "git.tilde.town/nbsp/neofeels/ui"
) )
@ -18,14 +21,14 @@ func NewManagement() *Management {
return &Management{ return &Management{
title, title,
ui.NewList([]string{ ui.NewList([]string{
"read over feels", // TODO "read over feels",
"modify feels publishing", // TODO "modify feels publishing", // TODO
"backup your feels", // TODO "backup your feels", // TODO
"import a feels backup", // TODO "import a feels backup", // TODO
"bury some feels", // TODO "bury some feels", // TODO
"delete feels by day", // TODO "delete feels by day", // TODO
"purge all feels", // TODO "purge all feels",
"wipe feels account", // TODO "wipe feels account",
}), }),
"↑↓/kj move ↵ enter q return", "↑↓/kj move ↵ enter q return",
} }
@ -51,10 +54,13 @@ func (management *Management) Event(state *ui.State, event vaxis.Event) (process
ui.ViewChange <- NewMainMenu() ui.ViewChange <- NewMainMenu()
case "Enter", "l", "Right": case "Enter", "l", "Right":
switch management.list.Index() { switch management.list.Index() {
case 0:
user, _ := user.Current()
ui.ViewChange <- NewUserPage(user.Username, true)
case 6: case 6:
management.Confirmation(state, func() {}, "feels purged") management.Confirmation(state, purgeFeels, "feels purged")
case 7: case 7:
management.Confirmation(state, func() {}, "feels account wiped") management.Confirmation(state, wipeAccount, "feels account wiped")
} }
} }
processed = true processed = true
@ -77,6 +83,19 @@ func (management *Management) Draw(state *ui.State) {
win.New(win.Width/2-15, win.Height/2+7, 30, 1).Print(vaxis.Segment{Text: management.help}) win.New(win.Width/2-15, win.Height/2+7, 30, 1).Print(vaxis.Segment{Text: management.help})
} }
func purgeFeels() {
ttbp.Unpublish()
os.RemoveAll(ttbp.PathUserEntries)
os.MkdirAll(ttbp.PathUserEntries, 0700)
}
func wipeAccount() {
// TODO: edit users.txt
ttbp.Unpublish()
os.RemoveAll(ttbp.PathUserFeels)
close(ui.Quit)
}
// TODO: abstract this to our own List type // TODO: abstract this to our own List type
// TODO: figure out a less janky way instead of nesting event channels // TODO: figure out a less janky way instead of nesting event channels
func (management *Management) Confirmation(state *ui.State, action func(), message string) { func (management *Management) Confirmation(state *ui.State, action func(), message string) {

View File

@ -81,7 +81,7 @@ func (neighbors *Neighbors) Event(state *ui.State, event vaxis.Event) (processed
neighbors.subscriptions.Write() neighbors.subscriptions.Write()
neighbors.list.SetItem(neighbors.list.Index(), formatNeighbor(user, neighbors.subscriptions)) neighbors.list.SetItem(neighbors.list.Index(), formatNeighbor(user, neighbors.subscriptions))
case "Enter", "l", "Right": case "Enter", "l", "Right":
ui.ViewChange <- NewUserPage(neighbors.neighbors[neighbors.list.Index()].Name) ui.ViewChange <- NewUserPage(neighbors.neighbors[neighbors.list.Index()].Name, false)
} }
processed = true processed = true
} }

View File

@ -69,7 +69,7 @@ func (subscriptions *Subscriptions) Event(state *ui.State, event vaxis.Event) (p
case "Enter", "l", "Right": case "Enter", "l", "Right":
if len(subscriptions.list.Items()) > 0 { if len(subscriptions.list.Items()) > 0 {
subscriptions.subscriptions.Write() subscriptions.subscriptions.Write()
ui.ViewChange <- NewUserPage(subscriptions.neighbors[subscriptions.list.Index()].Name) ui.ViewChange <- NewUserPage(subscriptions.neighbors[subscriptions.list.Index()].Name, false)
} }
} }
processed = true processed = true

View File

@ -18,9 +18,10 @@ type UserPage struct {
list ui.List list ui.List
help string help string
posts []ttbp.Post posts []ttbp.Post
self bool
} }
func NewUserPage(user string) *UserPage { func NewUserPage(user string, self bool) *UserPage {
posts := ttbp.GetPostsForUser(user) posts := ttbp.GetPostsForUser(user)
list := []string{} list := []string{}
for _, post := range posts { for _, post := range posts {
@ -36,6 +37,7 @@ func NewUserPage(user string) *UserPage {
ui.NewList(list), ui.NewList(list),
"↑↓/kj move ↵ enter q return", "↑↓/kj move ↵ enter q return",
posts, posts,
self,
} }
} }
@ -56,7 +58,11 @@ func (user *UserPage) Event(state *ui.State, event vaxis.Event) (processed bool)
i, _ := strconv.Atoi(key.String()) i, _ := strconv.Atoi(key.String())
user.list.SetIndex(i) user.list.SetIndex(i)
case "q", "h", "Left": case "q", "h", "Left":
ui.ViewChange <- NewNeighbors() if user.self {
ui.ViewChange <- NewManagement()
} else {
ui.ViewChange <- NewNeighbors()
}
case "Enter", "l", "Right": case "Enter", "l", "Right":
showPost(state, user.posts[user.list.Index()]) showPost(state, user.posts[user.list.Index()])
} }

View File

@ -36,8 +36,6 @@ press ↵ to set up an account, or Ctrl+c to quit. you can always come back late
input := bufio.NewScanner(os.Stdin) input := bufio.NewScanner(os.Stdin)
input.Scan() input.Scan()
println(ttbp.PathUserConfig, ttbp.PathUserFeels)
user, _ := user.Current() user, _ := user.Current()
header := strings.ReplaceAll(header, "%USER%", user.Username) header := strings.ReplaceAll(header, "%USER%", user.Username)
header = strings.ReplaceAll(header, "%DATETIME%", time.Now().Format(time.DateTime)) header = strings.ReplaceAll(header, "%DATETIME%", time.Now().Format(time.DateTime))

View File

@ -296,6 +296,17 @@ func Publish(t time.Time) {
// TODO: gopher // TODO: gopher
} }
func Unpublish() {
cfg, err := config.Read()
if err != nil {
return // TODO: expose
}
if cfg.Publishing {
os.RemoveAll(PathUserWWW)
os.RemoveAll(path.Join(PathUserHTML, cfg.PublishDir))
}
}
func writePage(post Post, header, footer []byte) { func writePage(post Post, header, footer []byte) {
dateString := post.Date.Format("20060102.html") dateString := post.Date.Format("20060102.html")
file, err := os.Create(path.Join(PathUserWWW, dateString)) file, err := os.Create(path.Join(PathUserWWW, dateString))