aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Entities/BaseItem.cs
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2017-09-20 13:22:39 -0400
committerGitHub <noreply@github.com>2017-09-20 13:22:39 -0400
commiteb2a1330045d802bfe0366df7105c220a36f111f (patch)
tree2c1638c424ee9c0837c5de6d6e08a2398da69cdb /MediaBrowser.Controller/Entities/BaseItem.cs
parentec426d5c92875639ceac64477ce10fab3e639335 (diff)
parenta015e1208885bc6a8788db683c4fe47e93dc26b7 (diff)
Merge pull request #2897 from MediaBrowser/beta
Beta
Diffstat (limited to 'MediaBrowser.Controller/Entities/BaseItem.cs')
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs195
1 files changed, 141 insertions, 54 deletions
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index 513b85d8b..502ba6c60 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -97,7 +97,7 @@ namespace MediaBrowser.Controller.Entities
public string Tagline { get; set; }
[IgnoreDataMember]
- public ItemImageInfo[] ImageInfos { get; set; }
+ public virtual ItemImageInfo[] ImageInfos { get; set; }
[IgnoreDataMember]
public bool IsVirtualItem { get; set; }
@@ -187,21 +187,6 @@ namespace MediaBrowser.Controller.Entities
}
[IgnoreDataMember]
- public string SlugName
- {
- get
- {
- var name = Name;
- if (string.IsNullOrWhiteSpace(name))
- {
- return string.Empty;
- }
-
- return SlugReplaceChars.Aggregate(name, (current, c) => current.Replace(c, SlugChar));
- }
- }
-
- [IgnoreDataMember]
public bool IsUnaired
{
get { return PremiereDate.HasValue && PremiereDate.Value.ToLocalTime().Date >= DateTime.Now.Date; }
@@ -231,6 +216,9 @@ namespace MediaBrowser.Controller.Entities
[IgnoreDataMember]
public Guid Id { get; set; }
+ [IgnoreDataMember]
+ public Guid OwnerId { get; set; }
+
/// <summary>
/// Gets or sets a value indicating whether this instance is hd.
/// </summary>
@@ -336,12 +324,31 @@ namespace MediaBrowser.Controller.Entities
{
get
{
+ if (OwnerId != Guid.Empty)
+ {
+ return true;
+ }
+
+ // legacy
+
// Local trailer, special feature, theme video, etc.
// An item that belongs to another item but is not part of the Parent-Child tree
- return !IsFolder && ParentId == Guid.Empty && LocationType == LocationType.FileSystem;
+ // This is a hack for now relying on ExtraType. Eventually we may need to persist this
+ if (ParentId == Guid.Empty && !IsFolder && LocationType == LocationType.FileSystem)
+ {
+ return true;
+ }
+
+ return false;
}
}
+ public BaseItem GetOwner()
+ {
+ var ownerId = OwnerId;
+ return ownerId == Guid.Empty ? null : LibraryManager.GetItemById(ownerId);
+ }
+
/// <summary>
/// Gets or sets the type of the location.
/// </summary>
@@ -664,27 +671,34 @@ namespace MediaBrowser.Controller.Entities
}
var sortable = Name.Trim().ToLower();
- sortable = ConfigurationManager.Configuration.SortRemoveCharacters.Aggregate(sortable, (current, search) => current.Replace(search.ToLower(), string.Empty));
- sortable = ConfigurationManager.Configuration.SortReplaceCharacters.Aggregate(sortable, (current, search) => current.Replace(search.ToLower(), " "));
+ foreach (var removeChar in ConfigurationManager.Configuration.SortRemoveCharacters)
+ {
+ sortable = sortable.Replace(removeChar, string.Empty);
+ }
+
+ foreach (var replaceChar in ConfigurationManager.Configuration.SortReplaceCharacters)
+ {
+ sortable = sortable.Replace(replaceChar, " ");
+ }
foreach (var search in ConfigurationManager.Configuration.SortRemoveWords)
{
- var searchLower = search.ToLower();
// Remove from beginning if a space follows
- if (sortable.StartsWith(searchLower + " "))
+ if (sortable.StartsWith(search + " "))
{
- sortable = sortable.Remove(0, searchLower.Length + 1);
+ sortable = sortable.Remove(0, search.Length + 1);
}
// Remove from middle if surrounded by spaces
- sortable = sortable.Replace(" " + searchLower + " ", " ");
+ sortable = sortable.Replace(" " + search + " ", " ");
// Remove from end if followed by a space
- if (sortable.EndsWith(" " + searchLower))
+ if (sortable.EndsWith(" " + search))
{
- sortable = sortable.Remove(sortable.Length - (searchLower.Length + 1));
+ sortable = sortable.Remove(sortable.Length - (search.Length + 1));
}
}
+
return ModifySortChunks(sortable);
}
@@ -735,17 +749,12 @@ namespace MediaBrowser.Controller.Entities
ParentId = parent == null ? Guid.Empty : parent.Id;
}
- [IgnoreDataMember]
- public IEnumerable<Folder> Parents
- {
- get { return GetParents().OfType<Folder>(); }
- }
-
public BaseItem GetParent()
{
- if (ParentId != Guid.Empty)
+ var parentId = ParentId;
+ if (parentId != Guid.Empty)
{
- return LibraryManager.GetItemById(ParentId);
+ return LibraryManager.GetItemById(parentId);
}
return null;
@@ -771,7 +780,15 @@ namespace MediaBrowser.Controller.Entities
public T FindParent<T>()
where T : Folder
{
- return GetParents().OfType<T>().FirstOrDefault();
+ foreach (var parent in GetParents())
+ {
+ var item = parent as T;
+ if (item != null)
+ {
+ return item;
+ }
+ }
+ return null;
}
[IgnoreDataMember]
@@ -779,11 +796,13 @@ namespace MediaBrowser.Controller.Entities
{
get
{
- if (ParentId == Guid.Empty)
+ var parentId = ParentId;
+
+ if (parentId == Guid.Empty)
{
return null;
}
- return ParentId;
+ return parentId;
}
}
@@ -918,9 +937,10 @@ namespace MediaBrowser.Controller.Entities
{
get
{
- if (!string.IsNullOrWhiteSpace(OfficialRating))
+ var officialRating = OfficialRating;
+ if (!string.IsNullOrWhiteSpace(officialRating))
{
- return OfficialRating;
+ return officialRating;
}
var parent = DisplayParent;
@@ -938,9 +958,10 @@ namespace MediaBrowser.Controller.Entities
{
get
{
- if (!string.IsNullOrWhiteSpace(CustomRating))
+ var customRating = CustomRating;
+ if (!string.IsNullOrWhiteSpace(customRating))
{
- return CustomRating;
+ return customRating;
}
var parent = DisplayParent;
@@ -1000,8 +1021,11 @@ namespace MediaBrowser.Controller.Entities
{
audio = dbItem;
}
-
- audio.ExtraType = MediaBrowser.Model.Entities.ExtraType.ThemeSong;
+ else
+ {
+ // item is new
+ audio.ExtraType = MediaBrowser.Model.Entities.ExtraType.ThemeSong;
+ }
return audio;
@@ -1030,8 +1054,11 @@ namespace MediaBrowser.Controller.Entities
{
item = dbItem;
}
-
- item.ExtraType = MediaBrowser.Model.Entities.ExtraType.ThemeVideo;
+ else
+ {
+ // item is new
+ item.ExtraType = MediaBrowser.Model.Entities.ExtraType.ThemeVideo;
+ }
return item;
@@ -1176,8 +1203,25 @@ namespace MediaBrowser.Controller.Entities
var newItemIds = newItems.Select(i => i.Id).ToArray();
var itemsChanged = !item.LocalTrailerIds.SequenceEqual(newItemIds);
+ var ownerId = item.Id;
+
+ var tasks = newItems.Select(i =>
+ {
+ var subOptions = new MetadataRefreshOptions(options);
+
+ if (!i.ExtraType.HasValue ||
+ i.ExtraType.Value != Model.Entities.ExtraType.Trailer ||
+ i.OwnerId != ownerId ||
+ i.ParentId != Guid.Empty)
+ {
+ i.ExtraType = Model.Entities.ExtraType.Trailer;
+ i.OwnerId = ownerId;
+ i.ParentId = Guid.Empty;
+ subOptions.ForceSave = true;
+ }
- var tasks = newItems.Select(i => RefreshMetadataForOwnedItem(i, true, options, cancellationToken));
+ return RefreshMetadataForOwnedItem(i, true, subOptions, cancellationToken);
+ });
await Task.WhenAll(tasks).ConfigureAwait(false);
@@ -1194,13 +1238,20 @@ namespace MediaBrowser.Controller.Entities
var themeVideosChanged = !item.ThemeVideoIds.SequenceEqual(newThemeVideoIds);
+ var ownerId = item.Id;
+
var tasks = newThemeVideos.Select(i =>
{
var subOptions = new MetadataRefreshOptions(options);
- if (!i.IsThemeMedia)
+ if (!i.ExtraType.HasValue ||
+ i.ExtraType.Value != Model.Entities.ExtraType.ThemeVideo ||
+ i.OwnerId != ownerId ||
+ i.ParentId != Guid.Empty)
{
- i.ExtraType = MediaBrowser.Model.Entities.ExtraType.ThemeVideo;
+ i.ExtraType = Model.Entities.ExtraType.ThemeVideo;
+ i.OwnerId = ownerId;
+ i.ParentId = Guid.Empty;
subOptions.ForceSave = true;
}
@@ -1224,13 +1275,20 @@ namespace MediaBrowser.Controller.Entities
var themeSongsChanged = !item.ThemeSongIds.SequenceEqual(newThemeSongIds);
+ var ownerId = item.Id;
+
var tasks = newThemeSongs.Select(i =>
{
var subOptions = new MetadataRefreshOptions(options);
- if (!i.IsThemeMedia)
+ if (!i.ExtraType.HasValue ||
+ i.ExtraType.Value != Model.Entities.ExtraType.ThemeSong ||
+ i.OwnerId != ownerId ||
+ i.ParentId != Guid.Empty)
{
- i.ExtraType = MediaBrowser.Model.Entities.ExtraType.ThemeSong;
+ i.ExtraType = Model.Entities.ExtraType.ThemeSong;
+ i.OwnerId = ownerId;
+ i.ParentId = Guid.Empty;
subOptions.ForceSave = true;
}
@@ -1866,7 +1924,6 @@ namespace MediaBrowser.Controller.Entities
{
existingImage.Path = image.Path;
existingImage.DateModified = image.DateModified;
- existingImage.IsPlaceholder = image.IsPlaceholder;
}
else
@@ -1900,7 +1957,6 @@ namespace MediaBrowser.Controller.Entities
image.Path = file.FullName;
image.DateModified = imageInfo.DateModified;
- image.IsPlaceholder = false;
}
}
@@ -2140,8 +2196,8 @@ namespace MediaBrowser.Controller.Entities
}
var filename = System.IO.Path.GetFileNameWithoutExtension(Path);
- var extensions = new[] { ".nfo", ".xml", ".srt" }.ToList();
- extensions.AddRange(SupportedImageExtensionsList);
+ var extensions = new List<string> { ".nfo", ".xml", ".srt" };
+ extensions.AddRange(SupportedImageExtensions);
return FileSystem.GetFiles(FileSystem.GetDirectoryName(Path), extensions.ToArray(extensions.Count), false, false)
.Where(i => System.IO.Path.GetFileNameWithoutExtension(i.FullName).StartsWith(filename, StringComparison.OrdinalIgnoreCase))
@@ -2357,6 +2413,14 @@ namespace MediaBrowser.Controller.Entities
newOptions.ForceSave = true;
}
+ //var parentId = Id;
+ //if (!video.IsOwnedItem || video.ParentId != parentId)
+ //{
+ // video.IsOwnedItem = true;
+ // video.ParentId = parentId;
+ // newOptions.ForceSave = true;
+ //}
+
if (video == null)
{
return Task.FromResult(true);
@@ -2392,7 +2456,14 @@ namespace MediaBrowser.Controller.Entities
return this;
}
- return GetParents().FirstOrDefault(i => i.IsTopParent);
+ foreach (var parent in GetParents())
+ {
+ if (parent.IsTopParent)
+ {
+ return parent;
+ }
+ }
+ return null;
}
[IgnoreDataMember]
@@ -2473,5 +2544,21 @@ namespace MediaBrowser.Controller.Entities
{
return null;
}
+
+ public virtual ItemUpdateType OnMetadataChanged()
+ {
+ var updateType = ItemUpdateType.None;
+
+ var item = this;
+
+ var inheritedParentalRatingValue = item.GetInheritedParentalRatingValue() ?? 0;
+ if (inheritedParentalRatingValue != item.InheritedParentalRatingValue)
+ {
+ item.InheritedParentalRatingValue = inheritedParentalRatingValue;
+ updateType |= ItemUpdateType.MetadataImport;
+ }
+
+ return updateType;
+ }
}
} \ No newline at end of file