add subscriptions viewer
This commit is contained in:
		
							parent
							
								
									4ca3c30ee7
								
							
						
					
					
						commit
						012e1aacca
					
				
							
								
								
									
										17
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								README.md
									
									
									
									
									
								
							@ -14,16 +14,15 @@ make
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- [x] main menu
 | 
					- [x] main menu
 | 
				
			||||||
- [x] credits
 | 
					- [x] credits
 | 
				
			||||||
- [ ] feels browser
 | 
					- [x] feels browser
 | 
				
			||||||
- [ ] configuration editor
 | 
					- [x] configuration editor
 | 
				
			||||||
- [x] feels publishing
 | 
					- [ ] feels manager
 | 
				
			||||||
 | 
					- [ ] feels publishing
 | 
				
			||||||
 | 
					  - [x] plaintext
 | 
				
			||||||
 | 
					  - [ ] html
 | 
				
			||||||
 | 
					  - [ ] gopher
 | 
				
			||||||
- [ ] graffiti
 | 
					- [ ] graffiti
 | 
				
			||||||
- [ ] feedback
 | 
					- [x] documentation with manpages
 | 
				
			||||||
- [ ] documentation with manpages
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
nice-to-haves:
 | 
					 | 
				
			||||||
- [ ] mouse support
 | 
					 | 
				
			||||||
- [ ] image support via sixels
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
## contributing
 | 
					## contributing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -32,8 +32,8 @@ func NewMainMenu() *MainMenu {
 | 
				
			|||||||
			"manage your feels",
 | 
								"manage your feels",
 | 
				
			||||||
			"check out your neighbors",
 | 
								"check out your neighbors",
 | 
				
			||||||
			"browse global feels",
 | 
								"browse global feels",
 | 
				
			||||||
			"visit your subscriptions", // TODO
 | 
								"visit your subscriptions",
 | 
				
			||||||
			"scribble some graffiti",   // TODO
 | 
								"scribble some graffiti", // TODO
 | 
				
			||||||
			"change your settings",
 | 
								"change your settings",
 | 
				
			||||||
			"see credits",
 | 
								"see credits",
 | 
				
			||||||
			"read documentation",
 | 
								"read documentation",
 | 
				
			||||||
@ -68,6 +68,8 @@ func (menu *MainMenu) Event(state *ui.State, event vaxis.Event) (processed bool)
 | 
				
			|||||||
				ui.ViewChange <- NewNeighbors()
 | 
									ui.ViewChange <- NewNeighbors()
 | 
				
			||||||
			case 3:
 | 
								case 3:
 | 
				
			||||||
				ui.ViewChange <- NewBrowse()
 | 
									ui.ViewChange <- NewBrowse()
 | 
				
			||||||
 | 
								case 4:
 | 
				
			||||||
 | 
									ui.ViewChange <- NewSubscriptions()
 | 
				
			||||||
			case 6:
 | 
								case 6:
 | 
				
			||||||
				ui.ViewChange <- NewConfig()
 | 
									ui.ViewChange <- NewConfig()
 | 
				
			||||||
			case 7:
 | 
								case 7:
 | 
				
			||||||
 | 
				
			|||||||
