forked from cwtch.im/cwtch
Adding a tui app that allows chat for an imported group
This commit is contained in:
parent
ce33f23a2e
commit
0ef06428ed
|
@ -0,0 +1,89 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"time"
|
||||||
|
"cwtch.im/cwtch/peer"
|
||||||
|
"github.com/marcusolsson/tui-go"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
|
||||||
|
log.SetOutput(ioutil.Discard)
|
||||||
|
peer := peer.NewCwtchPeer("cwtchbot")
|
||||||
|
groupID, err := peer.ImportGroup(os.Args[1])
|
||||||
|
peer.AcceptInvite(groupID)
|
||||||
|
group := peer.Profile.GetGroupByGroupID(groupID)
|
||||||
|
peer.JoinServer(group.GroupServer)
|
||||||
|
|
||||||
|
history := tui.NewVBox()
|
||||||
|
historyScroll := tui.NewScrollArea(history)
|
||||||
|
historyScroll.SetAutoscrollToBottom(true)
|
||||||
|
|
||||||
|
historyBox := tui.NewVBox(historyScroll)
|
||||||
|
historyBox.SetBorder(true)
|
||||||
|
historyBox.SetTitle("cwtch chat:" + group.GroupID + "@" + group.GroupServer)
|
||||||
|
|
||||||
|
input := tui.NewEntry()
|
||||||
|
input.SetFocused(true)
|
||||||
|
input.SetSizePolicy(tui.Expanding, tui.Maximum)
|
||||||
|
|
||||||
|
inputBox := tui.NewHBox(input)
|
||||||
|
inputBox.SetBorder(true)
|
||||||
|
inputBox.SetSizePolicy(tui.Expanding, tui.Maximum)
|
||||||
|
|
||||||
|
chat := tui.NewVBox(historyBox, inputBox)
|
||||||
|
chat.SetSizePolicy(tui.Expanding, tui.Expanding)
|
||||||
|
|
||||||
|
input.OnSubmit(func(e *tui.Entry) {
|
||||||
|
if strings.Trim(e.Text(), " ") != "" {
|
||||||
|
go peer.SendMessageToGroup(groupID, e.Text())
|
||||||
|
e.SetText("")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
seen := make(map[string]bool)
|
||||||
|
|
||||||
|
root := tui.NewHBox(chat)
|
||||||
|
|
||||||
|
ui, err := tui.New(root)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
ui.SetKeybinding("Esc", func() { ui.Quit() })
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
group = peer.Profile.GetGroupByGroupID(groupID)
|
||||||
|
if group == nil {
|
||||||
|
log.Fatalf("group does not exist")
|
||||||
|
}
|
||||||
|
timeline := group.GetTimeline()
|
||||||
|
for _, m := range timeline {
|
||||||
|
old, _ := seen[string(m.Signature)]
|
||||||
|
if !old {
|
||||||
|
|
||||||
|
ui.Update(func() {
|
||||||
|
history.Append(tui.NewHBox(
|
||||||
|
tui.NewLabel(m.Timestamp.Format("15:04")),
|
||||||
|
tui.NewPadder(1, 0, tui.NewLabel(fmt.Sprintf("<%s>", m.PeerID))),
|
||||||
|
tui.NewLabel(m.Message),
|
||||||
|
tui.NewSpacer(),
|
||||||
|
))
|
||||||
|
})
|
||||||
|
seen[string(m.Signature)] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
time.Sleep(time.Second * 5)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
if err := ui.Run(); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue