summaryrefslogtreecommitdiff
path: root/internal/timeline
diff options
context:
space:
mode:
authorLibravatar Tobi Smethurst <31960611+tsmethurst@users.noreply.github.com>2021-06-21 12:27:23 +0200
committerLibravatar GitHub <noreply@github.com>2021-06-21 12:27:23 +0200
commitefbd83918137930001f7eda62ab5805a54da7a1d (patch)
treeacccb8f0650c32044e1f7769ce4b5ebb51b80f62 /internal/timeline
parentStreaming (#49) (diff)
downloadgotosocial-efbd83918137930001f7eda62ab5805a54da7a1d.tar.xz
Testrig fixes (#50)
* testrig is runnable again * little fixes, add some more test models * address https://github.com/superseriousbusiness/gotosocial/issues/44
Diffstat (limited to 'internal/timeline')
-rw-r--r--internal/timeline/prepare.go38
1 files changed, 37 insertions, 1 deletions
diff --git a/internal/timeline/prepare.go b/internal/timeline/prepare.go
index cd740993c..ac85d92e9 100644
--- a/internal/timeline/prepare.go
+++ b/internal/timeline/prepare.go
@@ -1,6 +1,7 @@
package timeline
import (
+ "container/list"
"errors"
"fmt"
@@ -31,6 +32,17 @@ func (t *timeline) PrepareBehind(statusID string, amount int) error {
t.Lock()
defer t.Unlock()
+ // lazily initialize prepared posts if it hasn't been done already
+ if t.preparedPosts.data == nil {
+ t.preparedPosts.data = &list.List{}
+ t.preparedPosts.data.Init()
+ }
+
+ // if the postindex is nil, nothing has been indexed yet so there's nothing to prepare
+ if t.postIndex.data == nil {
+ return nil
+ }
+
var prepared int
var preparing bool
prepareloop:
@@ -72,6 +84,17 @@ func (t *timeline) PrepareBefore(statusID string, include bool, amount int) erro
t.Lock()
defer t.Unlock()
+ // lazily initialize prepared posts if it hasn't been done already
+ if t.preparedPosts.data == nil {
+ t.preparedPosts.data = &list.List{}
+ t.preparedPosts.data.Init()
+ }
+
+ // if the postindex is nil, nothing has been indexed yet so there's nothing to prepare
+ if t.postIndex.data == nil {
+ return nil
+ }
+
var prepared int
var preparing bool
prepareloop:
@@ -116,11 +139,24 @@ func (t *timeline) PrepareFromTop(amount int) error {
t.Lock()
defer t.Unlock()
- t.preparedPosts.data.Init()
+ // lazily initialize prepared posts if it hasn't been done already
+ if t.preparedPosts.data == nil {
+ t.preparedPosts.data = &list.List{}
+ t.preparedPosts.data.Init()
+ }
+
+ // if the postindex is nil, nothing has been indexed yet so there's nothing to prepare
+ if t.postIndex.data == nil {
+ return nil
+ }
var prepared int
prepareloop:
for e := t.postIndex.data.Front(); e != nil; e = e.Next() {
+ if e == nil {
+ continue
+ }
+
entry, ok := e.Value.(*postIndexEntry)
if !ok {
return errors.New("PrepareFromTop: could not parse e as a postIndexEntry")