aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller')
-rw-r--r--MediaBrowser.Controller/Entities/CollectionFolder.cs3
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs12
-rw-r--r--MediaBrowser.Controller/Kernel.cs18
-rw-r--r--MediaBrowser.Controller/Library/DtoBuilder.cs2
-rw-r--r--MediaBrowser.Controller/Library/IDisplayPreferencesManager.cs28
-rw-r--r--MediaBrowser.Controller/Library/IUserManager.cs28
-rw-r--r--MediaBrowser.Controller/MediaBrowser.Controller.csproj1
-rw-r--r--MediaBrowser.Controller/Persistence/IDisplayPreferencesRepository.cs7
-rw-r--r--MediaBrowser.Controller/Providers/MediaInfo/BaseFFProbeProvider.cs4
-rw-r--r--MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs26
-rw-r--r--MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs51
-rw-r--r--MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs55
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>