Fix lag issues

This commit is contained in:
2026-04-30 14:55:17 +01:00
parent 7b63799f0b
commit 0bfb140dc7
5 changed files with 223 additions and 70 deletions
+83 -53
View File
@@ -219,7 +219,9 @@ func main() {
*/
originator := JidMustParse(m.From).Bare()
mStatus.SetText(originator)
glib.IdleAdd(func() {
mStatus.SetText(originator)
})
at := new(Attention)
ok = m.Get(at)
@@ -280,7 +282,6 @@ func main() {
}
glib.IdleAdd(func() {
//uiQueue <- func() {
b := gtk.NewBox(gtk.OrientationVertical, 0)
tab, ok := tabs.Load(originator)
@@ -303,7 +304,6 @@ func main() {
if ok {
b.Append(ba)
}
//}
})
})
@@ -464,11 +464,13 @@ func main() {
return
}
_ = <-mychan
pingStatus.RemoveCSSClass("pending")
delay := time.Since(before) / time.Millisecond
pingStatus.SetText(fmt.Sprintf("%d %s", delay, loadedLocale["milliseconds"]))
pingTimes[0] = append(pingTimes[0], float64(delay))
glib.IdleAdd(func() {
pingStatus.RemoveCSSClass("pending")
pingStatus.SetText(fmt.Sprintf("%d %s", delay, loadedLocale["milliseconds"]))
})
}()
}
@@ -480,28 +482,30 @@ func main() {
go func() {
for {
time.Sleep(1 * time.Second)
stat, err := xmlLog.Stat()
if err != nil {
panic(err)
}
glib.IdleAdd(func() {
stat, err := xmlLog.Stat()
if err != nil {
panic(err)
}
newsize = stat.Size()
diff := float64(newsize-oldsize) / 1000
newsize = stat.Size()
diff := float64(newsize-oldsize) / 1000
if diff > 100 {
sIcon.SetFromPaintable(clientAssets["car_high"])
} else {
sIcon.SetFromPaintable(clientAssets["car"])
}
sStatus.SetText(fmt.Sprintf("%.2f%s", diff, loadedLocale["KBPerSecond"]))
oldsize = stat.Size()
ic := clientAssets["car"]
if diff >= 25 {
ic = clientAssets["car_high"]
}
sStatus.SetText(fmt.Sprintf("%.2f%s", diff, loadedLocale["KBPerSecond"]))
sIcon.SetFromPaintable(ic)
})
}
}()
connectionStatus.SetText(fmt.Sprintf("%s%s", loadedLocale["connectedAs"], JidMustParse(clientroot.Session.BindJid).Bare()))
connectionStatus.SetTooltipText(fmt.Sprintf("%s%s\n%s%t", loadedLocale["bindedJid"], clientroot.Session.BindJid, loadedLocale["usingTLS"], clientroot.Session.TlsEnabled))
connectionIcon.SetFromPaintable(clientAssets["connect"])
glib.IdleAdd(func() {
connectionStatus.SetText(fmt.Sprintf("%s%s", loadedLocale["connectedAs"], JidMustParse(clientroot.Session.BindJid).Bare()))
connectionStatus.SetTooltipText(fmt.Sprintf("%s%s\n%s%t", loadedLocale["bindedJid"], clientroot.Session.BindJid, loadedLocale["usingTLS"], clientroot.Session.TlsEnabled))
connectionIcon.SetFromPaintable(clientAssets["connect"])
})
// Enable carbons
client.SendRaw(fmt.Sprintf(
`<iq xmlns='jabber:client'
@@ -526,6 +530,8 @@ func main() {
node := item.Any
autojoin := false
name := ""
password := ""
nick := loadedConfig.Nick
for _, attr := range node.Attrs {
if attr.Name.Local == "autojoin" {
autojoin = attr.Value == "true"
@@ -540,27 +546,6 @@ func main() {
}
}
_, ok := tabs.Load(jid)
if !ok && autojoin {
createTab(jid, true, name)
b := gtk.NewLabel(jid)
gesture1 := gtk.NewGestureClick()
gesture1.SetButton(1)
gesture1.Connect("pressed", func() {
switchToTab(jid, &window.Window)
})
b.AddController(gesture1)
menu.Append(b)
}
}
for _, item := range res.Items.List {
jid := item.Id
node := item.Any
autojoin := false
nick := loadedConfig.Nick
for _, attr := range node.Attrs {
if attr.Name.Local == "autojoin" {
autojoin = attr.Value == "true"
@@ -575,22 +560,40 @@ func main() {
}
}
if autojoin {
err := joinMuc(client, clientroot.Session.BindJid, jid, nick, "")
if err != nil {
panic(err)
for _, node := range node.Nodes {
if node.XMLName.Local == "password" {
password = node.Content
break
}
}
_, ok := tabs.Load(jid)
if !ok && autojoin {
joinMuc(client, clientroot.Session.BindJid, jid, nick, password)
createTab(jid, true, name)
glib.IdleAdd(func() {
b := gtk.NewLabel(jid)
gesture1 := gtk.NewGestureClick()
gesture1.SetButton(1)
gesture1.Connect("pressed", func() {
switchToTab(jid, &window.Window)
})
b.AddController(gesture1)
menu.Append(b)
})
}
}
}
}
}
}
})
conc := func() {
time.Sleep(3 * time.Second)
// time.Sleep(3 * time.Second)
connectionStatus.SetText(loadedLocale["connecting"])
connectionIcon.SetFromPaintable(clientAssets["hourglass"])
@@ -604,8 +607,8 @@ func main() {
app := gtk.NewApplication("net.sunglocto.lambda", gio.ApplicationFlagsNone)
app.ConnectActivate(func() {
go conc()
activate(app)
go conc()
})
if code := app.Run(os.Args); code > 0 {
@@ -633,8 +636,26 @@ func activate(app *gtk.Application) {
aboutAction := gio.NewSimpleAction("about", nil)
aboutAction.ConnectActivate(func(p *glib.Variant) {
a := gtk.AboutDialog{}
a.SetVisible(true)
a := gtk.NewAboutDialog()
about_window := gtk.NewWindow()
about_window.SetTransientFor(&window.Window)
about_window.SetTitle(fmt.Sprintf("%s %s", "About", loadedLocale["appName"]))
a.SetProgramName("Lambda")
a.SetVersion(lambda_version)
a.SetComments("yet another XMPP client")
a.SetAuthors([]string{"Sunglocto"})
a.SetLicense("GPL3")
a.SetWebsite("https://forge.sunglocto.net/sunglocto/lambda")
a.SetWebsiteLabel("Website")
/*
a.ConnectResponse(func() {
about_window.SetVisible(false)
})
*/
about_window.SetChild(a)
about_window.SetDefaultSize(400, 300)
about_window.SetVisible(true)
})
destroymucAction := gio.NewSimpleAction("destroymuc", nil)
@@ -743,7 +764,16 @@ func activate(app *gtk.Application) {
nick_entry.SetText(loadedConfig.Nick)
create_jid := gtk.NewImageFromPaintable(clientAssets["jabber"])
gesture := gtk.NewGestureClick()
gesture.SetButton(1)
gesture.Connect("pressed", func() {
jidBuilder(jid_entry)
})
create_jid.AddController(gesture)
jid_box.Append(gtk.NewLabel(loadedLocale["joinMUCJIDEntry"]))
jid_box.Append(create_jid)
jid_box.Append(jid_entry)
nick_box.Append(gtk.NewLabel(loadedLocale["joinMUCNickEntry"]))
@@ -946,7 +976,7 @@ func activate(app *gtk.Application) {
app.AddAction(aboutAction)
app.AddAction(destroymucAction)
the_menu.AppendSubmenu("File", fileMenu)
the_menu.AppendSubmenu("MUC", fileMenu)
the_menu.AppendSubmenu("Help", helpMenu)
the_menuBar := gtk.NewPopoverMenuBarFromModel(the_menu)