mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-10-29 14:52:26 -05:00
[feature] Status thread mute/unmute functionality (#2278)
* add db models + functions for keeping track of threads * give em the old linty testy * create, remove, check mutes * swagger * testerino * test mute/unmute via api * add info log about new index creation * thread + allow muting of any remote statuses that mention a local account * IsStatusThreadMutedBy -> IsThreadMutedByAccount * use common processing functions in status processor * set = NULL * favee! * get rekt darlings, darlings get rekt * testrig please, have mercy muy liege
This commit is contained in:
parent
27f4659139
commit
c7b6cd7770
48 changed files with 1750 additions and 198 deletions
1
internal/cache/cache.go
vendored
1
internal/cache/cache.go
vendored
|
|
@ -248,6 +248,7 @@ func (c *Caches) Sweep(threshold float64) {
|
|||
c.GTS.Status().Trim(threshold)
|
||||
c.GTS.StatusFave().Trim(threshold)
|
||||
c.GTS.Tag().Trim(threshold)
|
||||
c.GTS.ThreadMute().Trim(threshold)
|
||||
c.GTS.Tombstone().Trim(threshold)
|
||||
c.GTS.User().Trim(threshold)
|
||||
c.Visibility.Trim(threshold)
|
||||
|
|
|
|||
30
internal/cache/gts.go
vendored
30
internal/cache/gts.go
vendored
|
|
@ -57,6 +57,7 @@ type GTSCaches struct {
|
|||
statusFave *result.Cache[*gtsmodel.StatusFave]
|
||||
statusFaveIDs *SliceCache[string]
|
||||
tag *result.Cache[*gtsmodel.Tag]
|
||||
threadMute *result.Cache[*gtsmodel.ThreadMute]
|
||||
tombstone *result.Cache[*gtsmodel.Tombstone]
|
||||
user *result.Cache[*gtsmodel.User]
|
||||
|
||||
|
|
@ -93,6 +94,7 @@ func (c *GTSCaches) Init() {
|
|||
c.initStatus()
|
||||
c.initStatusFave()
|
||||
c.initTag()
|
||||
c.initThreadMute()
|
||||
c.initStatusFaveIDs()
|
||||
c.initTombstone()
|
||||
c.initUser()
|
||||
|
|
@ -249,6 +251,11 @@ func (c *GTSCaches) Tag() *result.Cache[*gtsmodel.Tag] {
|
|||
return c.tag
|
||||
}
|
||||
|
||||
// ThreadMute provides access to the gtsmodel ThreadMute database cache.
|
||||
func (c *GTSCaches) ThreadMute() *result.Cache[*gtsmodel.ThreadMute] {
|
||||
return c.threadMute
|
||||
}
|
||||
|
||||
// StatusFaveIDs provides access to the status fave IDs list database cache.
|
||||
func (c *GTSCaches) StatusFaveIDs() *SliceCache[string] {
|
||||
return c.statusFaveIDs
|
||||
|
|
@ -712,6 +719,7 @@ func (c *GTSCaches) initStatus() {
|
|||
{Name: "URI"},
|
||||
{Name: "URL"},
|
||||
{Name: "BoostOfID.AccountID"},
|
||||
{Name: "ThreadID", Multi: true},
|
||||
}, func(s1 *gtsmodel.Status) *gtsmodel.Status {
|
||||
s2 := new(gtsmodel.Status)
|
||||
*s2 = *s1
|
||||
|
|
@ -778,6 +786,28 @@ func (c *GTSCaches) initTag() {
|
|||
c.tag.IgnoreErrors(ignoreErrors)
|
||||
}
|
||||
|
||||
func (c *GTSCaches) initThreadMute() {
|
||||
cap := calculateResultCacheMax(
|
||||
sizeOfThreadMute(), // model in-mem size.
|
||||
config.GetCacheThreadMuteMemRatio(),
|
||||
)
|
||||
|
||||
log.Infof(nil, "cache size = %d", cap)
|
||||
|
||||
c.threadMute = result.New([]result.Lookup{
|
||||
{Name: "ID"},
|
||||
{Name: "ThreadID", Multi: true},
|
||||
{Name: "AccountID", Multi: true},
|
||||
{Name: "ThreadID.AccountID"},
|
||||
}, func(t1 *gtsmodel.ThreadMute) *gtsmodel.ThreadMute {
|
||||
t2 := new(gtsmodel.ThreadMute)
|
||||
*t2 = *t1
|
||||
return t2
|
||||
}, cap)
|
||||
|
||||
c.threadMute.IgnoreErrors(ignoreErrors)
|
||||
}
|
||||
|
||||
func (c *GTSCaches) initTombstone() {
|
||||
// Calculate maximum cache size.
|
||||
cap := calculateResultCacheMax(
|
||||
|
|
|
|||
11
internal/cache/size.go
vendored
11
internal/cache/size.go
vendored
|
|
@ -194,6 +194,7 @@ func totalOfRatios() float64 {
|
|||
config.GetCacheStatusFaveMemRatio() +
|
||||
config.GetCacheStatusFaveIDsMemRatio() +
|
||||
config.GetCacheTagMemRatio() +
|
||||
config.GetCacheThreadMuteMemRatio() +
|
||||
config.GetCacheTombstoneMemRatio() +
|
||||
config.GetCacheUserMemRatio() +
|
||||
config.GetCacheWebfingerMemRatio() +
|
||||
|
|
@ -511,6 +512,16 @@ func sizeofTag() uintptr {
|
|||
}))
|
||||
}
|
||||
|
||||
func sizeOfThreadMute() uintptr {
|
||||
return uintptr(size.Of(>smodel.ThreadMute{
|
||||
ID: exampleID,
|
||||
CreatedAt: exampleTime,
|
||||
UpdatedAt: exampleTime,
|
||||
ThreadID: exampleID,
|
||||
AccountID: exampleID,
|
||||
}))
|
||||
}
|
||||
|
||||
func sizeofTombstone() uintptr {
|
||||
return uintptr(size.Of(>smodel.Tombstone{
|
||||
ID: exampleID,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue