mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-12-01 06:03:32 -06:00
Merge branch 'main' into add_gallery_web_rendering_mode
This commit is contained in:
commit
5822d451c7
214 changed files with 29471 additions and 4720 deletions
|
|
@ -434,9 +434,10 @@ func (c *Converter) ASStatusToStatus(ctx context.Context, statusable ap.Statusab
|
|||
return nil, gtserror.SetMalformed(err)
|
||||
}
|
||||
|
||||
// Status was sent to us or dereffed
|
||||
// by us so it must be federated.
|
||||
// Status was sent to us or dereffed by
|
||||
// us so it must be federated and not local.
|
||||
status.Federated = util.Ptr(true)
|
||||
status.Local = util.Ptr(false)
|
||||
|
||||
// Derive interaction policy for this status.
|
||||
status.InteractionPolicy = ap.ExtractInteractionPolicy(
|
||||
|
|
@ -446,9 +447,11 @@ func (c *Converter) ASStatusToStatus(ctx context.Context, statusable ap.Statusab
|
|||
|
||||
// Set approvedByURI if present,
|
||||
// for later dereferencing.
|
||||
approvedByURI := ap.GetApprovedBy(statusable)
|
||||
if approvedByURI != nil {
|
||||
status.ApprovedByURI = approvedByURI.String()
|
||||
if ipa, ok := statusable.(ap.InteractionPolicyAware); ok {
|
||||
approvedByURI := ap.GetApprovedBy(ipa)
|
||||
if approvedByURI != nil {
|
||||
status.ApprovedByURI = approvedByURI.String()
|
||||
}
|
||||
}
|
||||
|
||||
// Assume not pending approval; this may
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ import (
|
|||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"testing"
|
||||
|
||||
|
|
@ -224,8 +223,7 @@ func (suite *ASToInternalTestSuite) TestParseOwncastService() {
|
|||
|
||||
b, err := json.Marshal(apiAcct)
|
||||
suite.NoError(err)
|
||||
|
||||
fmt.Printf("\n\n\n%s\n\n\n", string(b))
|
||||
suite.NotNil(b)
|
||||
}
|
||||
|
||||
func (suite *ASToInternalTestSuite) TestParseBookwyrmStatus() {
|
||||
|
|
@ -282,6 +280,65 @@ func (suite *ASToInternalTestSuite) TestParseBookwyrmStatus() {
|
|||
suite.Len(status.Attachments, 1)
|
||||
}
|
||||
|
||||
func (suite *ASToInternalTestSuite) TestParseBandwagonAlbum() {
|
||||
authorAccount := suite.testAccounts["remote_account_1"]
|
||||
|
||||
raw := `{
|
||||
"@context": [
|
||||
"https://www.w3.org/ns/activitystreams",
|
||||
"https://w3id.org/security/v1",
|
||||
{
|
||||
"discoverable": "toot:discoverable",
|
||||
"indexable": "toot:indexable",
|
||||
"toot": "https://joinmastodon.org/ns#"
|
||||
},
|
||||
"https://funkwhale.audio/ns"
|
||||
],
|
||||
"artists": [
|
||||
{
|
||||
"id": "https://bandwagon.fm/@67a0a0808121f77ed3466870",
|
||||
"name": "Luka Prinčič",
|
||||
"type": "Artist"
|
||||
}
|
||||
],
|
||||
"attachment": [
|
||||
{
|
||||
"mediaType": "image/webp",
|
||||
"name": "image",
|
||||
"type": "Document",
|
||||
"url": "https://bandwagon.fm/67a0a219f050061c8b4ce427/attachments/67a0a21bf050061c8b4ce429"
|
||||
}
|
||||
],
|
||||
"attributedTo": "` + authorAccount.URI + `",
|
||||
"content": "... a transgenre mutation, a fluid entity, jagged pop, electro-funk, techno-cabaret, a schlager, and soft alternative, queer to the core, satire and tragedy, sharp and fun indulgence for the dance of bodies and brains, activism and hedonism, which would all like to steal your attention.\r\n\r\nDRAGX̶FUNK is pronounced /dɹæɡɑːfʌŋk/.\r\n\r\n---\r\n\r\n## Buy digital\r\n💳 [Stripe](https://buy.stripe.com/6oE8x52iG1Kq5pKeV3)\r\n\r\n---\r\n\r\n## Buy dl/merch\r\n🎵 [Bandcamp](https://lukaprincic.bandcamp.com/album/dragx-funk) \r\n\r\n---\r\n\r\n## More:\r\n🌐 [prin.lu](https://prin.lu/music/241205_dragx-funk/) \r\n👉 [kamizdat.si](https://kamizdat.si/releases/dragx-funk-2/)\r\n",
|
||||
"context": "https://bandwagon.fm/67a0a219f050061c8b4ce427",
|
||||
"id": "https://bandwagon.fm/67a0a219f050061c8b4ce427",
|
||||
"library": "https://bandwagon.fm/67a0a219f050061c8b4ce427/pub/children",
|
||||
"license": "CC-BY-NC-SA",
|
||||
"name": "DRAGX̶FUNK",
|
||||
"published": "2025-03-17T11:40:53Z",
|
||||
"to": [
|
||||
"https://www.w3.org/ns/activitystreams#Public"
|
||||
],
|
||||
"tracks": "https://bandwagon.fm/67a0a219f050061c8b4ce427/pub/children",
|
||||
"type": "Album",
|
||||
"url": "https://bandwagon.fm/67a0a219f050061c8b4ce427"
|
||||
}`
|
||||
|
||||
t := suite.jsonToType(raw)
|
||||
asArticle, ok := t.(ap.Statusable)
|
||||
if !ok {
|
||||
suite.FailNow("type not coercible")
|
||||
}
|
||||
|
||||
s, err := suite.typeconverter.ASStatusToStatus(context.Background(), asArticle)
|
||||
if err != nil {
|
||||
suite.FailNow(err.Error())
|
||||
}
|
||||
suite.NotNil(s)
|
||||
suite.NoError(err)
|
||||
}
|
||||
|
||||
func (suite *ASToInternalTestSuite) TestParseFlag1() {
|
||||
reportedAccount := suite.testAccounts["local_account_1"]
|
||||
reportingAccount := suite.testAccounts["remote_account_1"]
|
||||
|
|
|
|||
|
|
@ -705,35 +705,38 @@ func (c *Converter) StatusToAS(ctx context.Context, s *gtsmodel.Status) (ap.Stat
|
|||
status.SetActivityStreamsSensitive(sensitiveProp)
|
||||
|
||||
// interactionPolicy
|
||||
var p *gtsmodel.InteractionPolicy
|
||||
if s.InteractionPolicy != nil {
|
||||
// Use InteractionPolicy
|
||||
// set on the status.
|
||||
p = s.InteractionPolicy
|
||||
} else {
|
||||
// Fall back to default policy
|
||||
// for the status's visibility.
|
||||
p = gtsmodel.DefaultInteractionPolicyFor(s.Visibility)
|
||||
}
|
||||
policy, err := c.InteractionPolicyToASInteractionPolicy(ctx, p, s)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error creating interactionPolicy: %w", err)
|
||||
}
|
||||
|
||||
policyProp := streams.NewGoToSocialInteractionPolicyProperty()
|
||||
policyProp.AppendGoToSocialInteractionPolicy(policy)
|
||||
status.SetGoToSocialInteractionPolicy(policyProp)
|
||||
|
||||
// Parse + set approvedBy.
|
||||
if s.ApprovedByURI != "" {
|
||||
approvedBy, err := url.Parse(s.ApprovedByURI)
|
||||
if ipa, ok := status.(ap.InteractionPolicyAware); ok {
|
||||
var p *gtsmodel.InteractionPolicy
|
||||
if s.InteractionPolicy != nil {
|
||||
// Use InteractionPolicy
|
||||
// set on the status.
|
||||
p = s.InteractionPolicy
|
||||
} else {
|
||||
// Fall back to default policy
|
||||
// for the status's visibility.
|
||||
p = gtsmodel.DefaultInteractionPolicyFor(s.Visibility)
|
||||
}
|
||||
policy, err := c.InteractionPolicyToASInteractionPolicy(ctx, p, s)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error parsing approvedBy: %w", err)
|
||||
return nil, fmt.Errorf("error creating interactionPolicy: %w", err)
|
||||
}
|
||||
|
||||
approvedByProp := streams.NewGoToSocialApprovedByProperty()
|
||||
approvedByProp.Set(approvedBy)
|
||||
status.SetGoToSocialApprovedBy(approvedByProp)
|
||||
// Set interaction policy.
|
||||
policyProp := streams.NewGoToSocialInteractionPolicyProperty()
|
||||
policyProp.AppendGoToSocialInteractionPolicy(policy)
|
||||
ipa.SetGoToSocialInteractionPolicy(policyProp)
|
||||
|
||||
// Parse + set approvedBy.
|
||||
if s.ApprovedByURI != "" {
|
||||
approvedBy, err := url.Parse(s.ApprovedByURI)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error parsing approvedBy: %w", err)
|
||||
}
|
||||
|
||||
approvedByProp := streams.NewGoToSocialApprovedByProperty()
|
||||
approvedByProp.Set(approvedBy)
|
||||
ipa.SetGoToSocialApprovedBy(approvedByProp)
|
||||
}
|
||||
}
|
||||
|
||||
return status, nil
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue