diff options
Diffstat (limited to 'system/db/content.go')
-rw-r--r-- | system/db/content.go | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/system/db/content.go b/system/db/content.go index dc4477f..b8d9cb8 100644 --- a/system/db/content.go +++ b/system/db/content.go @@ -432,29 +432,40 @@ func SortContent(namespace string) { // sort posts sort.Sort(posts) + // marshal posts to json + var bb [][]byte + for i := range posts { + j, err := json.Marshal(posts[i]) + if err != nil { + // log error and kill sort so __sorted is not in invalid state + log.Println("Error marshal post to json in SortContent:", err) + return + } + + bb = append(bb, j) + } + // store in <namespace>_sorted bucket, first delete existing err := store.Update(func(tx *bolt.Tx) error { bname := []byte(namespace + "__sorted") err := tx.DeleteBucket(bname) - if err != nil { + if err != nil && err != bolt.ErrBucketNotFound { + fmt.Println("Error in DeleteBucket") return err } b, err := tx.CreateBucketIfNotExists(bname) if err != nil { + fmt.Println("Error in CreateBucketIfNotExists") return err } // encode to json and store as 'i:post.Time()':post - for i := range posts { - j, err := json.Marshal(posts[i]) - if err != nil { - return err - } - + for i := range bb { cid := fmt.Sprintf("%d:%d", i, posts[i].Time()) - err = b.Put([]byte(cid), j) + err = b.Put([]byte(cid), bb[i]) if err != nil { + fmt.Println("Error in Put") return err } } @@ -485,7 +496,7 @@ func postToJSON(ns string, data url.Values) ([]byte, error) { // find the content type and decode values into it t, ok := item.Types[ns] if !ok { - return nil, fmt.Errorf(item.ErrTypeNotRegistered, ns) + return nil, fmt.Errorf(item.ErrTypeNotRegistered.Error(), ns) } post := t() |