better memory efficiency, bug fixes
This commit is contained in:
parent
5151d47427
commit
bcd2de2e49
2
go.mod
2
go.mod
|
@ -2,7 +2,7 @@ module github.com/diamondburned/cchat-gtk
|
||||||
|
|
||||||
go 1.14
|
go 1.14
|
||||||
|
|
||||||
replace github.com/gotk3/gotk3 => github.com/diamondburned/gotk3 v0.0.0-20201230071527-a77c32eb3876
|
replace github.com/gotk3/gotk3 => github.com/diamondburned/gotk3 v0.0.0-20210103063209-2bfa1d9dd9a6
|
||||||
|
|
||||||
// replace github.com/diamondburned/cchat-discord => ../cchat-discord
|
// replace github.com/diamondburned/cchat-discord => ../cchat-discord
|
||||||
// replace github.com/diamondburned/gotk3-tcmalloc => ../../gotk3-tcmalloc
|
// replace github.com/diamondburned/gotk3-tcmalloc => ../../gotk3-tcmalloc
|
||||||
|
|
2
go.sum
2
go.sum
|
@ -106,6 +106,8 @@ github.com/diamondburned/gotk3 v0.0.0-20201229104206-9bea3709a385 h1:nmlMCeEWmT6
|
||||||
github.com/diamondburned/gotk3 v0.0.0-20201229104206-9bea3709a385/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
|
github.com/diamondburned/gotk3 v0.0.0-20201229104206-9bea3709a385/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
|
||||||
github.com/diamondburned/gotk3 v0.0.0-20201230071527-a77c32eb3876 h1:8Hacuan9iBgoYyjJFYOP/TgghY4QWxT70qoV5NFGKmc=
|
github.com/diamondburned/gotk3 v0.0.0-20201230071527-a77c32eb3876 h1:8Hacuan9iBgoYyjJFYOP/TgghY4QWxT70qoV5NFGKmc=
|
||||||
github.com/diamondburned/gotk3 v0.0.0-20201230071527-a77c32eb3876/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
|
github.com/diamondburned/gotk3 v0.0.0-20201230071527-a77c32eb3876/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
|
||||||
|
github.com/diamondburned/gotk3 v0.0.0-20210103063209-2bfa1d9dd9a6 h1:dJwNpjlgUP3YTPll5LvqyhpuaBPjITUuDes7Wq8HrTM=
|
||||||
|
github.com/diamondburned/gotk3 v0.0.0-20210103063209-2bfa1d9dd9a6/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
|
||||||
github.com/diamondburned/gspell v0.0.0-20200830182722-77e5d27d6894 h1:QgI21deaQbCUMnxKkQQUXzQolnAe1dMIXAWwqAyOp2g=
|
github.com/diamondburned/gspell v0.0.0-20200830182722-77e5d27d6894 h1:QgI21deaQbCUMnxKkQQUXzQolnAe1dMIXAWwqAyOp2g=
|
||||||
github.com/diamondburned/gspell v0.0.0-20200830182722-77e5d27d6894/go.mod h1:IoyMxPKSJOMoP0BiBuFwf2RDMeA4Uqx0HPKN5BzqTtA=
|
github.com/diamondburned/gspell v0.0.0-20200830182722-77e5d27d6894/go.mod h1:IoyMxPKSJOMoP0BiBuFwf2RDMeA4Uqx0HPKN5BzqTtA=
|
||||||
github.com/diamondburned/gspell v0.0.0-20201229064336-e43698fd5828 h1:Lm1F+GwrDdAaaMzrR7AYl4GGd/T+FE2OgOz25QWwsIg=
|
github.com/diamondburned/gspell v0.0.0-20201229064336-e43698fd5828 h1:Lm1F+GwrDdAaaMzrR7AYl4GGd/T+FE2OgOz25QWwsIg=
|
||||||
|
|
|
@ -13,7 +13,7 @@ import (
|
||||||
|
|
||||||
// BacklogLimit is the maximum number of messages to store in the container at
|
// BacklogLimit is the maximum number of messages to store in the container at
|
||||||
// once.
|
// once.
|
||||||
const BacklogLimit = 35
|
const BacklogLimit = 50
|
||||||
|
|
||||||
type MessageRow interface {
|
type MessageRow interface {
|
||||||
message.Container
|
message.Container
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package container
|
package container
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"log"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/diamondburned/cchat"
|
"github.com/diamondburned/cchat"
|
||||||
|
@ -153,8 +154,11 @@ func (c *ListStore) around(aroundID cchat.ID) (before, after *messageRow) {
|
||||||
// LatestMessageFrom returns the latest message with the given user ID. This is
|
// LatestMessageFrom returns the latest message with the given user ID. This is
|
||||||
// used for the input prompt.
|
// used for the input prompt.
|
||||||
func (c *ListStore) LatestMessageFrom(userID string) (msgID string, ok bool) {
|
func (c *ListStore) LatestMessageFrom(userID string) (msgID string, ok bool) {
|
||||||
|
log.Println("LatestMessageFrom called")
|
||||||
|
|
||||||
// FindMessage already looks from the latest messages.
|
// FindMessage already looks from the latest messages.
|
||||||
var msg = c.FindMessage(func(msg MessageRow) bool {
|
var msg = c.FindMessage(func(msg MessageRow) bool {
|
||||||
|
log.Println("Author:", msg.AuthorName())
|
||||||
return msg.AuthorID() == userID
|
return msg.AuthorID() == userID
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -198,14 +202,17 @@ func (c *ListStore) findMessage(presend bool, fn func(*messageRow) bool) (*messa
|
||||||
id := primitives.GetName(v.(primitives.Namer))
|
id := primitives.GetName(v.(primitives.Namer))
|
||||||
gridMsg := c.message(id, "")
|
gridMsg := c.message(id, "")
|
||||||
|
|
||||||
// Ignore sending messages.
|
// If gridMsg is actually nil, then we have bigger issues.
|
||||||
if (presend || gridMsg.presend == nil) && fn(gridMsg) {
|
if gridMsg != nil {
|
||||||
r = gridMsg
|
// Ignore sending messages.
|
||||||
return true
|
if (presend || gridMsg.presend == nil) && fn(gridMsg) {
|
||||||
|
r = gridMsg
|
||||||
|
return true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
i--
|
i--
|
||||||
return i == 0
|
return false
|
||||||
})
|
})
|
||||||
|
|
||||||
// Preserve old behavior.
|
// Preserve old behavior.
|
||||||
|
@ -405,10 +412,12 @@ func (c *ListStore) DeleteEarliest(n int) {
|
||||||
|
|
||||||
// Since container/list nils out the next element, we can't just call Next
|
// Since container/list nils out the next element, we can't just call Next
|
||||||
// after deleting, so we have to call Next manually before Removing.
|
// after deleting, so we have to call Next manually before Removing.
|
||||||
primitives.ForeachChildBackwards(c.ListBox, func(v interface{}) (stop bool) {
|
primitives.ForeachChild(c.ListBox, func(v interface{}) (stop bool) {
|
||||||
id := primitives.GetName(v.(primitives.Namer))
|
id := primitives.GetName(v.(primitives.Namer))
|
||||||
gridMsg := c.message(id, "")
|
gridMsg := c.message(id, "")
|
||||||
|
|
||||||
|
log.Println("Deleting overflowed message ID from", gridMsg.AuthorName())
|
||||||
|
|
||||||
if id := gridMsg.ID(); id != "" {
|
if id := gridMsg.ID(); id != "" {
|
||||||
delete(c.messages, idKey(id))
|
delete(c.messages, idKey(id))
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ func RemoveChildren(w Container) {
|
||||||
}
|
}
|
||||||
|
|
||||||
children := w.GetChildren()
|
children := w.GetChildren()
|
||||||
children.Foreach(func(child interface{}) { child.(destroyer).Destroy() })
|
children.Foreach(func(child interface{}) { w.Remove(child.(gtk.IWidget)) })
|
||||||
children.Free()
|
children.Free()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,6 +47,9 @@ func NthChild(w Container, n int) interface{} {
|
||||||
children := w.GetChildren()
|
children := w.GetChildren()
|
||||||
defer children.Free()
|
defer children.Free()
|
||||||
|
|
||||||
|
if n == 0 {
|
||||||
|
return children.Data()
|
||||||
|
}
|
||||||
return children.NthData(uint(n))
|
return children.NthData(uint(n))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,13 +72,7 @@ func ForeachChildBackwards(w Container, fn func(interface{}) (stop bool)) {
|
||||||
children := w.GetChildren()
|
children := w.GetChildren()
|
||||||
defer children.Free()
|
defer children.Free()
|
||||||
|
|
||||||
// Seek to last.
|
for v := children.Last(); v != nil; v = v.Previous() {
|
||||||
var last = children
|
|
||||||
for last != nil {
|
|
||||||
last = last.Next()
|
|
||||||
}
|
|
||||||
|
|
||||||
for v := last; v != nil; v = v.Previous() {
|
|
||||||
if fn(v.Data()) {
|
if fn(v.Data()) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue