aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Entities
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller/Entities')
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs35
-rw-r--r--MediaBrowser.Controller/Entities/BaseItemExtensions.cs42
-rw-r--r--MediaBrowser.Controller/Entities/CollectionFolder.cs2
-rw-r--r--MediaBrowser.Controller/Entities/Extensions.cs5
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs4
-rw-r--r--MediaBrowser.Controller/Entities/TagExtensions.cs7
6 files changed, 57 insertions, 38 deletions
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index 053ee1b96..e3b5b5117 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -1295,7 +1295,7 @@ namespace MediaBrowser.Controller.Entities
}
}
- return string.Join("/", terms.ToArray(terms.Count));
+ return string.Join("/", terms.ToArray());
}
/// <summary>
@@ -1536,7 +1536,7 @@ namespace MediaBrowser.Controller.Entities
{
var newThemeVideos = LoadThemeVideos(fileSystemChildren, options.DirectoryService);
- var newThemeVideoIds = newThemeVideos.Select(i => i.Id).ToArray(newThemeVideos.Length);
+ var newThemeVideoIds = newThemeVideos.Select(i => i.Id).ToArray();
var themeVideosChanged = !item.ThemeVideoIds.SequenceEqual(newThemeVideoIds);
@@ -1573,7 +1573,7 @@ namespace MediaBrowser.Controller.Entities
private async Task<bool> RefreshThemeSongs(BaseItem item, MetadataRefreshOptions options, List<FileSystemMetadata> fileSystemChildren, CancellationToken cancellationToken)
{
var newThemeSongs = LoadThemeSongs(fileSystemChildren, options.DirectoryService);
- var newThemeSongIds = newThemeSongs.Select(i => i.Id).ToArray(newThemeSongs.Length);
+ var newThemeSongIds = newThemeSongs.Select(i => i.Id).ToArray();
var themeSongsChanged = !item.ThemeSongIds.SequenceEqual(newThemeSongIds);
@@ -2110,9 +2110,8 @@ namespace MediaBrowser.Controller.Entities
}
else
{
- var list = current.ToArray(current.Length + 1);
- list[list.Length - 1] = name;
- Studios = list;
+ var list =
+ Studios = current.Concat(new [] { name }).ToArray();
}
}
}
@@ -2252,9 +2251,7 @@ namespace MediaBrowser.Controller.Entities
else
{
var currentCount = ImageInfos.Length;
- var newList = ImageInfos.ToArray(currentCount + 1);
- newList[currentCount] = image;
- ImageInfos = newList;
+ ImageInfos = ImageInfos.Concat(new [] { image }) .ToArray();
}
}
@@ -2269,10 +2266,7 @@ namespace MediaBrowser.Controller.Entities
if (image == null)
{
- var currentCount = ImageInfos.Length;
- var newList = ImageInfos.ToArray(currentCount + 1);
- newList[currentCount] = GetImageInfo(file, type);
- ImageInfos = newList;
+ ImageInfos = ImageInfos.Concat(new [] { GetImageInfo(file, type) }) .ToArray();
}
else
{
@@ -2486,16 +2480,7 @@ namespace MediaBrowser.Controller.Entities
if (newImageList.Count > 0)
{
- var currentCount = ImageInfos.Length;
- var newList = ImageInfos.ToArray(currentCount + newImageList.Count);
-
- foreach (var image in newImageList)
- {
- newList[currentCount] = GetImageInfo(image, imageType);
- currentCount++;
- }
-
- ImageInfos = newList;
+ ImageInfos = ImageInfos.Concat(newImageList.Select(i => GetImageInfo(i, imageType))).ToArray();
}
return imageUpdated || newImageList.Count > 0;
@@ -2537,7 +2522,7 @@ namespace MediaBrowser.Controller.Entities
var extensions = new List<string> { ".nfo", ".xml", ".srt", ".vtt", ".sub", ".idx", ".txt", ".edl", ".bif", ".smi", ".ttml" };
extensions.AddRange(SupportedImageExtensions);
- return FileSystem.GetFiles(FileSystem.GetDirectoryName(Path), extensions.ToArray(extensions.Count), false, false)
+ return FileSystem.GetFiles(FileSystem.GetDirectoryName(Path), extensions.ToArray(), false, false)
.Where(i => System.IO.Path.GetFileNameWithoutExtension(i.FullName).StartsWith(filename, StringComparison.OrdinalIgnoreCase))
.ToList();
}
@@ -2776,7 +2761,7 @@ namespace MediaBrowser.Controller.Entities
{
var list = GetEtagValues(user);
- return string.Join("|", list.ToArray(list.Count)).GetMD5().ToString("N");
+ return string.Join("|", list.ToArray()).GetMD5().ToString("N");
}
protected virtual List<string> GetEtagValues(User user)
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;
+ }
+
+
}
}
diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs
index 8240a68ff..19a8c24b8 100644
--- a/MediaBrowser.Controller/Entities/CollectionFolder.cs
+++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs
@@ -275,7 +275,7 @@ namespace MediaBrowser.Controller.Entities
var changed = !linkedChildren.SequenceEqual(LinkedChildren, new LinkedChildComparer(FileSystem));
- LinkedChildren = linkedChildren.ToArray(linkedChildren.Count);
+ LinkedChildren = linkedChildren.ToArray();
var folderIds = PhysicalFolderIds;
var newFolderIds = physicalFolders.Select(i => i.Id).ToArray();
diff --git a/MediaBrowser.Controller/Entities/Extensions.cs b/MediaBrowser.Controller/Entities/Extensions.cs
index c706cf36c..ee135a14e 100644
--- a/MediaBrowser.Controller/Entities/Extensions.cs
+++ b/MediaBrowser.Controller/Entities/Extensions.cs
@@ -35,10 +35,7 @@ namespace MediaBrowser.Controller.Entities
}
else
{
- var list = item.RemoteTrailers.ToArray(item.RemoteTrailers.Length + 1);
- list[list.Length - 1] = mediaUrl;
-
- item.RemoteTrailers = list;
+ item.RemoteTrailers = item.RemoteTrailers.Concat(new [] { mediaUrl }).ToArray();
}
}
}
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index 8b9aa5fc3..81072b6e7 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -914,7 +914,7 @@ namespace MediaBrowser.Controller.Entities
// Try to preserve order
return result.OrderBy(i => ids.IndexOf(i.Id)).ToArray();
}
- return result.ToArray(result.Count);
+ return result.ToArray();
}
return GetItemsInternal(query).Items;
@@ -1608,7 +1608,7 @@ namespace MediaBrowser.Controller.Entities
Logger.Info("Shortcut links have changed for {0}", Path);
newShortcutLinks.AddRange(LinkedChildren.Where(i => i.Type == LinkedChildType.Manual));
- LinkedChildren = newShortcutLinks.ToArray(newShortcutLinks.Count);
+ LinkedChildren = newShortcutLinks.ToArray();
return true;
}
}
diff --git a/MediaBrowser.Controller/Entities/TagExtensions.cs b/MediaBrowser.Controller/Entities/TagExtensions.cs
index e5d8f35d9..84e61be4f 100644
--- a/MediaBrowser.Controller/Entities/TagExtensions.cs
+++ b/MediaBrowser.Controller/Entities/TagExtensions.cs
@@ -1,7 +1,5 @@
using System;
-using System.Collections.Generic;
using System.Linq;
-using MediaBrowser.Model.Extensions;
namespace MediaBrowser.Controller.Entities
{
@@ -24,10 +22,7 @@ namespace MediaBrowser.Controller.Entities
}
else
{
- var list = current.ToArray(current.Length + 1);
- list[list.Length - 1] = name;
-
- item.Tags = list;
+ item.Tags = current.Concat(new [] { name }).ToArray();
}
}
}