diff options
Diffstat (limited to 'resources/outbox.go')
-rw-r--r-- | resources/outbox.go | 67 |
1 files changed, 57 insertions, 10 deletions
diff --git a/resources/outbox.go b/resources/outbox.go index 046ec6a..2656da4 100644 --- a/resources/outbox.go +++ b/resources/outbox.go @@ -9,35 +9,49 @@ import ( "github.com/go-fed/activity/streams" ) -func RenderOutbox(name, domain string, db *badger.DB) (map[string]interface{}, error) { - id, err := url.Parse(path.Join("https://", domain, "actors", name, "outbox")) - +func RenderOutboxPage(name, domain string, db *badger.DB) (map[string]interface{}, error) { + id, err := url.Parse(path.Join("https://", domain, "actors", name, "outbox") + "?page=true") if err != nil { return nil, fmt.Errorf("could not partse url: %w", err) } - first, err := url.Parse(path.Join("https://", domain, "actors", name, "outbox", "?=page=true")) + partOf, err := url.Parse(path.Join("https://", domain, "actors", name, "outbox")) if err != nil { return nil, fmt.Errorf("could not partse url: %w", err) } - oc := streams.NewActivityStreamsOrderedCollection() + oc := streams.NewActivityStreamsOrderedCollectionPage() idProp := streams.NewJSONLDIdProperty() idProp.Set(id) oc.SetJSONLDId(idProp) - var i int + partOfProp := streams.NewActivityStreamsPartOfProperty() + partOfProp.SetIRI(partOf) + oc.SetActivityStreamsPartOf(partOfProp) + + itemsProp := streams.NewActivityStreamsOrderedItemsProperty() + db.View(func(txn *badger.Txn) error { it := txn.NewIterator(badger.DefaultIteratorOptions) defer it.Close() - prefix := []byte("outbox:sample") + prefix := []byte("outbox:sample") // TODO for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() { item := it.Item() - // k := item.Key() + k := item.Key() err := item.Value(func(v []byte) error { - i++ - // fmt.Printf("key=%s, value=%s\n", k, v) + fmt.Printf("key=%s, value=%s\n", k, v) + crea := streams.NewActivityStreamsCreate() + obj := streams.NewActivityStreamsObjectProperty() + crea.SetActivityStreamsObject(obj) + + note := streams.NewActivityStreamsNote() + contentProp := streams.NewActivityStreamsContentProperty() + contentProp.AppendIRI(id) + note.SetActivityStreamsContent(contentProp) + obj.AppendActivityStreamsNote(note) + + itemsProp.AppendActivityStreamsCreate(crea) return nil }) if err != nil { @@ -47,6 +61,39 @@ func RenderOutbox(name, domain string, db *badger.DB) (map[string]interface{}, e return nil }) + oc.SetActivityStreamsOrderedItems(itemsProp) + return streams.Serialize(oc) +} + +func RenderOutbox(name, domain string, db *badger.DB) (map[string]interface{}, error) { + id, err := url.Parse(path.Join("https://", domain, "actors", name, "outbox") + "?page=true") + + if err != nil { + return nil, fmt.Errorf("could not partse url: %w", err) + } + + first, err := url.Parse(path.Join("https://", domain, "actors", name, "outbox") + "?page=true") + if err != nil { + return nil, fmt.Errorf("could not partse url: %w", err) + } + + 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() { + i++ + } + return nil + }) + itemsProp := streams.NewActivityStreamsTotalItemsProperty() itemsProp.Set(i) oc.SetActivityStreamsTotalItems(itemsProp) |