From de7fcaadb3d8fa77802ddcfb9bbd5b9306c49224 Mon Sep 17 00:00:00 2001 From: Erwin de Haan Date: Sun, 30 Dec 2018 01:12:33 +0100 Subject: Fixed #320 by adding an extension method to BaseItem to make a deep copy of an object. --- .../Entities/BaseItemExtensions.cs | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'MediaBrowser.Controller') diff --git a/MediaBrowser.Controller/Entities/BaseItemExtensions.cs b/MediaBrowser.Controller/Entities/BaseItemExtensions.cs index c56a370a8..97e56d1fd 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,31 @@ namespace MediaBrowser.Controller.Entities item.SetImagePath(imageType, BaseItem.FileSystem.GetFileInfo(file)); } } + + /// + /// Copies all properties on object. Skips properties that do not exist. + /// + /// The source object. + /// The destination object. + public static void DeepCopy(this T source, TU dest) + { + 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); + } + + } + + } + + } } -- cgit v1.2.3