In my true love's dying breath, she whispered to me 'never commit with descriptive messages'. So I kept her promise.
This commit is contained in:
75
main.go
75
main.go
@@ -21,7 +21,6 @@ import (
|
||||
"encoding/xml"
|
||||
"runtime"
|
||||
|
||||
"github.com/kr/pretty"
|
||||
)
|
||||
|
||||
var loadedConfig lambdaConfig
|
||||
@@ -31,11 +30,13 @@ var empty_dialog *gtk.Label
|
||||
// var msgs *gtk.ListBox
|
||||
var content *gtk.Widgetter
|
||||
|
||||
var tabs map[string]*chatTab = make(map[string]*chatTab)
|
||||
// var tabs map[string]*chatTab = make(map[string]*chatTab)
|
||||
var tabs sync.Map
|
||||
var current string
|
||||
|
||||
var scroller *gtk.ScrolledWindow
|
||||
var memberList *gtk.ScrolledWindow
|
||||
var menu *gtk.Box
|
||||
|
||||
//go:embed style.css
|
||||
var styleCSS string
|
||||
@@ -47,6 +48,9 @@ var uiQueue = make(chan func(), 100)
|
||||
// stores members of mucs
|
||||
var mucmembers sync.Map
|
||||
|
||||
// stores devices of users
|
||||
var userdevices sync.Map
|
||||
|
||||
func init() {
|
||||
go func() {
|
||||
for fn := range uiQueue {
|
||||
@@ -154,10 +158,11 @@ func main() {
|
||||
b = ba
|
||||
}
|
||||
|
||||
_, ok = tabs[originator]
|
||||
tab, ok := tabs.Load(originator)
|
||||
typed_tab := tab.(*chatTab)
|
||||
|
||||
if ok {
|
||||
tabs[originator].msgs.Append(b)
|
||||
typed_tab.msgs.Append(b)
|
||||
scrollToBottomAfterUpdate(scroller)
|
||||
} else {
|
||||
fmt.Println("Got message when the tab does not exist!")
|
||||
@@ -172,7 +177,10 @@ func main() {
|
||||
return
|
||||
}
|
||||
|
||||
pretty.Println(presence)
|
||||
if presence.Error != *new(stanza.Err) {
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
var mu MucUser
|
||||
var ocu OccupantID
|
||||
@@ -193,22 +201,48 @@ func main() {
|
||||
}
|
||||
|
||||
typed_unit := unit.(mucUnit)
|
||||
/*
|
||||
if typed_unit.Members == nil {
|
||||
typed_unit.Members = make(map[string]stanza.Presence)
|
||||
mucmembers.Store(muc, typed_unit)
|
||||
}
|
||||
*/
|
||||
|
||||
if presence.Type != "unavailable" {
|
||||
typed_unit.Members.Store(ocu.ID, presence)
|
||||
} else {
|
||||
typed_unit.Members.Delete(ocu.ID)
|
||||
// delete(typed_unit.Members, ocu.ID)
|
||||
}
|
||||
|
||||
mucmembers.Store(muc, typed_unit)
|
||||
|
||||
} else { // This is a presence stanza from a regular user
|
||||
// The code is basically the exact same as above, we just don't check for mucuser
|
||||
user := jid.MustParse(presence.From).Bare().String()
|
||||
_, ok := userdevices.Load(user)
|
||||
if !ok {
|
||||
userdevices.Store(user, userUnit{})
|
||||
createTab(user, false)
|
||||
|
||||
b := gtk.NewButtonWithLabel(user)
|
||||
b.ConnectClicked(func() {
|
||||
b.AddCSSClass("accent")
|
||||
switchToTab(user)
|
||||
})
|
||||
menu.Append(b)
|
||||
}
|
||||
|
||||
unit, ok := userdevices.Load(user)
|
||||
if !ok {
|
||||
fmt.Println("Could not load user presence even after recreating it! Something weird is going on!")
|
||||
return
|
||||
}
|
||||
|
||||
resource := jid.MustParse(presence.From).Resourcepart()
|
||||
|
||||
typed_unit := unit.(userUnit)
|
||||
|
||||
if presence.Type != "unavailable" {
|
||||
typed_unit.Devices.Store(resource, presence)
|
||||
} else {
|
||||
typed_unit.Devices.Delete(resource)
|
||||
}
|
||||
|
||||
userdevices.Store(user, typed_unit)
|
||||
}
|
||||
})
|
||||
|
||||
@@ -257,7 +291,7 @@ func activate(app *gtk.Application) {
|
||||
|
||||
window.SetTitle("Lambda")
|
||||
window.Window.AddCSSClass("ssd")
|
||||
menu := gtk.NewBox(gtk.OrientationHorizontal, 0)
|
||||
menu = gtk.NewBox(gtk.OrientationHorizontal, 0)
|
||||
/*
|
||||
f_menu := gtk.NewMenuButton()
|
||||
f_menu.SetLabel("File")
|
||||
@@ -323,7 +357,18 @@ func activate(app *gtk.Application) {
|
||||
dialog.Choose(context.TODO(), &window.Window, nil)
|
||||
}
|
||||
|
||||
err := sendMessage(client, current, stanza.MessageTypeGroupchat, t, "", "")
|
||||
message_type := stanza.MessageTypeChat
|
||||
tab, ok := tabs.Load(current)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
typed_tab := tab.(*chatTab)
|
||||
if typed_tab.isMuc {
|
||||
message_type = stanza.MessageTypeGroupchat
|
||||
}
|
||||
|
||||
err := sendMessage(client, current, message_type, t, "", "")
|
||||
if err != nil {
|
||||
panic(err) // TODO: Show error message via GTK
|
||||
}
|
||||
@@ -348,7 +393,7 @@ func activate(app *gtk.Application) {
|
||||
|
||||
debug_btn.ConnectClicked(func() {
|
||||
t := en.Text()
|
||||
_, ok := tabs[t]
|
||||
_, ok := tabs.Load(t)
|
||||
if !ok {
|
||||
err := joinMuc(client, clientroot.Session.BindJid, t, m_entry.Text())
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user