package views import ( "net/url" "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.OutboxItem) (map[string]interface{}, error) { id, err := urls.UrlOutbox(name, domain) if err != nil { return nil, err } actorUrl, err := urls.UrlActor(name, domain) if err != nil { return nil, err } attrProp := streams.NewActivityStreamsAttributedToProperty() attrProp.AppendIRI(actorUrl) publicUrl, err := url.Parse("https://www.w3.org/ns/activitystreams#Public") if err != nil { return nil, err } toProp := streams.NewActivityStreamsToProperty() toProp.AppendIRI(publicUrl) oc := streams.NewActivityStreamsOrderedCollection() idProp := streams.NewJSONLDIdProperty() idProp.Set(id) oc.SetJSONLDId(idProp) oc.SetActivityStreamsAttributedTo(attrProp) itemsProp := streams.NewActivityStreamsOrderedItemsProperty() for _, v := range page { var err error note, err := activityObjectNote(name, domain, v) if err != nil { return nil, err } crea, err := activityObjectCreate(name, domain, v, note) if err != nil { return nil, err } itemsProp.AppendActivityStreamsCreate(crea) } totalProp := streams.NewActivityStreamsTotalItemsProperty() totalProp.Set(len(page)) oc.SetActivityStreamsTotalItems(totalProp) oc.SetActivityStreamsOrderedItems(itemsProp) return streams.Serialize(oc) }