diff options
| author | Erwin de Haan <EraYaN@users.noreply.github.com> | 2018-12-30 01:12:33 +0100 |
|---|---|---|
| committer | Erwin de Haan <EraYaN@users.noreply.github.com> | 2018-12-30 01:12:33 +0100 |
| commit | de7fcaadb3d8fa77802ddcfb9bbd5b9306c49224 (patch) | |
| tree | cbe066dc2b0cbd284d4670e8ed771361e211bb4e | |
| parent | 1f0b83c66a9946e12dba48b6457a1424a34ca87f (diff) | |
Fixed #320 by adding an extension method to BaseItem to make a deep copy of an object.
| -rw-r--r-- | Emby.Server.Implementations/Library/LibraryManager.cs | 9 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/BaseItemExtensions.cs | 27 |
2 files changed, 33 insertions, 3 deletions
diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs index 91e58bfcd..f25688bba 100644 --- a/Emby.Server.Implementations/Library/LibraryManager.cs +++ b/Emby.Server.Implementations/Library/LibraryManager.cs @@ -730,8 +730,10 @@ namespace Emby.Server.Implementations.Library _fileSystem.CreateDirectory(rootFolderPath); - var rootFolder = GetItemById(GetNewItemId(rootFolderPath, typeof(AggregateFolder))) as AggregateFolder ?? (AggregateFolder)ResolvePath(_fileSystem.GetDirectoryInfo(rootFolderPath)); - + var tmpAFolder = new AggregateFolder(); + ((Folder)ResolvePath(_fileSystem.GetDirectoryInfo(rootFolderPath))).DeepCopy<Folder,AggregateFolder>(tmpAFolder); + var rootFolder = GetItemById(GetNewItemId(rootFolderPath, typeof(AggregateFolder))) as AggregateFolder ?? tmpAFolder; + // In case program data folder was moved if (!string.Equals(rootFolder.Path, rootFolderPath, StringComparison.Ordinal)) { @@ -799,7 +801,8 @@ namespace Emby.Server.Implementations.Library if (tmpItem == null) { - tmpItem = (UserRootFolder)ResolvePath(_fileSystem.GetDirectoryInfo(userRootPath)); + tmpItem = new UserRootFolder(); + ((Folder)ResolvePath(_fileSystem.GetDirectoryInfo(userRootPath))).DeepCopy<Folder,UserRootFolder>(tmpItem); } // In case program data folder was moved 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)); } } + + /// <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) + { + 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); + } + + } + + } + + } } |
