diff options
Diffstat (limited to 'resources/outbox.go')
-rw-r--r-- | resources/outbox.go | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/resources/outbox.go b/resources/outbox.go index f9a4aef..046ec6a 100644 --- a/resources/outbox.go +++ b/resources/outbox.go @@ -5,10 +5,11 @@ import ( "net/url" "path" + "github.com/dgraph-io/badger/v3" "github.com/go-fed/activity/streams" ) -func RenderOutbox(name, domain string) (map[string]interface{}, error) { +func RenderOutbox(name, domain string, db *badger.DB) (map[string]interface{}, error) { id, err := url.Parse(path.Join("https://", domain, "actors", name, "outbox")) if err != nil { @@ -21,13 +22,37 @@ func RenderOutbox(name, domain string) (map[string]interface{}, error) { } oc := streams.NewActivityStreamsOrderedCollection() + idProp := streams.NewJSONLDIdProperty() idProp.Set(id) oc.SetJSONLDId(idProp) + var i int + db.View(func(txn *badger.Txn) error { + it := txn.NewIterator(badger.DefaultIteratorOptions) + defer it.Close() + prefix := []byte("outbox:sample") + for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() { + item := it.Item() + // k := item.Key() + err := item.Value(func(v []byte) error { + i++ + // fmt.Printf("key=%s, value=%s\n", k, v) + return nil + }) + if err != nil { + return err + } + } + return nil + }) + + itemsProp := streams.NewActivityStreamsTotalItemsProperty() + itemsProp.Set(i) + oc.SetActivityStreamsTotalItems(itemsProp) + ocProp := streams.NewActivityStreamsFirstProperty() ocProp.SetIRI(first) - oc.SetActivityStreamsFirst(ocProp) return streams.Serialize(oc) |