Sorted constants a little
ActivityStreams stuff now have their own BaseApChain types
This commit is contained in:
Melody Becker 2024-07-30 19:13:58 +02:00
parent 2498ecea51
commit 5316c8b506
3 changed files with 255 additions and 21 deletions

View file

@ -38,14 +38,13 @@ const (
KEY_ACTIVITYSTREAMS_FOLLOWING = "https://www.w3.org/ns/activitystreams#following" // Who is this account following
KEY_ACTIVITYSTREAMS_HREF = "https://www.w3.org/ns/activitystreams#href" // Some url with id
KEY_ACTIVITYSTREAMS_ICON = "https://www.w3.org/ns/activitystreams#icon" // User icon
KEY_ACTIVITYSTREAMS_IMAGE = "https://www.w3.org/ns/activitystreams#image" // Account banner
KEY_ACTIVITYSTREAMS_IMAGE_ATTRIBUTE = "https://www.w3.org/ns/activitystreams#image" // Account banner
KEY_ACTIVITYSTREAMS_MEDIATYPE = "https://www.w3.org/ns/activitystreams#mediaType" // What type of media is this? Example image/jpeg
KEY_ACTIVITYSTREAMS_NAME = "https://www.w3.org/ns/activitystreams#name" // Name of the object
KEY_ACTIVITYSTREAMS_OUTBOX = "https://www.w3.org/ns/activitystreams#outbox" // Link to the account's outbox
KEY_ACTIVITYSTREAMS_OBJECT = "https://www.w3.org/ns/activitystreams#object" // Object url and sometimes value
KEY_ACTIVITYSTREAMS_PREFFEREDUSERNAME = "https://www.w3.org/ns/activitystreams#preferredUsername" // What the shown username is
KEY_ACTIVITYSTREAMS_PUBLISHED = "https://www.w3.org/ns/activitystreams#published" // When an object was created
KEY_ACTIVITYSTREAMS_PUBLIC = "https://www.w3.org/ns/activitystreams#Public" // Note target
KEY_ACTIVITYSTREAMS_RESTRICTED_FOLLOW = "https://www.w3.org/ns/activitystreams#manuallyApprovesFollowers" // Does the account manually approve follow requests
KEY_ACTIVITYSTREAMS_REPLIES = "https://www.w3.org/ns/activitystreams#replies" // Object containing the replies. Should always be a Collection
KEY_ACTIVITYSTREAMS_SHAREDINBOX = "https://www.w3.org/ns/activitystreams#sharedInbox" // Link to the shared inbox of the server
@ -67,6 +66,7 @@ const (
KEY_ACTIVITYSTREAMS_HASHTAG = "https://www.w3.org/ns/activitystreams#Hashtag" // Object is a hashtag
KEY_ACTIVITYSTREAMS_LIKE = "https://www.w3.org/ns/activitystreams#Like" // Object is an activity of type like
KEY_ACTIVITYSTREAMS_NOTE = "https://www.w3.org/ns/activitystreams#Note" // Object is of type Note
KEY_ACTIVITYSTREAMS_IMAGE_TYPE = "https://www.w3.org/ns/activitystreams#Image" // Object is of type Image
// Collection things
KEY_ACTIVITYSTREAMS_FIRST = "https://www.w3.org/ns/activitystreams#first" // First page in a collection
@ -78,6 +78,7 @@ const (
KEY_ACTIVITYSTREAMS_OAUTHAUTHORIZATION = "https://www.w3.org/ns/activitystreams#oauthAuthorizationEndpoint" // Endpoint url for oauth login?
KEY_ACTIVITYSTREAMS_OAUTHTOKEN = "https://www.w3.org/ns/activitystreams#oauthTokenEndpoint" // Endpoint url for oauth token verification?
KEY_ACTIVITYSTREAMS_UPLOADMEDIA = "https://www.w3.org/ns/activitystreams#uploadMedia" // Endpoint url to upload media to?
KEY_ACTIVITYSTREAMS_PUBLIC = "https://www.w3.org/ns/activitystreams#Public" // Note target
)
const (

View file

@ -131,15 +131,125 @@ func (endpointsdata *EndpointsData) MarshalToMap() map[string]any {
return m
}
// Endpoints
// Followers
// Following
// Href
// Icon
// Image
// MediaType
// Name
// Outbox
type FollowersData struct {
FullIdType
}
func (attributedtodata *FollowersData) GetSelfOrBase() (BaseApChain, bool) {
return attributedtodata.FullIdType.Next, true
}
func (attributedtodata *FollowersData) MarshalToMap() map[string]any {
return attributedtodata.FullIdType.MarshalToMapWithName(KEY_ACTIVITYSTREAMS_FOLLOWERS)
}
type FollowingData struct {
FullIdType
}
func (attributedtodata *FollowingData) GetSelfOrBase() (BaseApChain, bool) {
return attributedtodata.FullIdType.Next, true
}
func (attributedtodata *FollowingData) MarshalToMap() map[string]any {
return attributedtodata.FullIdType.MarshalToMapWithName(KEY_ACTIVITYSTREAMS_FOLLOWING)
}
type HrefData struct {
FullIdType
}
func (attributedtodata *HrefData) GetSelfOrBase() (BaseApChain, bool) {
return attributedtodata.FullIdType.Next, true
}
func (attributedtodata *HrefData) MarshalToMap() map[string]any {
return attributedtodata.FullIdType.MarshalToMapWithName(KEY_ACTIVITYSTREAMS_HREF)
}
type IconData struct {
Next BaseApChain
Media Media
}
func (icondata *IconData) GetSelfOrBase() (BaseApChain, bool) {
return icondata.Next, true
}
func (icondata *IconData) MarshalToMap() map[string]any {
return appendWithKey(
icondata.Next.MarshalToMap(),
KEY_ACTIVITYSTREAMS_ICON,
[]map[string]any{icondata.Media.Marshal()},
)
}
type ImageData struct {
Next BaseApChain
Media Media
}
func (icondata *ImageData) GetSelfOrBase() (BaseApChain, bool) {
return icondata.Next, true
}
func (icondata *ImageData) MarshalToMap() map[string]any {
return appendWithKey(
icondata.Next.MarshalToMap(),
KEY_ACTIVITYSTREAMS_IMAGE_ATTRIBUTE,
[]map[string]any{icondata.Media.Marshal()},
)
}
type MediaTypeData struct {
Next BaseApChain
Type string
}
func (mediatypedata *MediaTypeData) GetSelfOrBase() (BaseApChain, bool) {
return mediatypedata.Next, true
}
func (mediatypedata *MediaTypeData) MarshalToMap() map[string]any {
return appendWithKey(
mediatypedata.Next.MarshalToMap(),
KEY_ACTIVITYSTREAMS_MEDIATYPE,
ValueValue[string]{
Value: mediatypedata.Type,
Type: nil,
OtherThings: map[string]any{},
}.Marshal(),
)
}
type NameData struct {
Next BaseApChain
Name ValueValue[string]
}
func (namedata *NameData) GetSelfOrBase() (BaseApChain, bool) {
return namedata.Next, true
}
func (namedata *NameData) MarshalToMap() map[string]any {
return appendWithKey(
namedata.Next.MarshalToMap(),
KEY_ACTIVITYSTREAMS_NAME,
[]map[string]any{namedata.Name.Marshal()},
)
}
type OutboxData struct {
FullIdType
}
func (attributedtodata *OutboxData) GetSelfOrBase() (BaseApChain, bool) {
return attributedtodata.FullIdType.Next, true
}
func (attributedtodata *OutboxData) MarshalToMap() map[string]any {
return attributedtodata.FullIdType.MarshalToMapWithName(KEY_ACTIVITYSTREAMS_HREF)
}
type ObjectData struct {
FullIdType
@ -153,7 +263,22 @@ func (object *ObjectData) MarshalToMap() map[string]any {
return object.FullIdType.MarshalToMapWithName(KEY_ACTIVITYSTREAMS_OBJECT)
}
// PrefferedUsername
type PreferredNameData struct {
Next BaseApChain
Name ValueValue[string]
}
func (namedata *PreferredNameData) GetSelfOrBase() (BaseApChain, bool) {
return namedata.Next, true
}
func (namedata *PreferredNameData) MarshalToMap() map[string]any {
return appendWithKey(
namedata.Next.MarshalToMap(),
KEY_ACTIVITYSTREAMS_PREFFEREDUSERNAME,
[]map[string]any{namedata.Name.Marshal()},
)
}
type PublishedData struct {
Next BaseApChain
@ -164,20 +289,86 @@ func (publisheddata *PublishedData) GetSelfOrBase() (BaseApChain, bool) {
return publisheddata.Next, true
}
// Convert the chain to a map
// Should include the rest of the chain (extend the map the underlying object returns)
func (publisheddata *PublishedData) MarshalToMap() map[string]any {
m := publisheddata.Next.MarshalToMap()
m[KEY_ACTIVITYSTREAMS_PUBLISHED] = timeToXmlTime(publisheddata.Timestamp)
return m
}
// Public
// RestrictedFollow
// Replies
// SharedInbox
// Summary
// Sensitive
type RestrictedFollowData struct {
Next BaseApChain
Value ValueValue[bool]
}
func (namedata *RestrictedFollowData) GetSelfOrBase() (BaseApChain, bool) {
return namedata.Next, true
}
func (namedata *RestrictedFollowData) MarshalToMap() map[string]any {
return appendWithKey(
namedata.Next.MarshalToMap(),
KEY_ACTIVITYSTREAMS_RESTRICTED_FOLLOW,
[]map[string]any{namedata.Value.Marshal()},
)
}
type RepliesData struct {
FullIdType
}
func (object *RepliesData) GetSelfOrBase() (BaseApChain, bool) {
return object.FullIdType.Next, true
}
func (object *RepliesData) MarshalToMap() map[string]any {
return object.FullIdType.MarshalToMapWithName(KEY_ACTIVITYSTREAMS_REPLIES)
}
type SharedInboxData struct {
FullIdType
}
func (object *SharedInboxData) GetSelfOrBase() (BaseApChain, bool) {
return object.FullIdType.Next, true
}
func (object *SharedInboxData) MarshalToMap() map[string]any {
return object.FullIdType.MarshalToMapWithName(KEY_ACTIVITYSTREAMS_SHAREDINBOX)
}
type SummaryData struct {
Next BaseApChain
Name ValueValue[string]
}
func (namedata *SummaryData) GetSelfOrBase() (BaseApChain, bool) {
return namedata.Next, true
}
func (namedata *SummaryData) MarshalToMap() map[string]any {
return appendWithKey(
namedata.Next.MarshalToMap(),
KEY_ACTIVITYSTREAMS_SUMMARY,
[]map[string]any{namedata.Name.Marshal()},
)
}
type SensitiveData struct {
Next BaseApChain
Name ValueValue[bool]
}
func (namedata *SensitiveData) GetSelfOrBase() (BaseApChain, bool) {
return namedata.Next, true
}
func (namedata *SensitiveData) MarshalToMap() map[string]any {
return appendWithKey(
namedata.Next.MarshalToMap(),
KEY_ACTIVITYSTREAMS_SENSITIVE,
[]map[string]any{namedata.Name.Marshal()},
)
}
type TagData struct {
Next BaseApChain
@ -218,4 +409,30 @@ func (cc *ToData) MarshalToMap() map[string]any {
}
// Url
type UrlData struct {
FullIdType
}
func (object *UrlData) GetSelfOrBase() (BaseApChain, bool) {
return object.FullIdType.Next, true
}
func (object *UrlData) MarshalToMap() map[string]any {
return object.FullIdType.MarshalToMapWithName(KEY_ACTIVITYSTREAMS_SHAREDINBOX)
}
// Updated
type UpdatedData struct {
Next BaseApChain
Timestamp time.Time
}
func (publisheddata *UpdatedData) GetSelfOrBase() (BaseApChain, bool) {
return publisheddata.Next, true
}
func (publisheddata *UpdatedData) MarshalToMap() map[string]any {
m := publisheddata.Next.MarshalToMap()
m[KEY_ACTIVITYSTREAMS_PUBLISHED] = timeToXmlTime(publisheddata.Timestamp)
return m
}

View file

@ -16,8 +16,9 @@ type Attachment struct {
type Media struct {
Type string
MediaType string
MediaType *string
Url string
Sensitive *bool
}
type IdValue struct {
@ -59,3 +60,18 @@ func (v ValueValue[T]) Marshal() map[string]any {
}
return m
}
func (m Media) Marshal() map[string]any {
t := map[string]any{
KEY_TYPE: []string{m.Type},
KEY_ACTIVITYSTREAMS_URL: []map[string]any{IdValue{Id: m.Url}.Marshal()},
}
if m.MediaType != nil {
t[KEY_ACTIVITYSTREAMS_MEDIATYPE] = []map[string]any{{KEY_VALUE: *m.MediaType}}
}
if m.Sensitive != nil {
t[KEY_ACTIVITYSTREAMS_SENSITIVE] = []map[string]any{{KEY_VALUE: *m.Sensitive}}
}
return t
}