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) oc.SetActivityStreamsTo(toProp) 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.Content)) note.SetActivityStreamsContent(contentProp) note.SetActivityStreamsTo(toProp) // publishedProp := streams.NewActivityStreamsPublishedProperty() // note.SetActivityStreamsPublished() 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) }