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.UrlOutboxPage(name, domain) if err != nil { return nil, err } partOf, err := urls.UrlOutbox(name, domain) if err != nil { return nil, err } 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.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 { 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) } 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) }