diff options
Diffstat (limited to 'MediaBrowser.Controller')
12 files changed, 115 insertions, 120 deletions
diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs index c64f001c1..42c112752 100644 --- a/MediaBrowser.Controller/Entities/CollectionFolder.cs +++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs @@ -1,6 +1,5 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Tasks; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -35,7 +34,7 @@ namespace MediaBrowser.Controller.Entities /// Allow different display preferences for each collection folder /// </summary> /// <value>The display prefs id.</value> - public override Guid DisplayPreferencesId + protected override Guid DisplayPreferencesId { get { diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 05ee87def..ce8bf679e 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -65,7 +65,7 @@ namespace MediaBrowser.Controller.Entities /// </summary> /// <value>The display prefs id.</value> [IgnoreDataMember] - public virtual Guid DisplayPreferencesId + protected virtual Guid DisplayPreferencesId { get { @@ -74,6 +74,16 @@ namespace MediaBrowser.Controller.Entities } } + /// <summary> + /// Gets the display preferences id. + /// </summary> + /// <param name="userId">The user id.</param> + /// <returns>Guid.</returns> + public Guid GetDisplayPreferencesId(Guid userId) + { + return (userId + DisplayPreferencesId.ToString()).GetMD5(); + } + #region Indexing /// <summary> diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index 51d347caf..36ebcd802 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -89,12 +89,6 @@ namespace MediaBrowser.Controller public IUserRepository UserRepository { get; set; } /// <summary> - /// Gets the active user repository - /// </summary> - /// <value>The display preferences repository.</value> - public IDisplayPreferencesRepository DisplayPreferencesRepository { get; set; } - - /// <summary> /// Gets the list of available item repositories /// </summary> /// <value>The item repositories.</value> @@ -107,12 +101,6 @@ namespace MediaBrowser.Controller public IItemRepository ItemRepository { get; set; } /// <summary> - /// Gets the list of available DisplayPreferencesRepositories - /// </summary> - /// <value>The display preferences repositories.</value> - public IEnumerable<IDisplayPreferencesRepository> DisplayPreferencesRepositories { get; set; } - - /// <summary> /// Gets the list of available item repositories /// </summary> /// <value>The user data repositories.</value> @@ -155,11 +143,7 @@ namespace MediaBrowser.Controller UserDataRepository = GetRepository(UserDataRepositories, configurationManager.Configuration.UserDataRepository); var userDataRepoTask = UserDataRepository.Initialize(); - // Get the current display preferences repository - DisplayPreferencesRepository = GetRepository(DisplayPreferencesRepositories, configurationManager.Configuration.DisplayPreferencesRepository); - var displayPreferencesRepoTask = DisplayPreferencesRepository.Initialize(); - - return Task.WhenAll(itemRepoTask, userRepoTask, userDataRepoTask, displayPreferencesRepoTask); + return Task.WhenAll(itemRepoTask, userRepoTask, userDataRepoTask); } /// <summary> diff --git a/MediaBrowser.Controller/Library/DtoBuilder.cs b/MediaBrowser.Controller/Library/DtoBuilder.cs index fbaa59f34..d54563e41 100644 --- a/MediaBrowser.Controller/Library/DtoBuilder.cs +++ b/MediaBrowser.Controller/Library/DtoBuilder.cs @@ -174,7 +174,7 @@ namespace MediaBrowser.Controller.Library if (item.IsFolder && fields.Contains(ItemFields.DisplayPreferencesId)) { - dto.DisplayPreferencesId = ((Folder)item).DisplayPreferencesId.ToString(); + dto.DisplayPreferencesId = ((Folder) item).GetDisplayPreferencesId(user.Id).ToString(); } if (item.IsFolder) diff --git a/MediaBrowser.Controller/Library/IDisplayPreferencesManager.cs b/MediaBrowser.Controller/Library/IDisplayPreferencesManager.cs new file mode 100644 index 000000000..f1d782b1d --- /dev/null +++ b/MediaBrowser.Controller/Library/IDisplayPreferencesManager.cs @@ -0,0 +1,28 @@ +using MediaBrowser.Model.Entities; +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Controller.Library +{ + /// <summary> + /// Interface IDisplayPreferencesManager + /// </summary> + public interface IDisplayPreferencesManager + { + /// <summary> + /// Gets the display preferences. + /// </summary> + /// <param name="displayPreferencesId">The display preferences id.</param> + /// <returns>DisplayPreferences.</returns> + Task<DisplayPreferences> GetDisplayPreferences(Guid displayPreferencesId); + + /// <summary> + /// Saves display preferences for an item + /// </summary> + /// <param name="displayPreferences">The display preferences.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>Task.</returns> + Task SaveDisplayPreferences(DisplayPreferences displayPreferences, CancellationToken cancellationToken); + } +} diff --git a/MediaBrowser.Controller/Library/IUserManager.cs b/MediaBrowser.Controller/Library/IUserManager.cs index 8eee8e447..ad46cf7c3 100644 --- a/MediaBrowser.Controller/Library/IUserManager.cs +++ b/MediaBrowser.Controller/Library/IUserManager.cs @@ -1,7 +1,6 @@ using MediaBrowser.Common.Events; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Connectivity; -using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; using System.Threading; @@ -9,6 +8,9 @@ using System.Threading.Tasks; namespace MediaBrowser.Controller.Library { + /// <summary> + /// Interface IUserManager + /// </summary> public interface IUserManager { /// <summary> @@ -173,7 +175,7 @@ namespace MediaBrowser.Controller.Library Task ChangePassword(User user, string newPassword); /// <summary> - /// Saves display preferences for an item + /// Saves the user data. /// </summary> /// <param name="userId">The user id.</param> /// <param name="userDataId">The user data id.</param> @@ -184,29 +186,11 @@ namespace MediaBrowser.Controller.Library CancellationToken cancellationToken); /// <summary> - /// Gets the display preferences. + /// Gets the user data. /// </summary> /// <param name="userId">The user id.</param> /// <param name="userDataId">The user data id.</param> - /// <returns>Task{DisplayPreferences}.</returns> + /// <returns>Task{UserItemData}.</returns> Task<UserItemData> GetUserData(Guid userId, Guid userDataId); - - /// <summary> - /// Gets the display preferences. - /// </summary> - /// <param name="userId">The user id.</param> - /// <param name="displayPreferencesId">The display preferences id.</param> - /// <returns>DisplayPreferences.</returns> - Task<DisplayPreferences> GetDisplayPreferences(Guid userId, Guid displayPreferencesId); - - /// <summary> - /// Saves display preferences for an item - /// </summary> - /// <param name="userId">The user id.</param> - /// <param name="displayPreferencesId">The display preferences id.</param> - /// <param name="displayPreferences">The display preferences.</param> - /// <param name="cancellationToken">The cancellation token.</param> - /// <returns>Task.</returns> - Task SaveDisplayPreferences(Guid userId, Guid displayPreferencesId, DisplayPreferences displayPreferences, CancellationToken cancellationToken); } } diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 2e7a8a994..48662fe22 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -88,6 +88,7 @@ <Compile Include="Entities\Movies\BoxSet.cs" /> <Compile Include="Entities\Movies\Movie.cs" /> <Compile Include="Entities\Person.cs" /> + <Compile Include="Library\IDisplayPreferencesManager.cs" /> <Compile Include="Library\ILibrarySearchEngine.cs" /> <Compile Include="Library\PlaybackProgressEventArgs.cs" /> <Compile Include="Entities\Studio.cs" /> diff --git a/MediaBrowser.Controller/Persistence/IDisplayPreferencesRepository.cs b/MediaBrowser.Controller/Persistence/IDisplayPreferencesRepository.cs index eb43c8ca5..9774bb68e 100644 --- a/MediaBrowser.Controller/Persistence/IDisplayPreferencesRepository.cs +++ b/MediaBrowser.Controller/Persistence/IDisplayPreferencesRepository.cs @@ -13,20 +13,17 @@ namespace MediaBrowser.Controller.Persistence /// <summary> /// Saves display preferences for an item /// </summary> - /// <param name="userId">The user id.</param> - /// <param name="displayPreferencesId">The display preferences id.</param> /// <param name="displayPreferences">The display preferences.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task.</returns> - Task SaveDisplayPreferences(Guid userId, Guid displayPreferencesId, DisplayPreferences displayPreferences, + Task SaveDisplayPreferences(DisplayPreferences displayPreferences, CancellationToken cancellationToken); /// <summary> /// Gets the display preferences. /// </summary> - /// <param name="userId">The user id.</param> /// <param name="displayPreferencesId">The display preferences id.</param> /// <returns>Task{DisplayPreferences}.</returns> - Task<DisplayPreferences> GetDisplayPreferences(Guid userId, Guid displayPreferencesId); + Task<DisplayPreferences> GetDisplayPreferences(Guid displayPreferencesId); } } diff --git a/MediaBrowser.Controller/Providers/MediaInfo/BaseFFProbeProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/BaseFFProbeProvider.cs index bc8052f0e..7c977d02f 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/BaseFFProbeProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/BaseFFProbeProvider.cs @@ -93,7 +93,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo cancellationToken.ThrowIfCancellationRequested(); - await Fetch(myItem, cancellationToken, result, isoMount).ConfigureAwait(false); + Fetch(myItem, cancellationToken, result, isoMount); cancellationToken.ThrowIfCancellationRequested(); @@ -180,7 +180,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// <param name="result">The result.</param> /// <param name="isoMount">The iso mount.</param> /// <returns>Task.</returns> - protected abstract Task Fetch(T item, CancellationToken cancellationToken, FFProbeResult result, IIsoMount isoMount); + protected abstract void Fetch(T item, CancellationToken cancellationToken, FFProbeResult result, IIsoMount isoMount); /// <summary> /// Converts ffprobe stream info to our MediaStream class diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs index 9dec93a8c..bc851a0cb 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs @@ -57,12 +57,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo if (video != null) { - // Can't extract images if there are no video streams - if (video.MediaStreams == null || video.MediaStreams.All(m => m.Type != MediaStreamType.Video)) - { - return false; - } - if (video.VideoType == VideoType.Iso && video.IsoType.HasValue && _isoManager.CanMount(item.Path)) { return true; @@ -93,17 +87,21 @@ namespace MediaBrowser.Controller.Providers.MediaInfo { var video = (Video)item; - var filename = item.Id + "_" + item.DateModified.Ticks + "_primary"; + // We can only extract images from videos if we know there's an embedded video stream + if (video.MediaStreams != null && video.MediaStreams.Any(m => m.Type == MediaStreamType.Video)) + { + var filename = item.Id + "_" + item.DateModified.Ticks + "_primary"; - var path = Kernel.Instance.FFMpegManager.VideoImageCache.GetResourcePath(filename, ".jpg"); + var path = Kernel.Instance.FFMpegManager.VideoImageCache.GetResourcePath(filename, ".jpg"); - if (!Kernel.Instance.FFMpegManager.VideoImageCache.ContainsFilePath(path)) - { - return ExtractImage(video, path, cancellationToken); - } + if (!Kernel.Instance.FFMpegManager.VideoImageCache.ContainsFilePath(path)) + { + return ExtractImage(video, path, cancellationToken); + } - // Image is already in the cache - item.PrimaryImagePath = path; + // Image is already in the cache + item.PrimaryImagePath = path; + } } SetLastRefreshed(item, DateTime.UtcNow); diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs index a7cc4985b..8390a0cee 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs @@ -42,41 +42,38 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// <param name="data">The data.</param> /// <param name="isoMount">The iso mount.</param> /// <returns>Task.</returns> - protected override Task Fetch(Audio audio, CancellationToken cancellationToken, FFProbeResult data, IIsoMount isoMount) + protected override void Fetch(Audio audio, CancellationToken cancellationToken, FFProbeResult data, IIsoMount isoMount) { - return Task.Run(() => + if (data.streams == null) { - if (data.streams == null) - { - Logger.Error("Audio item has no streams: " + audio.Path); - return; - } + Logger.Error("Audio item has no streams: " + audio.Path); + return; + } - audio.MediaStreams = data.streams.Select(s => GetMediaStream(s, data.format)).ToList(); + audio.MediaStreams = data.streams.Select(s => GetMediaStream(s, data.format)).ToList(); - // Get the first audio stream - var stream = data.streams.First(s => s.codec_type.Equals("audio", StringComparison.OrdinalIgnoreCase)); + // Get the first audio stream + var stream = data.streams.First(s => s.codec_type.Equals("audio", StringComparison.OrdinalIgnoreCase)); - // Get duration from stream properties - var duration = stream.duration; + // Get duration from stream properties + var duration = stream.duration; - // If it's not there go into format properties - if (string.IsNullOrEmpty(duration)) - { - duration = data.format.duration; - } + // If it's not there go into format properties + if (string.IsNullOrEmpty(duration)) + { + duration = data.format.duration; + } - // If we got something, parse it - if (!string.IsNullOrEmpty(duration)) - { - audio.RunTimeTicks = TimeSpan.FromSeconds(double.Parse(duration, UsCulture)).Ticks; - } + // If we got something, parse it + if (!string.IsNullOrEmpty(duration)) + { + audio.RunTimeTicks = TimeSpan.FromSeconds(double.Parse(duration, UsCulture)).Ticks; + } - if (data.format.tags != null) - { - FetchDataFromTags(audio, data.format.tags); - } - }); + if (data.format.tags != null) + { + FetchDataFromTags(audio, data.format.tags); + } } /// <summary> diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs index cae74a910..a2a9fa0d1 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs @@ -187,44 +187,41 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// <param name="data">The data.</param> /// <param name="isoMount">The iso mount.</param> /// <returns>Task.</returns> - protected override Task Fetch(Video video, CancellationToken cancellationToken, FFProbeResult data, IIsoMount isoMount) + protected override void Fetch(Video video, CancellationToken cancellationToken, FFProbeResult data, IIsoMount isoMount) { - return Task.Run(() => + if (data.format != null) { - if (data.format != null) - { - // For dvd's this may not always be accurate, so don't set the runtime if the item already has one - var needToSetRuntime = video.VideoType != VideoType.Dvd || video.RunTimeTicks == null || video.RunTimeTicks.Value == 0; - - if (needToSetRuntime && !string.IsNullOrEmpty(data.format.duration)) - { - video.RunTimeTicks = TimeSpan.FromSeconds(double.Parse(data.format.duration, UsCulture)).Ticks; - } - } + // For dvd's this may not always be accurate, so don't set the runtime if the item already has one + var needToSetRuntime = video.VideoType != VideoType.Dvd || video.RunTimeTicks == null || video.RunTimeTicks.Value == 0; - if (data.streams != null) + if (needToSetRuntime && !string.IsNullOrEmpty(data.format.duration)) { - video.MediaStreams = data.streams.Select(s => GetMediaStream(s, data.format)).ToList(); + video.RunTimeTicks = TimeSpan.FromSeconds(double.Parse(data.format.duration, UsCulture)).Ticks; } + } - if (data.Chapters != null) - { - video.Chapters = data.Chapters; - } + if (data.streams != null) + { + video.MediaStreams = data.streams.Select(s => GetMediaStream(s, data.format)).ToList(); + } - if (video.Chapters == null || video.Chapters.Count == 0) - { - AddDummyChapters(video); - } + if (data.Chapters != null) + { + video.Chapters = data.Chapters; + } - if (video.VideoType == VideoType.BluRay || (video.IsoType.HasValue && video.IsoType.Value == IsoType.BluRay)) - { - var inputPath = isoMount != null ? isoMount.MountedPath : video.Path; - FetchBdInfo(video, inputPath, BdInfoCache, cancellationToken); - } + if (video.Chapters == null || video.Chapters.Count == 0) + { + AddDummyChapters(video); + } + + if (video.VideoType == VideoType.BluRay || (video.IsoType.HasValue && video.IsoType.Value == IsoType.BluRay)) + { + var inputPath = isoMount != null ? isoMount.MountedPath : video.Path; + FetchBdInfo(video, inputPath, BdInfoCache, cancellationToken); + } - AddExternalSubtitles(video); - }); + AddExternalSubtitles(video); } /// <summary> |
