diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-02-13 00:11:54 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-02-13 00:11:54 -0500 |
| commit | eec9e0482525c400e9dc7cb17bc000434adba105 (patch) | |
| tree | 73f51bc882804ff92b82d1e85a46a6cec10b6d51 /MediaBrowser.Controller/Entities | |
| parent | 9254c37d52af3d16ec9e46b3e211ecc7dc4f1617 (diff) | |
take photos into the core
Diffstat (limited to 'MediaBrowser.Controller/Entities')
| -rw-r--r-- | MediaBrowser.Controller/Entities/AdultVideo.cs | 22 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/AggregateFolder.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/BaseItem.cs | 48 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/CollectionFolder.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Folder.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/IHasMetadata.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Movies/Movie.cs | 30 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Photo.cs | 24 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/TV/Episode.cs | 27 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/TV/Season.cs | 12 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/TV/Series.cs | 21 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/UserRootFolder.cs | 11 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Video.cs | 6 |
13 files changed, 159 insertions, 54 deletions
diff --git a/MediaBrowser.Controller/Entities/AdultVideo.cs b/MediaBrowser.Controller/Entities/AdultVideo.cs index fc7632152..9791f7cf7 100644 --- a/MediaBrowser.Controller/Entities/AdultVideo.cs +++ b/MediaBrowser.Controller/Entities/AdultVideo.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using MediaBrowser.Controller.Providers; namespace MediaBrowser.Controller.Entities { @@ -22,5 +23,26 @@ namespace MediaBrowser.Controller.Entities { Taglines = new List<string>(); } + + public override bool BeforeMetadataRefresh() + { + var hasChanges = base.BeforeMetadataRefresh(); + + if (!ProductionYear.HasValue) + { + int? yearInName = null; + string name; + + NameParser.ParseName(Name, out name, out yearInName); + + if (yearInName.HasValue) + { + ProductionYear = yearInName; + hasChanges = true; + } + } + + return hasChanges; + } } } diff --git a/MediaBrowser.Controller/Entities/AggregateFolder.cs b/MediaBrowser.Controller/Entities/AggregateFolder.cs index 5cabe1cfe..362096b5e 100644 --- a/MediaBrowser.Controller/Entities/AggregateFolder.cs +++ b/MediaBrowser.Controller/Entities/AggregateFolder.cs @@ -66,7 +66,7 @@ namespace MediaBrowser.Controller.Entities { var path = ContainingFolderPath; - var args = new ItemResolveArgs(ConfigurationManager.ApplicationPaths, LibraryManager) + var args = new ItemResolveArgs(ConfigurationManager.ApplicationPaths, LibraryManager, directoryService) { FileInfo = new DirectoryInfo(path), Path = path, diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 8dcf08642..415b49f80 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -472,7 +472,7 @@ namespace MediaBrowser.Controller.Entities /// Loads local trailers from the file system /// </summary> /// <returns>List{Video}.</returns> - private IEnumerable<Trailer> LoadLocalTrailers(List<FileSystemInfo> fileSystemChildren) + private IEnumerable<Trailer> LoadLocalTrailers(List<FileSystemInfo> fileSystemChildren, IDirectoryService directoryService) { var files = fileSystemChildren.OfType<DirectoryInfo>() .Where(i => string.Equals(i.Name, TrailerFolderName, StringComparison.OrdinalIgnoreCase)) @@ -484,7 +484,7 @@ namespace MediaBrowser.Controller.Entities .Where(i => System.IO.Path.GetFileNameWithoutExtension(i.Name).EndsWith(XbmcTrailerFileSuffix, StringComparison.OrdinalIgnoreCase) && !string.Equals(Path, i.FullName, StringComparison.OrdinalIgnoreCase)) ); - return LibraryManager.ResolvePaths<Trailer>(files, null).Select(video => + return LibraryManager.ResolvePaths<Trailer>(files, directoryService, null).Select(video => { // Try to retrieve it from the db. If we don't find it, use the resolved version var dbItem = LibraryManager.GetItemById(video.Id) as Trailer; @@ -504,7 +504,7 @@ namespace MediaBrowser.Controller.Entities /// Loads the theme songs. /// </summary> /// <returns>List{Audio.Audio}.</returns> - private IEnumerable<Audio.Audio> LoadThemeSongs(List<FileSystemInfo> fileSystemChildren) + private IEnumerable<Audio.Audio> LoadThemeSongs(List<FileSystemInfo> fileSystemChildren, IDirectoryService directoryService) { var files = fileSystemChildren.OfType<DirectoryInfo>() .Where(i => string.Equals(i.Name, ThemeSongsFolderName, StringComparison.OrdinalIgnoreCase)) @@ -516,7 +516,7 @@ namespace MediaBrowser.Controller.Entities .Where(i => string.Equals(System.IO.Path.GetFileNameWithoutExtension(i.Name), ThemeSongFilename, StringComparison.OrdinalIgnoreCase)) ); - return LibraryManager.ResolvePaths<Audio.Audio>(files, null).Select(audio => + return LibraryManager.ResolvePaths<Audio.Audio>(files, directoryService, null).Select(audio => { // Try to retrieve it from the db. If we don't find it, use the resolved version var dbItem = LibraryManager.GetItemById(audio.Id) as Audio.Audio; @@ -536,13 +536,13 @@ namespace MediaBrowser.Controller.Entities /// Loads the video backdrops. /// </summary> /// <returns>List{Video}.</returns> - private IEnumerable<Video> LoadThemeVideos(IEnumerable<FileSystemInfo> fileSystemChildren) + private IEnumerable<Video> LoadThemeVideos(IEnumerable<FileSystemInfo> fileSystemChildren, IDirectoryService directoryService) { var files = fileSystemChildren.OfType<DirectoryInfo>() .Where(i => string.Equals(i.Name, ThemeVideosFolderName, StringComparison.OrdinalIgnoreCase)) .SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly)); - return LibraryManager.ResolvePaths<Video>(files, null).Select(item => + return LibraryManager.ResolvePaths<Video>(files, directoryService, null).Select(item => { // Try to retrieve it from the db. If we don't find it, use the resolved version var dbItem = LibraryManager.GetItemById(item.Id) as Video; @@ -579,15 +579,22 @@ namespace MediaBrowser.Controller.Entities { options.DirectoryService = options.DirectoryService ?? new DirectoryService(Logger); - var files = locationType == LocationType.FileSystem || locationType == LocationType.Offline ? - GetFileSystemChildren(options.DirectoryService).ToList() : - new List<FileSystemInfo>(); + try + { + var files = locationType == LocationType.FileSystem || locationType == LocationType.Offline ? + GetFileSystemChildren(options.DirectoryService).ToList() : + new List<FileSystemInfo>(); - var ownedItemsChanged = await RefreshedOwnedItems(options, files, cancellationToken).ConfigureAwait(false); + var ownedItemsChanged = await RefreshedOwnedItems(options, files, cancellationToken).ConfigureAwait(false); - if (ownedItemsChanged) + if (ownedItemsChanged) + { + requiresSave = true; + } + } + catch (Exception ex) { - requiresSave = true; + Logger.ErrorException("Error refreshing owned items for {0}", ex, Path ?? Name); } } @@ -650,7 +657,7 @@ namespace MediaBrowser.Controller.Entities private async Task<bool> RefreshLocalTrailers(IHasTrailers item, MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken) { - var newItems = LoadLocalTrailers(fileSystemChildren).ToList(); + var newItems = LoadLocalTrailers(fileSystemChildren, options.DirectoryService).ToList(); var newItemIds = newItems.Select(i => i.Id).ToList(); var itemsChanged = !item.LocalTrailerIds.SequenceEqual(newItemIds); @@ -666,7 +673,7 @@ namespace MediaBrowser.Controller.Entities private async Task<bool> RefreshThemeVideos(IHasThemeMedia item, MetadataRefreshOptions options, IEnumerable<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken) { - var newThemeVideos = LoadThemeVideos(fileSystemChildren).ToList(); + var newThemeVideos = LoadThemeVideos(fileSystemChildren, options.DirectoryService).ToList(); var newThemeVideoIds = newThemeVideos.Select(i => i.Id).ToList(); @@ -686,7 +693,7 @@ namespace MediaBrowser.Controller.Entities /// </summary> private async Task<bool> RefreshThemeSongs(IHasThemeMedia item, MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken) { - var newThemeSongs = LoadThemeSongs(fileSystemChildren).ToList(); + var newThemeSongs = LoadThemeSongs(fileSystemChildren, options.DirectoryService).ToList(); var newThemeSongIds = newThemeSongs.Select(i => i.Id).ToList(); var themeSongsChanged = !item.ThemeSongIds.SequenceEqual(newThemeSongIds); @@ -1422,20 +1429,19 @@ namespace MediaBrowser.Controller.Entities } /// <summary> - /// This is called before any metadata refresh and returns ItemUpdateType indictating if changes were made, and what. + /// This is called before any metadata refresh and returns true or false indicating if changes were made /// </summary> - /// <returns>ItemUpdateType.</returns> - public virtual ItemUpdateType BeforeMetadataRefresh() + public virtual bool BeforeMetadataRefresh() { - var updateType = ItemUpdateType.None; + var hasChanges = false; if (string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(Path)) { Name = System.IO.Path.GetFileNameWithoutExtension(Path); - updateType = updateType | ItemUpdateType.MetadataEdit; + hasChanges = true; } - return updateType; + return hasChanges; } } } diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs index 416796b69..88219bcbf 100644 --- a/MediaBrowser.Controller/Entities/CollectionFolder.cs +++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs @@ -70,7 +70,7 @@ namespace MediaBrowser.Controller.Entities { var path = ContainingFolderPath; - var args = new ItemResolveArgs(ConfigurationManager.ApplicationPaths, LibraryManager) + var args = new ItemResolveArgs(ConfigurationManager.ApplicationPaths, LibraryManager, directoryService) { FileInfo = new DirectoryInfo(path), Path = path, diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index cb14ed099..b718864d2 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -681,7 +681,7 @@ namespace MediaBrowser.Controller.Entities /// <returns>IEnumerable{BaseItem}.</returns> protected virtual IEnumerable<BaseItem> GetNonCachedChildren(IDirectoryService directoryService) { - return LibraryManager.ResolvePaths<BaseItem>(GetFileSystemChildren(directoryService), this); + return LibraryManager.ResolvePaths<BaseItem>(GetFileSystemChildren(directoryService), directoryService, this); } /// <summary> diff --git a/MediaBrowser.Controller/Entities/IHasMetadata.cs b/MediaBrowser.Controller/Entities/IHasMetadata.cs index 0285b6749..7182d086a 100644 --- a/MediaBrowser.Controller/Entities/IHasMetadata.cs +++ b/MediaBrowser.Controller/Entities/IHasMetadata.cs @@ -51,9 +51,9 @@ namespace MediaBrowser.Controller.Entities Task UpdateToRepository(ItemUpdateType updateReason, CancellationToken cancellationToken); /// <summary> - /// This is called before any metadata refresh and returns ItemUpdateType indictating if changes were made, and what. + /// This is called before any metadata refresh and returns true or false indicating if changes were made /// </summary> - /// <returns>ItemUpdateType.</returns> - ItemUpdateType BeforeMetadataRefresh(); + /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> + bool BeforeMetadataRefresh(); } } diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs index 8eba21df0..846a2ae7b 100644 --- a/MediaBrowser.Controller/Entities/Movies/Movie.cs +++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Providers; +using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Entities; using System; @@ -117,7 +118,7 @@ namespace MediaBrowser.Controller.Entities.Movies private async Task<bool> RefreshSpecialFeatures(MetadataRefreshOptions options, IEnumerable<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken) { - var newItems = LoadSpecialFeatures(fileSystemChildren).ToList(); + var newItems = LoadSpecialFeatures(fileSystemChildren, options.DirectoryService).ToList(); var newItemIds = newItems.Select(i => i.Id).ToList(); var itemsChanged = !SpecialFeatureIds.SequenceEqual(newItemIds); @@ -135,13 +136,13 @@ namespace MediaBrowser.Controller.Entities.Movies /// Loads the special features. /// </summary> /// <returns>IEnumerable{Video}.</returns> - private IEnumerable<Video> LoadSpecialFeatures(IEnumerable<FileSystemInfo> fileSystemChildren) + private IEnumerable<Video> LoadSpecialFeatures(IEnumerable<FileSystemInfo> fileSystemChildren, IDirectoryService directoryService) { var files = fileSystemChildren.OfType<DirectoryInfo>() .Where(i => string.Equals(i.Name, "extras", StringComparison.OrdinalIgnoreCase) || string.Equals(i.Name, "specials", StringComparison.OrdinalIgnoreCase)) .SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly)); - return LibraryManager.ResolvePaths<Video>(files, null).Select(video => + return LibraryManager.ResolvePaths<Video>(files, directoryService, null).Select(video => { // Try to retrieve it from the db. If we don't find it, use the resolved version var dbItem = LibraryManager.GetItemById(video.Id) as Video; @@ -166,5 +167,26 @@ namespace MediaBrowser.Controller.Entities.Movies { return GetItemLookupInfo<MovieInfo>(); } + + public override bool BeforeMetadataRefresh() + { + var hasChanges = base.BeforeMetadataRefresh(); + + if (!ProductionYear.HasValue) + { + int? yearInName = null; + string name; + + NameParser.ParseName(Name, out name, out yearInName); + + if (yearInName.HasValue) + { + ProductionYear = yearInName; + hasChanges = true; + } + } + + return hasChanges; + } } } diff --git a/MediaBrowser.Controller/Entities/Photo.cs b/MediaBrowser.Controller/Entities/Photo.cs new file mode 100644 index 000000000..96995c315 --- /dev/null +++ b/MediaBrowser.Controller/Entities/Photo.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; + +namespace MediaBrowser.Controller.Entities +{ + public class Photo : BaseItem, IHasTags, IHasTaglines + { + public List<string> Tags { get; set; } + public List<string> Taglines { get; set; } + + public Photo() + { + Tags = new List<string>(); + Taglines = new List<string>(); + } + + public override string MediaType + { + get + { + return Model.Entities.MediaType.Photo; + } + } + } +} diff --git a/MediaBrowser.Controller/Entities/TV/Episode.cs b/MediaBrowser.Controller/Entities/TV/Episode.cs index daff3dd6c..1240bbb9f 100644 --- a/MediaBrowser.Controller/Entities/TV/Episode.cs +++ b/MediaBrowser.Controller/Entities/TV/Episode.cs @@ -263,32 +263,32 @@ namespace MediaBrowser.Controller.Entities.TV return id; } - public override ItemUpdateType BeforeMetadataRefresh() + public override bool BeforeMetadataRefresh() { - var updateType = base.BeforeMetadataRefresh(); + var hasChanges = base.BeforeMetadataRefresh(); var locationType = LocationType; if (locationType == LocationType.FileSystem || locationType == LocationType.Offline) { if (!IndexNumber.HasValue && !string.IsNullOrEmpty(Path)) { - IndexNumber = IndexNumber ?? TVUtils.GetEpisodeNumberFromFile(Path, Parent is Season); + IndexNumber = TVUtils.GetEpisodeNumberFromFile(Path, Parent is Season); // If a change was made record it if (IndexNumber.HasValue) { - updateType = updateType | ItemUpdateType.MetadataImport; + hasChanges = true; } } if (!IndexNumberEnd.HasValue && !string.IsNullOrEmpty(Path)) { - IndexNumberEnd = IndexNumberEnd ?? TVUtils.GetEndingEpisodeNumberFromFile(Path); + IndexNumberEnd = TVUtils.GetEndingEpisodeNumberFromFile(Path); // If a change was made record it if (IndexNumberEnd.HasValue) { - updateType = updateType | ItemUpdateType.MetadataImport; + hasChanges = true; } } } @@ -302,14 +302,25 @@ namespace MediaBrowser.Controller.Entities.TV ParentIndexNumber = season.IndexNumber; } + if (!ParentIndexNumber.HasValue && !string.IsNullOrEmpty(Path)) + { + ParentIndexNumber = TVUtils.GetSeasonNumberFromPath(Path); + + // If a change was made record it + if (ParentIndexNumber.HasValue) + { + hasChanges = true; + } + } + // If a change was made record it if (ParentIndexNumber.HasValue) { - updateType = updateType | ItemUpdateType.MetadataImport; + hasChanges = true; } } - return updateType; + return hasChanges; } } } diff --git a/MediaBrowser.Controller/Entities/TV/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs index 830ccb8a2..2847c397e 100644 --- a/MediaBrowser.Controller/Entities/TV/Season.cs +++ b/MediaBrowser.Controller/Entities/TV/Season.cs @@ -254,12 +254,12 @@ namespace MediaBrowser.Controller.Entities.TV } /// <summary> - /// This is called before any metadata refresh and returns ItemUpdateType indictating if changes were made, and what. + /// This is called before any metadata refresh and returns true or false indicating if changes were made /// </summary> - /// <returns>ItemUpdateType.</returns> - public override ItemUpdateType BeforeMetadataRefresh() + /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> + public override bool BeforeMetadataRefresh() { - var updateType = base.BeforeMetadataRefresh(); + var hasChanges = base.BeforeMetadataRefresh(); var locationType = LocationType; @@ -272,12 +272,12 @@ namespace MediaBrowser.Controller.Entities.TV // If a change was made record it if (IndexNumber.HasValue) { - updateType = updateType | ItemUpdateType.MetadataImport; + hasChanges = true; } } } - return updateType; + return hasChanges; } } } diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs index 0e07654d6..4696c8a0f 100644 --- a/MediaBrowser.Controller/Entities/TV/Series.cs +++ b/MediaBrowser.Controller/Entities/TV/Series.cs @@ -228,5 +228,26 @@ namespace MediaBrowser.Controller.Entities.TV { return GetItemLookupInfo<SeriesInfo>(); } + + public override bool BeforeMetadataRefresh() + { + var hasChanges = base.BeforeMetadataRefresh(); + + if (!ProductionYear.HasValue) + { + int? yearInName = null; + string name; + + NameParser.ParseName(Name, out name, out yearInName); + + if (yearInName.HasValue) + { + ProductionYear = yearInName; + hasChanges = true; + } + } + + return hasChanges; + } } } diff --git a/MediaBrowser.Controller/Entities/UserRootFolder.cs b/MediaBrowser.Controller/Entities/UserRootFolder.cs index dc3d4c384..9a8d3e7f4 100644 --- a/MediaBrowser.Controller/Entities/UserRootFolder.cs +++ b/MediaBrowser.Controller/Entities/UserRootFolder.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; +using MediaBrowser.Controller.Providers; using System.Collections.Generic; using System.Linq; @@ -20,17 +19,17 @@ namespace MediaBrowser.Controller.Entities return base.GetNonCachedChildren(directoryService).Concat(LibraryManager.RootFolder.VirtualChildren); } - public override ItemUpdateType BeforeMetadataRefresh() + public override bool BeforeMetadataRefresh() { - var updateType = base.BeforeMetadataRefresh(); + var hasChanges = base.BeforeMetadataRefresh(); if (string.Equals("default", Name, System.StringComparison.OrdinalIgnoreCase)) { Name = "Default Media Library"; - updateType = updateType | ItemUpdateType.MetadataEdit; + hasChanges = true; } - return updateType; + return hasChanges; } } } diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index e778b38bd..e16683d6d 100644 --- a/MediaBrowser.Controller/Entities/Video.cs +++ b/MediaBrowser.Controller/Entities/Video.cs @@ -192,7 +192,7 @@ namespace MediaBrowser.Controller.Entities /// <returns>Task{System.Boolean}.</returns> private async Task<bool> RefreshAdditionalParts(MetadataRefreshOptions options, IEnumerable<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken) { - var newItems = LoadAdditionalParts(fileSystemChildren).ToList(); + var newItems = LoadAdditionalParts(fileSystemChildren, options.DirectoryService).ToList(); var newItemIds = newItems.Select(i => i.Id).ToList(); @@ -211,7 +211,7 @@ namespace MediaBrowser.Controller.Entities /// Loads the additional parts. /// </summary> /// <returns>IEnumerable{Video}.</returns> - private IEnumerable<Video> LoadAdditionalParts(IEnumerable<FileSystemInfo> fileSystemChildren) + private IEnumerable<Video> LoadAdditionalParts(IEnumerable<FileSystemInfo> fileSystemChildren, IDirectoryService directoryService) { IEnumerable<FileSystemInfo> files; @@ -242,7 +242,7 @@ namespace MediaBrowser.Controller.Entities }); } - return LibraryManager.ResolvePaths<Video>(files, null).Select(video => + return LibraryManager.ResolvePaths<Video>(files, directoryService, null).Select(video => { // Try to retrieve it from the db. If we don't find it, use the resolved version var dbItem = LibraryManager.GetItemById(video.Id) as Video; |
