diff options
author | 2023-04-06 13:43:13 +0200 | |
---|---|---|
committer | 2023-04-06 12:43:13 +0100 | |
commit | 3510454768b1877540c6dc25f4967e4b608203a8 (patch) | |
tree | aed9c913711f08ae748591271132f968ef1e716f /internal/timeline/remove.go | |
parent | [bugfix] Normalize status content (don't parse status content as IRI) (#1665) (diff) | |
download | gotosocial-3510454768b1877540c6dc25f4967e4b608203a8.tar.xz |
[bugfix/chore] Refactor timeline code (#1656)
* start poking timelines
* OK yes we're refactoring, but it's nothing like the last time so don't worry
* more fiddling
* update tests, simplify Get
* thanks linter, you're the best, mwah mwah kisses
* do a bit more tidying up
* start buggering about with the prepare function
* fix little oopsie
* start merging lists into 1
* ik heb een heel zwaar leven
nee nee echt waar
* hey it works we did it reddit
* regenerate swagger docs
* tidy up a wee bit
* adjust paging
* fix little error, remove unused functions
Diffstat (limited to 'internal/timeline/remove.go')
-rw-r--r-- | internal/timeline/remove.go | 114 |
1 files changed, 39 insertions, 75 deletions
diff --git a/internal/timeline/remove.go b/internal/timeline/remove.go index 62d55a9dc..e76913a2f 100644 --- a/internal/timeline/remove.go +++ b/internal/timeline/remove.go @@ -20,7 +20,6 @@ package timeline import ( "container/list" "context" - "errors" "codeberg.org/gruf/go-kv" "github.com/superseriousbusiness/gotosocial/internal/log" @@ -35,52 +34,35 @@ func (t *timeline) Remove(ctx context.Context, statusID string) (int, error) { t.Lock() defer t.Unlock() - var removed int - - // remove entr(ies) from the post index - removeIndexes := []*list.Element{} - if t.indexedItems != nil && t.indexedItems.data != nil { - for e := t.indexedItems.data.Front(); e != nil; e = e.Next() { - entry, ok := e.Value.(*indexedItemsEntry) - if !ok { - return removed, errors.New("Remove: could not parse e as a postIndexEntry") - } - if entry.itemID == statusID { - l.Debug("found status in postIndex") - removeIndexes = append(removeIndexes, e) - } - } - } - for _, e := range removeIndexes { - t.indexedItems.data.Remove(e) - removed++ + + if t.items == nil || t.items.data == nil { + // Nothing to do. + return 0, nil } - // remove entr(ies) from prepared posts - removePrepared := []*list.Element{} - if t.preparedItems != nil && t.preparedItems.data != nil { - for e := t.preparedItems.data.Front(); e != nil; e = e.Next() { - entry, ok := e.Value.(*preparedItemsEntry) - if !ok { - return removed, errors.New("Remove: could not parse e as a preparedPostsEntry") - } - if entry.itemID == statusID { - l.Debug("found status in preparedPosts") - removePrepared = append(removePrepared, e) - } + var toRemove []*list.Element + for e := t.items.data.Front(); e != nil; e = e.Next() { + entry := e.Value.(*indexedItemsEntry) // nolint:forcetypeassert + + if entry.itemID != statusID { + // Not relevant. + continue } + + l.Debug("removing item") + toRemove = append(toRemove, e) } - for _, e := range removePrepared { - t.preparedItems.data.Remove(e) - removed++ + + for _, e := range toRemove { + t.items.data.Remove(e) } - l.Debugf("removed %d entries", removed) - return removed, nil + return len(toRemove), nil } -func (t *timeline) RemoveAllBy(ctx context.Context, accountID string) (int, error) { - l := log.WithContext(ctx). +func (t *timeline) RemoveAllByOrBoosting(ctx context.Context, accountID string) (int, error) { + l := log. + WithContext(ctx). WithFields(kv.Fields{ {"accountTimeline", t.accountID}, {"accountID", accountID}, @@ -88,46 +70,28 @@ func (t *timeline) RemoveAllBy(ctx context.Context, accountID string) (int, erro t.Lock() defer t.Unlock() - var removed int - - // remove entr(ies) from the post index - removeIndexes := []*list.Element{} - if t.indexedItems != nil && t.indexedItems.data != nil { - for e := t.indexedItems.data.Front(); e != nil; e = e.Next() { - entry, ok := e.Value.(*indexedItemsEntry) - if !ok { - return removed, errors.New("Remove: could not parse e as a postIndexEntry") - } - if entry.accountID == accountID || entry.boostOfAccountID == accountID { - l.Debug("found status in postIndex") - removeIndexes = append(removeIndexes, e) - } - } - } - for _, e := range removeIndexes { - t.indexedItems.data.Remove(e) - removed++ + + if t.items == nil || t.items.data == nil { + // Nothing to do. + return 0, nil } - // remove entr(ies) from prepared posts - removePrepared := []*list.Element{} - if t.preparedItems != nil && t.preparedItems.data != nil { - for e := t.preparedItems.data.Front(); e != nil; e = e.Next() { - entry, ok := e.Value.(*preparedItemsEntry) - if !ok { - return removed, errors.New("Remove: could not parse e as a preparedPostsEntry") - } - if entry.accountID == accountID || entry.boostOfAccountID == accountID { - l.Debug("found status in preparedPosts") - removePrepared = append(removePrepared, e) - } + var toRemove []*list.Element + for e := t.items.data.Front(); e != nil; e = e.Next() { + entry := e.Value.(*indexedItemsEntry) // nolint:forcetypeassert + + if entry.accountID != accountID && entry.boostOfAccountID != accountID { + // Not relevant. + continue } + + l.Debug("removing item") + toRemove = append(toRemove, e) } - for _, e := range removePrepared { - t.preparedItems.data.Remove(e) - removed++ + + for _, e := range toRemove { + t.items.data.Remove(e) } - l.Debugf("removed %d entries", removed) - return removed, nil + return len(toRemove), nil } |