diff options
author | 2023-03-01 18:52:44 +0100 | |
---|---|---|
committer | 2023-03-01 17:52:44 +0000 | |
commit | 24cec4e7aab33b6c44ba6d1ecf16895f254351b8 (patch) | |
tree | cf0107a34e0fa00ab1b68aed4b52afe502147393 /internal/typeutils/internaltoas.go | |
parent | [chore/performance] simplify storage driver to use storage.Storage directly (... (diff) | |
download | gotosocial-24cec4e7aab33b6c44ba6d1ecf16895f254351b8.tar.xz |
[feature] Federate pinned posts (aka `featuredCollection`) in and out (#1560)
* start fiddling
* the ol' fiddle + update
* start working on fetching statuses
* poopy doopy doo where r u uwu
* further adventures in featuring statuses
* finishing up
* fmt
* simply status unpin loop
* move empty featured check back to caller function
* remove unnecessary log.WithContext calls
* remove unnecessary IsIRI() checks
* add explanatory comment about status URIs
* change log level to error
* better test names
Diffstat (limited to 'internal/typeutils/internaltoas.go')
-rw-r--r-- | internal/typeutils/internaltoas.go | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/internal/typeutils/internaltoas.go b/internal/typeutils/internaltoas.go index 06b49c18f..bbcf6c84b 100644 --- a/internal/typeutils/internaltoas.go +++ b/internal/typeutils/internaltoas.go @@ -1296,6 +1296,34 @@ func (c *converter) OutboxToASCollection(ctx context.Context, outboxID string) ( return collection, nil } +func (c *converter) StatusesToASFeaturedCollection(ctx context.Context, featuredCollectionID string, statuses []*gtsmodel.Status) (vocab.ActivityStreamsOrderedCollection, error) { + collection := streams.NewActivityStreamsOrderedCollection() + + collectionIDProp := streams.NewJSONLDIdProperty() + featuredCollectionIDURI, err := url.Parse(featuredCollectionID) + if err != nil { + return nil, fmt.Errorf("error parsing url %s", featuredCollectionID) + } + collectionIDProp.SetIRI(featuredCollectionIDURI) + collection.SetJSONLDId(collectionIDProp) + + itemsProp := streams.NewActivityStreamsOrderedItemsProperty() + for _, s := range statuses { + uri, err := url.Parse(s.URI) + if err != nil { + return nil, fmt.Errorf("error parsing url %s", s.URI) + } + itemsProp.AppendIRI(uri) + } + collection.SetActivityStreamsOrderedItems(itemsProp) + + totalItemsProp := streams.NewActivityStreamsTotalItemsProperty() + totalItemsProp.Set(len(statuses)) + collection.SetActivityStreamsTotalItems(totalItemsProp) + + return collection, nil +} + func (c *converter) ReportToASFlag(ctx context.Context, r *gtsmodel.Report) (vocab.ActivityStreamsFlag, error) { flag := streams.NewActivityStreamsFlag() |