mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-04 10:11:30 +01:00 
			
		
		
		
	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.
This commit is contained in:
		
						commit
						9d91fa8ab8
					
				@ -4,6 +4,7 @@
 | 
				
			|||||||
 - [nvllsvm](https://github.com/nvllsvm)
 | 
					 - [nvllsvm](https://github.com/nvllsvm)
 | 
				
			||||||
 - [JustAMan](https://github.com/JustAMan)
 | 
					 - [JustAMan](https://github.com/JustAMan)
 | 
				
			||||||
 - [dcrdev](https://github.com/dcrdev)
 | 
					 - [dcrdev](https://github.com/dcrdev)
 | 
				
			||||||
 | 
					 - [EraYaN](https://github.com/EraYaN)
 | 
				
			||||||
 - [flemse](https://github.com/flemse)
 | 
					 - [flemse](https://github.com/flemse)
 | 
				
			||||||
 - [bfayers](https://github.com/bfayers)
 | 
					 - [bfayers](https://github.com/bfayers)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -730,7 +730,7 @@ namespace Emby.Server.Implementations.Library
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            _fileSystem.CreateDirectory(rootFolderPath);
 | 
					            _fileSystem.CreateDirectory(rootFolderPath);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var rootFolder = GetItemById(GetNewItemId(rootFolderPath, typeof(AggregateFolder))) as AggregateFolder ?? (AggregateFolder)ResolvePath(_fileSystem.GetDirectoryInfo(rootFolderPath));
 | 
					            var rootFolder = GetItemById(GetNewItemId(rootFolderPath, typeof(AggregateFolder))) as AggregateFolder ?? ((Folder)ResolvePath(_fileSystem.GetDirectoryInfo(rootFolderPath))).DeepCopy<Folder,AggregateFolder>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // In case program data folder was moved
 | 
					            // In case program data folder was moved
 | 
				
			||||||
            if (!string.Equals(rootFolder.Path, rootFolderPath, StringComparison.Ordinal))
 | 
					            if (!string.Equals(rootFolder.Path, rootFolderPath, StringComparison.Ordinal))
 | 
				
			||||||
@ -799,7 +799,7 @@ namespace Emby.Server.Implementations.Library
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                        if (tmpItem == null)
 | 
					                        if (tmpItem == null)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            tmpItem = (UserRootFolder)ResolvePath(_fileSystem.GetDirectoryInfo(userRootPath));
 | 
					                            tmpItem = ((Folder)ResolvePath(_fileSystem.GetDirectoryInfo(userRootPath))).DeepCopy<Folder,UserRootFolder>();
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        // In case program data folder was moved
 | 
					                        // In case program data folder was moved
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,5 @@
 | 
				
			|||||||
using System;
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
@ -61,5 +62,46 @@ namespace MediaBrowser.Controller.Entities
 | 
				
			|||||||
                item.SetImagePath(imageType, BaseItem.FileSystem.GetFileInfo(file));
 | 
					                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;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user