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/prepareditems.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/prepareditems.go')
| -rw-r--r-- | internal/timeline/prepareditems.go | 91 |
1 files changed, 0 insertions, 91 deletions
diff --git a/internal/timeline/prepareditems.go b/internal/timeline/prepareditems.go deleted file mode 100644 index 86bb6ad69..000000000 --- a/internal/timeline/prepareditems.go +++ /dev/null @@ -1,91 +0,0 @@ -// GoToSocial -// Copyright (C) GoToSocial Authors admin@gotosocial.org -// SPDX-License-Identifier: AGPL-3.0-or-later -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package timeline - -import ( - "container/list" - "context" - "errors" -) - -type preparedItems struct { - data *list.List - skipInsert SkipInsertFunction -} - -type preparedItemsEntry struct { - itemID string - boostOfID string - accountID string - boostOfAccountID string - prepared Preparable -} - -func (p *preparedItems) insertPrepared(ctx context.Context, newEntry *preparedItemsEntry) error { - if p.data == nil { - p.data = &list.List{} - } - - // if we have no entries yet, this is both the newest and oldest entry, so just put it in the front - if p.data.Len() == 0 { - p.data.PushFront(newEntry) - return nil - } - - var insertMark *list.Element - var position int - // We need to iterate through the index to make sure we put this entry in the appropriate place according to when it was created. - // We also need to make sure we're not inserting a duplicate entry -- this can happen sometimes and it's not nice UX (*shudder*). - for e := p.data.Front(); e != nil; e = e.Next() { - position++ - - entry, ok := e.Value.(*preparedItemsEntry) - if !ok { - return errors.New("insertPrepared: could not parse e as a preparedItemsEntry") - } - - skip, err := p.skipInsert(ctx, newEntry.itemID, newEntry.accountID, newEntry.boostOfID, newEntry.boostOfAccountID, entry.itemID, entry.accountID, entry.boostOfID, entry.boostOfAccountID, position) - if err != nil { - return err - } - if skip { - return nil - } - - // if the entry to index is newer than e, insert it before e in the list - if insertMark == nil { - if newEntry.itemID > entry.itemID { - insertMark = e - } - } - - // make sure we don't insert a duplicate - if entry.itemID == newEntry.itemID { - return nil - } - } - - if insertMark != nil { - p.data.InsertBefore(newEntry, insertMark) - return nil - } - - // if we reach this point it's the oldest entry we've seen so put it at the back - p.data.PushBack(newEntry) - return nil -} |
