package views import ( "bytes" "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) { id, err := urls.UrlOutboxPage(name, domain) if err != nil { return "", 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 } 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) }