@ -78,6 +78,7 @@ func (neighbors *Neighbors) Event(state *ui.State, event vaxis.Event) (processed
 | 
				
			|||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				neighbors.subscriptions.Subscribe(user)
 | 
									neighbors.subscriptions.Subscribe(user)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								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)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										92
									
								
								app/subscriptions.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								app/subscriptions.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,92 @@
 | 
				
			|||||||
 | 
					package app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"strconv"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"git.sr.ht/~rockorager/vaxis"
 | 
				
			||||||
 | 
						"git.tilde.town/nbsp/neofeels/ttbp"
 | 
				
			||||||
 | 
						"git.tilde.town/nbsp/neofeels/ui"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Subscriptions struct {
 | 
				
			||||||
 | 
						title         string
 | 
				
			||||||
 | 
						list          ui.List
 | 
				
			||||||
 | 
						help          string
 | 
				
			||||||
 | 
						neighbors     []ttbp.User
 | 
				
			||||||
 | 
						subscriptions *ttbp.Subscriptions
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewSubscriptions() *Subscriptions {
 | 
				
			||||||
 | 
						users := ttbp.SortUsersByRecent(ttbp.GetUsers())
 | 
				
			||||||
 | 
						subscriptions := ttbp.GetSubscriptions()
 | 
				
			||||||
 | 
						list := []string{}
 | 
				
			||||||
 | 
						for _, user := range users {
 | 
				
			||||||
 | 
							if subscriptions.IsSubscribed(user) {
 | 
				
			||||||
 | 
								list = append(list, formatNeighbor(user, subscriptions))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &Subscriptions{
 | 
				
			||||||
 | 
							title,
 | 
				
			||||||
 | 
							ui.NewList(list),
 | 
				
			||||||
 | 
							"↑↓/kj move  ↵ enter  s subscribe  q return",
 | 
				
			||||||
 | 
							users,
 | 
				
			||||||
 | 
							subscriptions,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (subscriptions *Subscriptions) Event(state *ui.State, event vaxis.Event) (processed bool) {
 | 
				
			||||||
 | 
						if key, ok := event.(vaxis.Key); ok && key.EventType == vaxis.EventPress {
 | 
				
			||||||
 | 
							switch key.String() {
 | 
				
			||||||
 | 
							case "Ctrl+c", "Ctrl+d":
 | 
				
			||||||
 | 
								close(ui.Quit)
 | 
				
			||||||
 | 
							case "Down", "j":
 | 
				
			||||||
 | 
								subscriptions.list.Down()
 | 
				
			||||||
 | 
							case "Up", "k":
 | 
				
			||||||
 | 
								subscriptions.list.Up()
 | 
				
			||||||
 | 
							case "End", "Shift+g":
 | 
				
			||||||
 | 
								subscriptions.list.End()
 | 
				
			||||||
 | 
							case "Home", "g":
 | 
				
			||||||
 | 
								subscriptions.list.Home()
 | 
				
			||||||
 | 
							case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9":
 | 
				
			||||||
 | 
								i, _ := strconv.Atoi(key.String())
 | 
				
			||||||
 | 
								subscriptions.list.SetIndex(i)
 | 
				
			||||||
 | 
							case "q", "h", "Left":
 | 
				
			||||||
 | 
								subscriptions.subscriptions.Write()
 | 
				
			||||||
 | 
								ui.ViewChange <- NewMainMenu()
 | 
				
			||||||
 | 
							case "s":
 | 
				
			||||||
 | 
								if len(subscriptions.list.Items()) > 0 {
 | 
				
			||||||
 | 
									user := subscriptions.neighbors[subscriptions.list.Index()]
 | 
				
			||||||
 | 
									if subscriptions.subscriptions.IsSubscribed(user) {
 | 
				
			||||||
 | 
										subscriptions.subscriptions.Unsubscribe(user)
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										subscriptions.subscriptions.Subscribe(user)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									subscriptions.list.SetItem(subscriptions.list.Index(), formatNeighbor(user, subscriptions.subscriptions))
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							case "Enter", "l", "Right":
 | 
				
			||||||
 | 
								subscriptions.subscriptions.Write()
 | 
				
			||||||
 | 
								ui.ViewChange <- NewUserPage(subscriptions.neighbors[subscriptions.list.Index()].Name)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							processed = true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						subscriptions.Draw(state)
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (subscriptions *Subscriptions) Draw(state *ui.State) {
 | 
				
			||||||
 | 
						win := state.Window()
 | 
				
			||||||
 | 
						win.New(win.Width/2-10, win.Height/2-8, 20, 5).Print(vaxis.Segment{Text: subscriptions.title})
 | 
				
			||||||
 | 
						subscriptions.list.Draw(vaxis.Window{
 | 
				
			||||||
 | 
							Vx:     win.Vx,
 | 
				
			||||||
 | 
							Parent: nil,
 | 
				
			||||||
 | 
							Column: win.Width/2 - 40,
 | 
				
			||||||
 | 
							Row:    win.Height/2 - 2,
 | 
				
			||||||
 | 
							Width:  80,
 | 
				
			||||||
 | 
							Height: 10,
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						if len(subscriptions.list.Items()) == 0 {
 | 
				
			||||||
 | 
							win.New(win.Width/2-22, win.Height/2-1, 44, 2).Print(vaxis.Segment{Text: "no subscriptions yet\nvisit your neighbors to subscribe to them!"})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						win.New(win.Width/2-22, win.Height/2+9, 44, 1).Print(vaxis.Segment{Text: subscriptions.help})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -171,20 +171,18 @@ func (subscriptions *Subscriptions) IsSubscribed(user User) bool {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (subscriptions *Subscriptions) Subscribe(user User) {
 | 
					func (subscriptions *Subscriptions) Subscribe(user User) {
 | 
				
			||||||
	subscriptions.users = append(subscriptions.users, user.Name)
 | 
						subscriptions.users = append(subscriptions.users, user.Name)
 | 
				
			||||||
	subscriptions.write()
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (subscriptions *Subscriptions) Unsubscribe(user User) {
 | 
					func (subscriptions *Subscriptions) Unsubscribe(user User) {
 | 
				
			||||||
	for i, sub := range subscriptions.users {
 | 
						for i, sub := range subscriptions.users {
 | 
				
			||||||
		if sub == user.Name {
 | 
							if sub == user.Name {
 | 
				
			||||||
			subscriptions.users = append(subscriptions.users[:i], subscriptions.users[i+1:]...)
 | 
								subscriptions.users = append(subscriptions.users[:i], subscriptions.users[i+1:]...)
 | 
				
			||||||
			subscriptions.write()
 | 
					 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (subscriptions *Subscriptions) write() {
 | 
					func (subscriptions *Subscriptions) Write() {
 | 
				
			||||||
	file, err := os.Create(path.Join(os.Getenv("HOME"), ".ttbp/config/subs"))
 | 
						file, err := os.Create(path.Join(os.Getenv("HOME"), ".ttbp/config/subs"))
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user