From cf9ef0e43d01decd743c5444785ee247bda3cb32 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 10 Feb 2014 15:11:46 -0500 Subject: [PATCH] fix refresh of tv recordings --- MediaBrowser.Api/Library/LibraryService.cs | 12 +---- MediaBrowser.Api/LibraryService.cs | 14 +++--- MediaBrowser.Controller/Entities/BaseItem.cs | 10 +++++ MediaBrowser.Controller/Entities/Folder.cs | 45 +++---------------- .../Entities/IHasImages.cs | 6 +++ .../Entities/TV/Episode.cs | 4 +- .../Entities/UserRootFolder.cs | 18 +++++++- .../LiveTv/LiveTvAudioRecording.cs | 13 ------ .../LiveTv/LiveTvVideoRecording.cs | 13 ------ .../InternalMetadataFolderImageProvider.cs | 12 +---- .../All/LocalImageProvider.cs | 7 ++- MediaBrowser.Providers/BaseXmlProvider.cs | 7 ++- .../Folders/CollectionFolderImageProvider.cs | 2 +- MediaBrowser.Providers/Manager/ImageSaver.cs | 8 +--- .../Manager/ProviderManager.cs | 2 +- .../MediaInfo/FFProbeProvider.cs | 2 +- .../Savers/AlbumXmlSaver.cs | 3 +- .../Savers/ArtistXmlSaver.cs | 3 +- .../Savers/BoxSetXmlSaver.cs | 3 +- .../Savers/ChannelXmlSaver.cs | 3 +- .../Savers/EpisodeXmlSaver.cs | 3 +- .../Savers/FolderXmlSaver.cs | 3 +- .../Savers/GameSystemXmlSaver.cs | 3 +- MediaBrowser.Providers/Savers/GameXmlSaver.cs | 3 +- .../Savers/MovieXmlSaver.cs | 3 +- .../Savers/PersonXmlSaver.cs | 3 +- .../Savers/SeasonXmlSaver.cs | 3 +- .../Savers/SeriesXmlSaver.cs | 3 +- .../TV/EpisodeLocalImageProvider.cs | 25 +---------- .../TV/EpisodeXmlProvider.cs | 10 +++++ .../EntryPoints/LibraryChangedNotifier.cs | 5 +-- .../IO/LibraryMonitor.cs | 1 - .../Library/LibraryManager.cs | 17 +------ .../Session/SessionManager.cs | 6 +-- 34 files changed, 88 insertions(+), 187 deletions(-) diff --git a/MediaBrowser.Api/Library/LibraryService.cs b/MediaBrowser.Api/Library/LibraryService.cs index 17520ba1c4..6ffa10191c 100644 --- a/MediaBrowser.Api/Library/LibraryService.cs +++ b/MediaBrowser.Api/Library/LibraryService.cs @@ -69,17 +69,7 @@ namespace MediaBrowser.Api.Library public object Get(GetPhyscialPaths request) { var result = _libraryManager.RootFolder.Children - .SelectMany(c => - { - var locationType = c.LocationType; - - if (locationType != LocationType.Remote && locationType != LocationType.Virtual) - { - return c.PhysicalLocations; - } - - return new List(); - }) + .SelectMany(c => c.PhysicalLocations) .ToList(); return ToOptimizedSerializedResultUsingCache(result); diff --git a/MediaBrowser.Api/LibraryService.cs b/MediaBrowser.Api/LibraryService.cs index a7a58dbfb4..aeb795a78d 100644 --- a/MediaBrowser.Api/LibraryService.cs +++ b/MediaBrowser.Api/LibraryService.cs @@ -243,8 +243,8 @@ namespace MediaBrowser.Api public object Get(GetFile request) { var item = _dtoService.GetItemByDtoId(request.Id); - - if (item.LocationType == LocationType.Remote || item.LocationType == LocationType.Virtual) + var locationType = item.LocationType; + if (locationType == LocationType.Remote || locationType == LocationType.Virtual) { throw new ArgumentException("This command cannot be used for remote or virtual items."); } @@ -331,8 +331,7 @@ namespace MediaBrowser.Api { if (item.Parent is AggregateFolder) { - return user.RootFolder.GetChildren(user, true).FirstOrDefault(i => i.LocationType == LocationType.FileSystem && - i.PhysicalLocations.Contains(item.Path)); + return user.RootFolder.GetChildren(user, true).FirstOrDefault(i => i.PhysicalLocations.Contains(item.Path)); } return item; @@ -442,12 +441,9 @@ namespace MediaBrowser.Api var parent = item.Parent; - if (item.LocationType == LocationType.Offline) - { - throw new InvalidOperationException(string.Format("{0} is currently offline.", item.Name)); - } + var locationType = item.LocationType; - if (item.LocationType == LocationType.FileSystem) + if (locationType == LocationType.FileSystem || locationType == LocationType.Offline) { foreach (var path in item.GetDeletePaths().ToList()) { diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 38f40ea482..8dcf086425 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -157,6 +157,16 @@ namespace MediaBrowser.Controller.Entities } } + public virtual bool SupportsLocalMetadata + { + get + { + var locationType = LocationType; + + return locationType == LocationType.FileSystem || locationType == LocationType.Offline; + } + } + /// /// This is just a helper for convenience /// diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index f0b044d435..310ddf64ca 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -1052,50 +1052,17 @@ namespace MediaBrowser.Controller.Entities throw new ArgumentNullException(); } - try + if (string.Equals(Path, path, StringComparison.OrdinalIgnoreCase)) { - var locationType = LocationType; - - if (locationType == LocationType.Remote && string.Equals(Path, path, StringComparison.OrdinalIgnoreCase)) - { - return this; - } - - if (locationType != LocationType.Virtual && PhysicalLocations.Contains(path, StringComparer.OrdinalIgnoreCase)) - { - return this; - } - } - catch (IOException ex) - { - Logger.ErrorException("Error getting ResolveArgs for {0}", ex, Path); + return this; } - return RecursiveChildren.Where(i => i.LocationType != LocationType.Virtual).FirstOrDefault(i => + if (PhysicalLocations.Contains(path, StringComparer.OrdinalIgnoreCase)) { - try - { - if (string.Equals(i.Path, path, StringComparison.OrdinalIgnoreCase)) - { - return true; - } - - if (i.LocationType != LocationType.Remote) - { - if (i.PhysicalLocations.Contains(path, StringComparer.OrdinalIgnoreCase)) - { - return true; - } - } + return this; + } - return false; - } - catch (IOException ex) - { - Logger.ErrorException("Error getting ResolveArgs for {0}", ex, Path); - return false; - } - }); + return RecursiveChildren.FirstOrDefault(i => string.Equals(i.Path, path, StringComparison.OrdinalIgnoreCase) || i.PhysicalLocations.Contains(path, StringComparer.OrdinalIgnoreCase)); } public override bool IsPlayed(User user) diff --git a/MediaBrowser.Controller/Entities/IHasImages.cs b/MediaBrowser.Controller/Entities/IHasImages.cs index eee1693638..d53eba11a1 100644 --- a/MediaBrowser.Controller/Entities/IHasImages.cs +++ b/MediaBrowser.Controller/Entities/IHasImages.cs @@ -136,6 +136,12 @@ namespace MediaBrowser.Controller.Entities /// /// true if [is save local metadata enabled]; otherwise, false. bool IsSaveLocalMetadataEnabled(); + + /// + /// Gets a value indicating whether [supports local metadata]. + /// + /// true if [supports local metadata]; otherwise, false. + bool SupportsLocalMetadata { get; } } public static class HasImagesExtensions diff --git a/MediaBrowser.Controller/Entities/TV/Episode.cs b/MediaBrowser.Controller/Entities/TV/Episode.cs index 39c11569a5..daff3dd6c4 100644 --- a/MediaBrowser.Controller/Entities/TV/Episode.cs +++ b/MediaBrowser.Controller/Entities/TV/Episode.cs @@ -185,7 +185,7 @@ namespace MediaBrowser.Controller.Entities.TV { get { - return LocationType == Model.Entities.LocationType.Virtual && PremiereDate.HasValue && PremiereDate.Value < DateTime.UtcNow; + return LocationType == LocationType.Virtual && PremiereDate.HasValue && PremiereDate.Value < DateTime.UtcNow; } } @@ -198,7 +198,7 @@ namespace MediaBrowser.Controller.Entities.TV [IgnoreDataMember] public bool IsVirtualUnaired { - get { return LocationType == Model.Entities.LocationType.Virtual && IsUnaired; } + get { return LocationType == LocationType.Virtual && IsUnaired; } } [IgnoreDataMember] diff --git a/MediaBrowser.Controller/Entities/UserRootFolder.cs b/MediaBrowser.Controller/Entities/UserRootFolder.cs index 9afcdfe67e..dc3d4c3848 100644 --- a/MediaBrowser.Controller/Entities/UserRootFolder.cs +++ b/MediaBrowser.Controller/Entities/UserRootFolder.cs @@ -1,6 +1,7 @@ -using System.Collections.Generic; -using System.Linq; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; +using System.Collections.Generic; +using System.Linq; namespace MediaBrowser.Controller.Entities { @@ -18,5 +19,18 @@ namespace MediaBrowser.Controller.Entities { return base.GetNonCachedChildren(directoryService).Concat(LibraryManager.RootFolder.VirtualChildren); } + + public override ItemUpdateType BeforeMetadataRefresh() + { + var updateType = base.BeforeMetadataRefresh(); + + if (string.Equals("default", Name, System.StringComparison.OrdinalIgnoreCase)) + { + Name = "Default Media Library"; + updateType = updateType | ItemUpdateType.MetadataEdit; + } + + return updateType; + } } } diff --git a/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs b/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs index f093ef7cbd..81515a2e9a 100644 --- a/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs +++ b/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs @@ -25,19 +25,6 @@ namespace MediaBrowser.Controller.LiveTv public string ServiceName { get; set; } - /// - /// Returns the folder containing the item. - /// If the item is a folder, it returns the folder itself - /// - /// The containing folder path. - public override string ContainingFolderPath - { - get - { - return Path; - } - } - /// /// Gets a value indicating whether this instance is owned item. /// diff --git a/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs b/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs index aad760cc93..3f8d67e3b7 100644 --- a/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs +++ b/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs @@ -46,19 +46,6 @@ namespace MediaBrowser.Controller.LiveTv } } - /// - /// Returns the folder containing the item. - /// If the item is a folder, it returns the folder itself - /// - /// The containing folder path. - public override string ContainingFolderPath - { - get - { - return Path; - } - } - /// /// Gets a value indicating whether this instance is owned item. /// diff --git a/MediaBrowser.Providers/All/InternalMetadataFolderImageProvider.cs b/MediaBrowser.Providers/All/InternalMetadataFolderImageProvider.cs index c264b0c58c..edaa5edafd 100644 --- a/MediaBrowser.Providers/All/InternalMetadataFolderImageProvider.cs +++ b/MediaBrowser.Providers/All/InternalMetadataFolderImageProvider.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; using System.Collections.Generic; using System.IO; @@ -35,16 +34,7 @@ namespace MediaBrowser.Providers.All return true; } - var locationType = item.LocationType; - - if (locationType == LocationType.FileSystem || - locationType == LocationType.Offline) - { - return false; - } - - // These always save locally - if (item is IItemByName || item is User) + if (item.SupportsLocalMetadata) { return false; } diff --git a/MediaBrowser.Providers/All/LocalImageProvider.cs b/MediaBrowser.Providers/All/LocalImageProvider.cs index 9836003976..354b081cf5 100644 --- a/MediaBrowser.Providers/All/LocalImageProvider.cs +++ b/MediaBrowser.Providers/All/LocalImageProvider.cs @@ -2,6 +2,7 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using System; @@ -26,9 +27,7 @@ namespace MediaBrowser.Providers.All public bool Supports(IHasImages item) { - var locationType = item.LocationType; - - if (locationType == LocationType.FileSystem) + if (item.SupportsLocalMetadata) { // Episode has it's own provider if (item.IsOwnedItem || item is Episode || item is Audio) @@ -39,7 +38,7 @@ namespace MediaBrowser.Providers.All return true; } - if (locationType == LocationType.Virtual) + if (item.LocationType == LocationType.Virtual) { var season = item as Season; diff --git a/MediaBrowser.Providers/BaseXmlProvider.cs b/MediaBrowser.Providers/BaseXmlProvider.cs index b80f27259e..eb3be0eeb6 100644 --- a/MediaBrowser.Providers/BaseXmlProvider.cs +++ b/MediaBrowser.Providers/BaseXmlProvider.cs @@ -60,9 +60,14 @@ namespace MediaBrowser.Providers protected abstract FileInfo GetXmlFile(ItemInfo info); + protected virtual FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + return GetXmlFile(info); + } + public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date) { - var file = GetXmlFile(new ItemInfo { IsInMixedFolder = item.IsInMixedFolder, Path = item.Path }); + var file = GetXmlFile(new ItemInfo { IsInMixedFolder = item.IsInMixedFolder, Path = item.Path }, directoryService); if (file == null) { diff --git a/MediaBrowser.Providers/Folders/CollectionFolderImageProvider.cs b/MediaBrowser.Providers/Folders/CollectionFolderImageProvider.cs index 04fe042c85..fa5946bd5c 100644 --- a/MediaBrowser.Providers/Folders/CollectionFolderImageProvider.cs +++ b/MediaBrowser.Providers/Folders/CollectionFolderImageProvider.cs @@ -15,7 +15,7 @@ namespace MediaBrowser.Providers.Folders public bool Supports(IHasImages item) { - return item is CollectionFolder && item.LocationType == LocationType.FileSystem; + return item is CollectionFolder && item.SupportsLocalMetadata; } public int Order diff --git a/MediaBrowser.Providers/Manager/ImageSaver.cs b/MediaBrowser.Providers/Manager/ImageSaver.cs index c9425c5e54..bac90ae379 100644 --- a/MediaBrowser.Providers/Manager/ImageSaver.cs +++ b/MediaBrowser.Providers/Manager/ImageSaver.cs @@ -93,13 +93,9 @@ namespace MediaBrowser.Providers.Manager { var series = season.Series; - if (series != null) + if (series != null && series.SupportsLocalMetadata) { - var seriesLocationType = series.LocationType; - if (seriesLocationType == LocationType.FileSystem || seriesLocationType == LocationType.Offline) - { - saveLocally = true; - } + saveLocally = true; } } } diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index 6049539090..a7af795a12 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -351,7 +351,7 @@ namespace MediaBrowser.Providers.Manager return false; } - if (item.LocationType != LocationType.FileSystem && provider is ILocalMetadataProvider) + if (!item.SupportsLocalMetadata && provider is ILocalMetadataProvider) { return false; } diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs b/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs index 951996a9f2..7ac48655a9 100644 --- a/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs @@ -148,7 +148,7 @@ namespace MediaBrowser.Providers.MediaInfo return true; } - if (item.LocationType == LocationType.FileSystem) + if (item.SupportsLocalMetadata) { var video = item as Video; diff --git a/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs b/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs index 91d01a2c6b..ef7d9b122e 100644 --- a/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs @@ -27,8 +27,7 @@ namespace MediaBrowser.Providers.Savers /// true if [is enabled for] [the specified item]; otherwise, false. public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) { - var locationType = item.LocationType; - if (locationType == LocationType.Remote || locationType == LocationType.Virtual) + if (!item.SupportsLocalMetadata) { return false; } diff --git a/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs b/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs index a19a2cc4a5..93eafd123c 100644 --- a/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs @@ -27,8 +27,7 @@ namespace MediaBrowser.Providers.Savers /// true if [is enabled for] [the specified item]; otherwise, false. public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) { - var locationType = item.LocationType; - if (locationType == LocationType.Remote || locationType == LocationType.Virtual) + if (!item.SupportsLocalMetadata) { return false; } diff --git a/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs b/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs index 59e112b04a..9c3ceac7e4 100644 --- a/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs @@ -27,8 +27,7 @@ namespace MediaBrowser.Providers.Savers /// true if [is enabled for] [the specified item]; otherwise, false. public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) { - var locationType = item.LocationType; - if (locationType == LocationType.Remote || locationType == LocationType.Virtual) + if (!item.SupportsLocalMetadata) { return false; } diff --git a/MediaBrowser.Providers/Savers/ChannelXmlSaver.cs b/MediaBrowser.Providers/Savers/ChannelXmlSaver.cs index 25aea69c49..52242cb53c 100644 --- a/MediaBrowser.Providers/Savers/ChannelXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/ChannelXmlSaver.cs @@ -22,8 +22,7 @@ namespace MediaBrowser.Providers.Savers /// true if [is enabled for] [the specified item]; otherwise, false. public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) { - var locationType = item.LocationType; - if (locationType == LocationType.Remote || locationType == LocationType.Virtual) + if (!item.SupportsLocalMetadata) { return false; } diff --git a/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs b/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs index 124a295717..12efda85aa 100644 --- a/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs @@ -31,8 +31,7 @@ namespace MediaBrowser.Providers.Savers /// true if [is enabled for] [the specified item]; otherwise, false. public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) { - var locationType = item.LocationType; - if (locationType == LocationType.Remote || locationType == LocationType.Virtual) + if (!item.SupportsLocalMetadata) { return false; } diff --git a/MediaBrowser.Providers/Savers/FolderXmlSaver.cs b/MediaBrowser.Providers/Savers/FolderXmlSaver.cs index f37658c648..481189ee3f 100644 --- a/MediaBrowser.Providers/Savers/FolderXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/FolderXmlSaver.cs @@ -29,8 +29,7 @@ namespace MediaBrowser.Providers.Savers /// true if [is enabled for] [the specified item]; otherwise, false. public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) { - var locationType = item.LocationType; - if (locationType == LocationType.Remote || locationType == LocationType.Virtual) + if (!item.SupportsLocalMetadata) { return false; } diff --git a/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs b/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs index 3c949314d4..78098f50e1 100644 --- a/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs @@ -27,8 +27,7 @@ namespace MediaBrowser.Providers.Savers /// true if [is enabled for] [the specified item]; otherwise, false. public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) { - var locationType = item.LocationType; - if (locationType == LocationType.Remote || locationType == LocationType.Virtual) + if (!item.SupportsLocalMetadata) { return false; } diff --git a/MediaBrowser.Providers/Savers/GameXmlSaver.cs b/MediaBrowser.Providers/Savers/GameXmlSaver.cs index 3758a3c7b1..ccb53a0173 100644 --- a/MediaBrowser.Providers/Savers/GameXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/GameXmlSaver.cs @@ -31,8 +31,7 @@ namespace MediaBrowser.Providers.Savers /// true if [is enabled for] [the specified item]; otherwise, false. public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) { - var locationType = item.LocationType; - if (locationType == LocationType.Remote || locationType == LocationType.Virtual) + if (!item.SupportsLocalMetadata) { return false; } diff --git a/MediaBrowser.Providers/Savers/MovieXmlSaver.cs b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs index 2b5fed41ce..a098c8160e 100644 --- a/MediaBrowser.Providers/Savers/MovieXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs @@ -41,8 +41,7 @@ namespace MediaBrowser.Providers.Savers /// true if [is enabled for] [the specified item]; otherwise, false. public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) { - var locationType = item.LocationType; - if (locationType == LocationType.Remote || locationType == LocationType.Virtual) + if (!item.SupportsLocalMetadata) { return false; } diff --git a/MediaBrowser.Providers/Savers/PersonXmlSaver.cs b/MediaBrowser.Providers/Savers/PersonXmlSaver.cs index 10f75d5915..b612f9974d 100644 --- a/MediaBrowser.Providers/Savers/PersonXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/PersonXmlSaver.cs @@ -31,8 +31,7 @@ namespace MediaBrowser.Providers.Savers /// true if [is enabled for] [the specified item]; otherwise, false. public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) { - var locationType = item.LocationType; - if (locationType == LocationType.Remote || locationType == LocationType.Virtual) + if (!item.SupportsLocalMetadata) { return false; } diff --git a/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs b/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs index de3d1b68ef..3e59ff34ca 100644 --- a/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs @@ -27,8 +27,7 @@ namespace MediaBrowser.Providers.Savers /// true if [is enabled for] [the specified item]; otherwise, false. public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) { - var locationType = item.LocationType; - if (locationType == LocationType.Remote || locationType == LocationType.Virtual) + if (!item.SupportsLocalMetadata) { return false; } diff --git a/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs b/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs index 5d947f8c54..52f5a521bf 100644 --- a/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs @@ -28,8 +28,7 @@ namespace MediaBrowser.Providers.Savers /// true if [is enabled for] [the specified item]; otherwise, false. public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType) { - var locationType = item.LocationType; - if (locationType == LocationType.Remote || locationType == LocationType.Virtual) + if (!item.SupportsLocalMetadata) { return false; } diff --git a/MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs b/MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs index 4f806d8348..1ec0e0f481 100644 --- a/MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs +++ b/MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs @@ -18,7 +18,7 @@ namespace MediaBrowser.Providers.TV public bool Supports(IHasImages item) { - return item is Episode && item.LocationType == LocationType.FileSystem; + return item is Episode && item.SupportsLocalMetadata; } public List GetImages(IHasImages item, IDirectoryService directoryService) @@ -77,28 +77,5 @@ namespace MediaBrowser.Providers.TV }) .ToList(); } - - private List GetFilesFromMetadataFolder(string filenameWithoutExtension, IEnumerable metadataFiles) - { - return metadataFiles - .Where(i => - { - if (BaseItem.SupportedImageExtensions.Contains(i.Extension)) - { - if (string.Equals(filenameWithoutExtension, Path.GetFileNameWithoutExtension(i.Name), StringComparison.OrdinalIgnoreCase)) - { - return true; - } - } - - return false; - }) - .Select(i => new LocalImageInfo - { - FileInfo = i, - Type = ImageType.Primary - }) - .ToList(); - } } } diff --git a/MediaBrowser.Providers/TV/EpisodeXmlProvider.cs b/MediaBrowser.Providers/TV/EpisodeXmlProvider.cs index 18330e80f3..0f4ad14857 100644 --- a/MediaBrowser.Providers/TV/EpisodeXmlProvider.cs +++ b/MediaBrowser.Providers/TV/EpisodeXmlProvider.cs @@ -30,5 +30,15 @@ namespace MediaBrowser.Providers.TV return new FileInfo(metadataFile); } + + protected override FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + var metadataPath = Path.GetDirectoryName(info.Path); + metadataPath = Path.Combine(metadataPath, "metadata"); + + var metadataFile = Path.Combine(metadataPath, Path.ChangeExtension(Path.GetFileName(info.Path), ".xml")); + + return directoryService.GetFile(metadataFile); + } } } diff --git a/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs b/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs index 7dacfacc22..a91033839c 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs +++ b/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs @@ -273,8 +273,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints { if (item.LocationType == LocationType.FileSystem) { - return collections.Where(i => i.LocationType == LocationType.FileSystem && - i.PhysicalLocations.Contains(item.Path)).Cast(); + return collections.Where(i => i.PhysicalLocations.Contains(item.Path)).Cast(); } } @@ -283,7 +282,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints { if (item.Id == user.RootFolder.Id) { - return new T[] { item }; + return new[] { item }; } return new T[] { }; diff --git a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs index f1f9048a94..8634919fc6 100644 --- a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs +++ b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs @@ -161,7 +161,6 @@ namespace MediaBrowser.Server.Implementations.IO .RootFolder .Children .OfType() - .Where(i => i.LocationType != LocationType.Remote && i.LocationType != LocationType.Virtual) .SelectMany(f => f.PhysicalLocations) .Distinct(StringComparer.OrdinalIgnoreCase) .OrderBy(i => i) diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 92d7a4a90c..d4da9dbe74 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -1399,22 +1399,7 @@ namespace MediaBrowser.Server.Implementations.Library .Distinct() .SelectMany(i => i.Children) .OfType() - .Where(i => - { - var locationType = i.LocationType; - - if (locationType == LocationType.Remote || locationType == LocationType.Virtual) - { - return false; - } - - if (string.Equals(i.Path, item.Path, StringComparison.OrdinalIgnoreCase)) - { - return true; - } - - return i.PhysicalLocations.Contains(item.Path); - }) + .Where(i => string.Equals(i.Path, item.Path, StringComparison.OrdinalIgnoreCase) || i.PhysicalLocations.Contains(item.Path)) .Select(i => i.CollectionType) .Where(i => !string.IsNullOrEmpty(i)) .Distinct() diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index fd78d1aaa6..09a442966c 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -615,13 +615,9 @@ namespace MediaBrowser.Server.Implementations.Session } var items = command.ItemIds.Select(i => _libraryManager.GetItemById(new Guid(i))) + .Where(i => i.LocationType != LocationType.Virtual) .ToList(); - if (items.Any(i => i.LocationType == LocationType.Virtual)) - { - throw new ArgumentException("Virtual items are not playable."); - } - if (command.PlayCommand != PlayCommand.PlayNow) { if (items.Any(i => !session.QueueableMediaTypes.Contains(i.MediaType, StringComparer.OrdinalIgnoreCase)))