diff options
Diffstat (limited to 'views/outbox.go')
-rw-r--r-- | views/outbox.go | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/views/outbox.go b/views/outbox.go new file mode 100644 index 0000000..fe87e24 --- /dev/null +++ b/views/outbox.go @@ -0,0 +1,94 @@ +package views + +import ( + "git.capotej.com/capotej/communique/urls" + "github.com/go-fed/activity/streams" +) + +func RenderOutboxPage(name, domain string) (map[string]interface{}, error) { + id, err := urls.UrlOutboxPage(name, domain) + if err != nil { + return nil, err + } + + partOf, err := urls.UrlOutbox(name, domain) + if err != nil { + return nil, err + } + + oc := streams.NewActivityStreamsOrderedCollectionPage() + + idProp := streams.NewJSONLDIdProperty() + idProp.Set(id) + oc.SetJSONLDId(idProp) + + partOfProp := streams.NewActivityStreamsPartOfProperty() + partOfProp.SetIRI(partOf) + oc.SetActivityStreamsPartOf(partOfProp) + + itemsProp := streams.NewActivityStreamsOrderedItemsProperty() + + // err = db.View(func(txn *badger.Txn) error { + // opts := badger.DefaultIteratorOptions + // opts.PrefetchValues = false + // it := txn.NewIterator(opts) + // defer it.Close() + // prefix := []byte("outbox:sample") // TODO + // for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() { + // item := it.Item() + // err := item.Value(func(v []byte) error { + // crea := streams.NewActivityStreamsCreate() + // obj := streams.NewActivityStreamsObjectProperty() + // crea.SetActivityStreamsObject(obj) + + // note := streams.NewActivityStreamsNote() + // contentProp := streams.NewActivityStreamsContentProperty() + // contentProp.AppendXMLSchemaString(string(v)) + // note.SetActivityStreamsContent(contentProp) + // obj.AppendActivityStreamsNote(note) + + // itemsProp.AppendActivityStreamsCreate(crea) + // return nil + // }) + // if err != nil { + // return err + // } + // } + // return nil + // }) + // if err != nil { + // return nil, err + // } + + oc.SetActivityStreamsOrderedItems(itemsProp) + return streams.Serialize(oc) +} + +func RenderOutbox(name, domain string, totalItems int) (map[string]interface{}, error) { + id, err := urls.UrlOutbox(name, domain) + + if err != nil { + return nil, err + } + + first, err := urls.UrlOutboxPage(name, domain) + if err != nil { + return nil, err + } + + oc := streams.NewActivityStreamsOrderedCollection() + + idProp := streams.NewJSONLDIdProperty() + idProp.Set(id) + oc.SetJSONLDId(idProp) + + itemsProp := streams.NewActivityStreamsTotalItemsProperty() + itemsProp.Set(totalItems) + oc.SetActivityStreamsTotalItems(itemsProp) + + ocProp := streams.NewActivityStreamsFirstProperty() + ocProp.SetIRI(first) + oc.SetActivityStreamsFirst(ocProp) + + return streams.Serialize(oc) +} |