mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-10-29 07:52:24 -05:00
[feature] Parse funkwhale Album as Statusable to allow barebones interacting with bandwagon (#3931)
* bump activity version * parse funkwhale / bandwagon album as statusable
This commit is contained in:
parent
4af8d1a2cb
commit
27171a78de
131 changed files with 26449 additions and 3098 deletions
|
|
@ -98,10 +98,17 @@ const (
|
|||
// that we don't *yet* know what type of Object something is.
|
||||
ObjectUnknown = "Unknown"
|
||||
|
||||
// Extensions and unofficial additions.
|
||||
/* Extensions and unofficial additions */
|
||||
|
||||
/* GtS stuff */
|
||||
|
||||
ObjectLikeApproval = "LikeApproval"
|
||||
ObjectReplyApproval = "ReplyApproval"
|
||||
ObjectAnnounceApproval = "AnnounceApproval"
|
||||
|
||||
/* Funkwhale stuff */
|
||||
|
||||
ObjectAlbum = "Album"
|
||||
)
|
||||
|
||||
// isActivity returns whether AS type name is of an Activity (NOT IntransitiveActivity).
|
||||
|
|
|
|||
|
|
@ -1078,7 +1078,14 @@ func ExtractInteractionPolicy(
|
|||
statusable Statusable,
|
||||
owner *gtsmodel.Account,
|
||||
) *gtsmodel.InteractionPolicy {
|
||||
policyProp := statusable.GetGoToSocialInteractionPolicy()
|
||||
ipa, ok := statusable.(InteractionPolicyAware)
|
||||
if !ok {
|
||||
// Not a type with interaction
|
||||
// policy properties settable.
|
||||
return nil
|
||||
}
|
||||
|
||||
policyProp := ipa.GetGoToSocialInteractionPolicy()
|
||||
if policyProp == nil || policyProp.Len() != 1 {
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,7 +76,8 @@ func IsStatusable(typeName string) bool {
|
|||
ObjectEvent,
|
||||
ObjectPlace,
|
||||
ObjectProfile,
|
||||
ActivityQuestion:
|
||||
ActivityQuestion,
|
||||
ObjectAlbum:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
|
|
@ -226,11 +227,13 @@ type Statusable interface {
|
|||
WithTo
|
||||
WithCc
|
||||
WithSensitive
|
||||
WithConversation
|
||||
WithContent
|
||||
WithAttachment
|
||||
WithTag
|
||||
WithReplies
|
||||
}
|
||||
|
||||
type InteractionPolicyAware interface {
|
||||
WithInteractionPolicy
|
||||
WithApprovedBy
|
||||
}
|
||||
|
|
@ -589,10 +592,6 @@ type WithSensitive interface {
|
|||
SetActivityStreamsSensitive(vocab.ActivityStreamsSensitiveProperty)
|
||||
}
|
||||
|
||||
// WithConversation ...
|
||||
type WithConversation interface { // TODO
|
||||
}
|
||||
|
||||
// WithContent represents an activity with ActivityStreamsContentProperty
|
||||
type WithContent interface {
|
||||
GetActivityStreamsContent() vocab.ActivityStreamsContentProperty
|
||||
|
|
|
|||
|
|
@ -80,6 +80,56 @@ func (suite *ResolveTestSuite) TestResolveNonAPJSONAsAccountable() {
|
|||
suite.Nil(accountable)
|
||||
}
|
||||
|
||||
func (suite *ResolveTestSuite) TestResolveBandwagonAlbumAsStatusable() {
|
||||
b := []byte(`{
|
||||
"@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": "https://bandwagon.fm/@67a0a0808121f77ed3466870",
|
||||
"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"
|
||||
}`)
|
||||
|
||||
statusable, err := ap.ResolveStatusable(
|
||||
context.Background(), io.NopCloser(bytes.NewReader(b)),
|
||||
)
|
||||
suite.NoError(err)
|
||||
suite.NotNil(statusable)
|
||||
}
|
||||
|
||||
func TestResolveTestSuite(t *testing.T) {
|
||||
suite.Run(t, &ResolveTestSuite{})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -153,7 +153,9 @@ func serializeStatusable(t vocab.Type, includeContext bool) (map[string]interfac
|
|||
|
||||
NormalizeOutgoingAttachmentProp(statusable, data)
|
||||
NormalizeOutgoingContentProp(statusable, data)
|
||||
NormalizeOutgoingInteractionPolicyProp(statusable, data)
|
||||
if ipa, ok := statusable.(InteractionPolicyAware); ok {
|
||||
NormalizeOutgoingInteractionPolicyProp(ipa, data)
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue