package views import ( "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 []models.PersisterResult) (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 } 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) { 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) }