aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Entities/BaseItemExtensions.cs
diff options
context:
space:
mode:
authorJoshua M. Boniface <joshua@boniface.me>2018-12-29 19:40:53 -0500
committerGitHub <noreply@github.com>2018-12-29 19:40:53 -0500
commit9d91fa8ab8bb1e429d45cf2c0fe54f59c59dff4d (patch)
treeebf3a5f911228a57ecefb01dfef6bf45e19fd153 /MediaBrowser.Controller/Entities/BaseItemExtensions.cs
parentaac1007bdc0167c83ef150d199c27cfaed467e44 (diff)
parent64a1a7560ee09b1568e65def65fe51bf84357726 (diff)
Merge pull request #321 from EraYaN/fix-issue-320
Fixed #320 by adding an extension method to BaseItem to make a deep copy of an object.
Diffstat (limited to 'MediaBrowser.Controller/Entities/BaseItemExtensions.cs')
-rw-r--r--MediaBrowser.Controller/Entities/BaseItemExtensions.cs42
1 files changed, 42 insertions, 0 deletions
diff --git a/MediaBrowser.Controller/Entities/BaseItemExtensions.cs b/MediaBrowser.Controller/Entities/BaseItemExtensions.cs
index c56a370a8..8ab1788b5 100644
--- a/MediaBrowser.Controller/Entities/BaseItemExtensions.cs
+++ b/MediaBrowser.Controller/Entities/BaseItemExtensions.cs
@@ -1,4 +1,5 @@
using System;
+using System.Linq;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
@@ -61,5 +62,46 @@ namespace MediaBrowser.Controller.Entities
item.SetImagePath(imageType, BaseItem.FileSystem.GetFileInfo(file));
}
}
+
+ /// <summary>
+ /// Copies all properties on object. Skips properties that do not exist.
+ /// </summary>
+ /// <param name="source">The source object.</param>
+ /// <param name="dest">The destination object.</param>
+ public static void DeepCopy<T, TU>(this T source, TU dest)
+ where T : BaseItem
+ where TU : BaseItem
+ {
+ var sourceProps = typeof (T).GetProperties().Where(x => x.CanRead).ToList();
+ var destProps = typeof(TU).GetProperties()
+ .Where(x => x.CanWrite)
+ .ToList();
+
+ foreach (var sourceProp in sourceProps)
+ {
+ if (destProps.Any(x => x.Name == sourceProp.Name))
+ {
+ var p = destProps.First(x => x.Name == sourceProp.Name);
+ p.SetValue(dest, sourceProp.GetValue(source, null), null);
+ }
+
+ }
+
+ }
+
+ /// <summary>
+ /// Copies all properties on newly created object. Skips properties that do not exist.
+ /// </summary>
+ /// <param name="source">The source object.</param>
+ public static TU DeepCopy<T, TU>(this T source)
+ where T : BaseItem
+ where TU : BaseItem, new()
+ {
+ var dest = new TU();
+ source.DeepCopy(dest);
+ return dest;
+ }
+
+
}
}