From c500a2be38afcbb5688537d97c7c3ee30a57dba4 Mon Sep 17 00:00:00 2001 From: Julio Capote Date: Fri, 30 Dec 2022 21:20:02 -0500 Subject: parse and persist feeds from handlers --- views/outbox.go | 107 ++++++++++++++++++++++---------------------------------- 1 file changed, 41 insertions(+), 66 deletions(-) (limited to 'views/outbox.go') diff --git a/views/outbox.go b/views/outbox.go index 97dd939..88f88c2 100644 --- a/views/outbox.go +++ b/views/outbox.go @@ -1,81 +1,56 @@ package views import ( - "bytes" - + "git.capotej.com/capotej/communique/models" "git.capotej.com/capotej/communique/urls" "github.com/go-fed/activity/streams" ) // RenderOutboxCollection takes a page of ActivityStream objects as JSON strings and concatenates them together to return an // ActivtyStreamsOrderedCollection -func RenderOutboxCollection(name, domain string, page []string) (string, error) { +func RenderOutboxCollection(name, domain string, page []models.PersisterResult) (map[string]interface{}, error) { id, err := urls.UrlOutboxPage(name, domain) if err != nil { - return "", err + return nil, err + } + + partOf, err := urls.UrlOutbox(name, domain) + if err != nil { + return nil, err } - buf := &bytes.Buffer{} - buf.WriteString("{") - buf.WriteString("\"id\":\"" + id.String() + "\"") - buf.WriteString("}") - - // partOf, err := urls.UrlOutbox(name, domain) - // if err != nil { - // return "", err - // } - - // result := make(map[string]interface{}) - // result["id"] = id.String() - // result["partOf"] = partOf.String() - // result["orderedItems"] = page - - // 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) - return buf.String(), nil + + result := make(map[string]interface{}) + result["id"] = id.String() + result["partOf"] = partOf.String() + result["orderedItems"] = page + + oc := streams.NewActivityStreamsOrderedCollectionPage() + + idProp := streams.NewJSONLDIdProperty() + idProp.Set(id) + oc.SetJSONLDId(idProp) + + partOfProp := streams.NewActivityStreamsPartOfProperty() + partOfProp.SetIRI(partOf) + oc.SetActivityStreamsPartOf(partOfProp) + + itemsProp := streams.NewActivityStreamsOrderedItemsProperty() + + for _, v := range page { + crea := streams.NewActivityStreamsCreate() + obj := streams.NewActivityStreamsObjectProperty() + crea.SetActivityStreamsObject(obj) + + note := streams.NewActivityStreamsNote() + contentProp := streams.NewActivityStreamsContentProperty() + contentProp.AppendXMLSchemaString(string(v.Value)) + note.SetActivityStreamsContent(contentProp) + obj.AppendActivityStreamsNote(note) + + itemsProp.AppendActivityStreamsCreate(crea) + } + oc.SetActivityStreamsOrderedItems(itemsProp) + return streams.Serialize(oc) } func RenderOutbox(name, domain string, totalItems int) (map[string]interface{}, error) { -- cgit v1.2.3