Added Collection related copying of properties
Refactoring of copy functions
This commit is contained in:
parent
cd6c842227
commit
0895ecc34f
1 changed files with 97 additions and 42 deletions
139
copy.go
139
copy.go
|
@ -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 {
|
||||
|
|
Reference in a new issue