summaryrefslogtreecommitdiff
path: root/internal/timeline/prepare.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/timeline/prepare.go')
-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")