Add basic member lists, fixes #8
This commit is contained in:
81
main.go
81
main.go
@@ -67,6 +67,7 @@ type ChatTab struct {
|
||||
isMuc bool
|
||||
Muc *muc.Channel
|
||||
UpdateSidebar bool
|
||||
Members map[string]oasisSdk.UserPresence
|
||||
}
|
||||
|
||||
type ChatTabUI struct {
|
||||
@@ -333,6 +334,7 @@ func addChatTab(isMuc bool, chatJid jid.JID, nick string) {
|
||||
Nick: nick,
|
||||
Messages: []Message{},
|
||||
isMuc: isMuc,
|
||||
Members: make(map[string]oasisSdk.UserPresence),
|
||||
}
|
||||
|
||||
myUITab := CreateUITab(chatJid.String())
|
||||
@@ -647,20 +649,32 @@ func main() {
|
||||
})
|
||||
|
||||
client.SetPresenceHandler(func(client *oasisSdk.XmppClient, from jid.JID, p oasisSdk.UserPresence) {
|
||||
fmt.Println(p, p.Indicator, p.Status)
|
||||
bareAcc := from.Bare()
|
||||
tab, ok := chatTabs[bareAcc.String()]
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
if tab.isMuc {
|
||||
tab.Members[from.String()] = p
|
||||
}
|
||||
})
|
||||
|
||||
client.SetBookmarkHandler(false, func(client *oasisSdk.XmppClient, bookmark bookmarks.Channel) {
|
||||
// FIXME
|
||||
if bookmark.JID.String() == "conversations-offtopic-reloaded@conference.trashserver.net" {
|
||||
return
|
||||
}
|
||||
if bookmark.Autojoin {
|
||||
if bookmark.Nick == "" {
|
||||
bookmark.Nick = client.Login.DisplayName
|
||||
}
|
||||
addChatTab(true, bookmark.JID, client.Login.DisplayName)
|
||||
_, err := client.ConnectMuc(bookmark, oasisSdk.MucLegacyHistoryConfig{}, context.TODO())
|
||||
if err != nil {
|
||||
fmt.Println("ERROR: " + err.Error())
|
||||
return
|
||||
}
|
||||
addChatTab(true, bookmark.JID, client.Login.DisplayName)
|
||||
}
|
||||
})
|
||||
client.SetDeliveryReceiptHandler(
|
||||
@@ -951,7 +965,7 @@ func main() {
|
||||
}, w)
|
||||
})
|
||||
|
||||
leaveRoom := fyne.NewMenuItem("Leave current room (experimental)", func() {
|
||||
leaveRoom := fyne.NewMenuItem("Leave current room", func() {
|
||||
selectedScroller, ok := AppTabs.Selected().Content.(*widget.List)
|
||||
if !ok {
|
||||
return
|
||||
@@ -991,20 +1005,20 @@ func main() {
|
||||
dialog.ShowError(err, w)
|
||||
return
|
||||
}
|
||||
joinjid, err := myjid.WithResource(login.DisplayName)
|
||||
if err != nil {
|
||||
d.Hide()
|
||||
dialog.ShowError(err, w)
|
||||
return
|
||||
}
|
||||
ch, err := client.MucClient.Join(client.Ctx, joinjid, client.Session)
|
||||
if err != nil {
|
||||
d.Hide()
|
||||
dialog.ShowError(err, w)
|
||||
return
|
||||
}
|
||||
client.MucChannels[s] = ch
|
||||
|
||||
mychannel := new(bookmarks.Channel)
|
||||
mychannel.JID = myjid
|
||||
mychannel.Nick = login.DisplayName
|
||||
//ch, err := client.MucClient.Join(client.Ctx, joinjid, client.Session)
|
||||
addChatTab(true, myjid, login.DisplayName)
|
||||
num := uint64(0)
|
||||
_, err = client.ConnectMuc(*mychannel, oasisSdk.MucLegacyHistoryConfig{MaxCount: &num}, context.TODO())
|
||||
if err != nil {
|
||||
d.Hide()
|
||||
dialog.ShowError(err, w)
|
||||
return
|
||||
}
|
||||
//client.MucChannels[s] = ch
|
||||
d.Hide()
|
||||
}()
|
||||
}, w)
|
||||
@@ -1365,14 +1379,41 @@ func main() {
|
||||
}
|
||||
|
||||
chatSidebar = *UITab.Sidebar
|
||||
old := chatSidebar.Position()
|
||||
box := container.NewVBox(widget.NewRichTextFromMarkdown("# "+activeChatJid), widget.NewLabel(fmt.Sprintf("%d members ", len(tab.Members))))
|
||||
chatSidebar.Objects = []fyne.CanvasObject{}
|
||||
|
||||
for name := range tab.Members {
|
||||
gen, _ := identicon.New("github", 5, 3)
|
||||
userjid, err := jid.Parse(name)
|
||||
if err != nil {
|
||||
fmt.Println("ERROR: " + err.Error())
|
||||
continue // unrecoverable
|
||||
}
|
||||
nickname := userjid.Resourcepart()
|
||||
ii, err := gen.Draw(nickname)
|
||||
mention := func() {
|
||||
entry.SetText(fmt.Sprintf("%s %s", entry.Text, nickname))
|
||||
}
|
||||
if err != nil {
|
||||
fmt.Println("ERROR: " + err.Error())
|
||||
box.Add(container.NewHBox(widget.NewLabel(nickname), widget.NewButton("Mention", mention)))
|
||||
} else {
|
||||
im := ii.Image(25)
|
||||
imageWidget := canvas.NewImageFromImage(im)
|
||||
imageWidget.FillMode = canvas.ImageFillOriginal
|
||||
imageWidget.Refresh()
|
||||
box.Add(container.NewHBox(imageWidget, widget.NewLabel(nickname), widget.NewButton("Mention", mention)))
|
||||
}
|
||||
|
||||
}
|
||||
chatSidebar = *container.NewGridWithColumns(1, container.NewVScroll(box))
|
||||
chatSidebar.Refresh()
|
||||
chatSidebar.Move(old)
|
||||
|
||||
}
|
||||
|
||||
// HACK - disable chatsidebar because it's currently very buggy
|
||||
chatSidebar.Hidden = true
|
||||
chatSidebar.Hidden = false
|
||||
statBar.SetText("")
|
||||
w.SetContent(container.NewVSplit(container.NewVSplit(AppTabs, container.NewHSplit(entry, container.NewGridWithRows(1, sendbtn, replybtn))), container.NewHSplit(&statBar, &chatInfo)))
|
||||
w.SetContent(container.NewVSplit(container.NewVSplit(container.NewHSplit(AppTabs, &chatSidebar), container.NewHSplit(entry, container.NewGridWithRows(1, sendbtn, replybtn))), container.NewHSplit(&statBar, &chatInfo)))
|
||||
w.ShowAndRun()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user