Added Collection related copying of properties

Refactoring of copy functions
This commit is contained in:
Marius Orcsik 2021-10-03 15:01:44 +02:00
parent cd6c842227
commit 0895ecc34f
No known key found for this signature in database
GPG key ID: DBF5E47F5DBC4D21

139
copy.go
View file

@ -4,6 +4,55 @@ import (
"fmt"
)
func CopyOrderedCollectionPageProperties(old, new *OrderedCollectionPage) (*OrderedCollectionPage, error) {
old.PartOf = replaceIfItem(old.PartOf, new.PartOf)
old.Next = replaceIfItem(old.Next, new.Next)
old.Prev = replaceIfItem(old.Prev, new.Prev)
oldCol, _ := ToOrderedCollection(old)
newCol, _ := ToOrderedCollection(new)
_, err := CopyOrderedCollectionProperties(oldCol, newCol)
if err != nil {
return old, err
}
return old, nil
}
func CopyCollectionPageProperties(old, new *CollectionPage) (*CollectionPage, error) {
old.PartOf = replaceIfItem(old.PartOf, new.PartOf)
old.Next = replaceIfItem(old.Next, new.Next)
old.Prev = replaceIfItem(old.Prev, new.Prev)
oldCol, _ := ToCollection(old)
newCol, _ := ToCollection(new)
_, err := CopyCollectionProperties(oldCol, newCol)
return old, err
}
func CopyOrderedCollectionProperties(old, new *OrderedCollection) (*OrderedCollection, error) {
old.First = replaceIfItem(old.First, new.First)
old.Last = replaceIfItem(old.Last, new.Last)
old.OrderedItems = replaceIfItemCollection(old.OrderedItems, new.OrderedItems)
if old.TotalItems == 0 {
old.TotalItems = new.TotalItems
}
oldOb, _ := ToObject(old)
newOb, _ := ToObject(new)
_, err := CopyObjectProperties(oldOb, newOb)
return old, err
}
func CopyCollectionProperties(old, new *Collection) (*Collection, error) {
old.First = replaceIfItem(old.First, new.First)
old.Last = replaceIfItem(old.Last, new.Last)
old.Items = replaceIfItemCollection(old.Items, new.Items)
if old.TotalItems == 0 {
old.TotalItems = new.TotalItems
}
oldOb, _ := ToObject(old)
newOb, _ := ToObject(new)
_, err := CopyObjectProperties(oldOb, newOb)
return old, err
}
// CopyObjectProperties updates the "old" object properties with "new's"
func CopyObjectProperties(old, new *Object) (*Object, error) {
old.Name = replaceIfNaturalLanguageValues(old.Name, new.Name)
@ -65,6 +114,50 @@ func CopyItemProperties(to, from Item) (Item, error) {
if to.GetType() != from.GetType() {
return to, fmt.Errorf("invalid object types for update %s(old) and %s(new)", from.GetType(), to.GetType())
}
if CollectionType == to.GetType() {
o, err := ToCollection(to)
if err != nil {
return o, err
}
n, err := ToCollection(from)
if err != nil {
return o, err
}
return CopyCollectionProperties(o, n)
}
if CollectionPageType == to.GetType() {
o, err := ToCollectionPage(to)
if err != nil {
return o, err
}
n, err := ToCollectionPage(from)
if err != nil {
return o, err
}
return CopyCollectionPageProperties(o, n)
}
if OrderedCollectionType == to.GetType() {
o, err := ToOrderedCollection(to)
if err != nil {
return o, err
}
n, err := ToOrderedCollection(from)
if err != nil {
return o, err
}
return CopyOrderedCollectionProperties(o, n)
}
if OrderedCollectionPageType == to.GetType() {
o, err := ToOrderedCollectionPage(to)
if err != nil {
return o, err
}
n, err := ToOrderedCollectionPage(from)
if err != nil {
return o, err
}
return CopyOrderedCollectionPageProperties(o, n)
}
if ActorTypes.Contains(to.GetType()) {
o, err := ToActor(to)
if err != nil {
@ -92,54 +185,16 @@ func CopyItemProperties(to, from Item) (Item, error) {
// UpdatePersonProperties
func UpdatePersonProperties(old, new *Actor) (*Actor, error) {
old.Name = replaceIfNaturalLanguageValues(old.Name, new.Name)
old.Attachment = replaceIfItem(old.Attachment, new.Attachment)
old.AttributedTo = replaceIfItem(old.AttributedTo, new.AttributedTo)
old.Audience = replaceIfItemCollection(old.Audience, new.Audience)
old.Content = replaceIfNaturalLanguageValues(old.Content, new.Content)
old.Context = replaceIfItem(old.Context, new.Context)
if len(new.MediaType) > 0 {
old.MediaType = new.MediaType
}
if !new.EndTime.IsZero() {
old.EndTime = new.EndTime
}
old.Generator = replaceIfItem(old.Generator, new.Generator)
old.Icon = replaceIfItem(old.Icon, new.Icon)
old.Image = replaceIfItem(old.Image, new.Image)
old.InReplyTo = replaceIfItem(old.InReplyTo, new.InReplyTo)
old.Location = replaceIfItem(old.Location, new.Location)
old.Preview = replaceIfItem(old.Preview, new.Preview)
if old.Published.IsZero() && !new.Published.IsZero() {
old.Published = new.Published
}
old.Replies = replaceIfItem(old.Replies, new.Replies)
if !new.StartTime.IsZero() {
old.StartTime = new.StartTime
}
old.Summary = replaceIfNaturalLanguageValues(old.Summary, new.Summary)
old.Tag = replaceIfItemCollection(old.Tag, new.Tag)
if !new.Updated.IsZero() {
old.Updated = new.Updated
}
if new.URL != nil {
old.URL = new.URL
}
old.To = replaceIfItemCollection(old.To, new.To)
old.Bto = replaceIfItemCollection(old.Bto, new.Bto)
old.CC = replaceIfItemCollection(old.CC, new.CC)
old.BCC = replaceIfItemCollection(old.BCC, new.BCC)
if new.Duration == 0 {
old.Duration = new.Duration
}
old.Source = replaceIfSource(old.Source, new.Source)
old.Inbox = replaceIfItem(old.Inbox, new.Inbox)
old.Outbox = replaceIfItem(old.Outbox, new.Outbox)
old.Following = replaceIfItem(old.Following, new.Following)
old.Followers = replaceIfItem(old.Followers, new.Followers)
old.Liked = replaceIfItem(old.Liked, new.Liked)
old.PreferredUsername = replaceIfNaturalLanguageValues(old.PreferredUsername, new.PreferredUsername)
return old, nil
oldOb, _ := ToObject(old)
newOb, _ := ToObject(new)
_, err := CopyObjectProperties(oldOb, newOb)
return old, err
}
func replaceIfItem(old, new Item) Item {