start work on user management
This commit is contained in:
		
							parent
							
								
									c71a473d55
								
							
						
					
					
						commit
						f2804c1fc9
					
				@ -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) {
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										10
									
								
								app/user.go
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								app/user.go
									
									
									
									
									
								
							@ -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()])
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								main.go
									
									
									
									
									
								
							@ -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))
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										11
									
								
								ttbp/ttbp.go
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								ttbp/ttbp.go
									
									
									
									
									
								
							@ -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))
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user