diff --git a/Emby.Dlna/Api/DlnaServerService.cs b/Emby.Dlna/Api/DlnaServerService.cs
index 7ddcaf7e6e..a451bbcf91 100644
--- a/Emby.Dlna/Api/DlnaServerService.cs
+++ b/Emby.Dlna/Api/DlnaServerService.cs
@@ -1,7 +1,5 @@
using System;
-using System.Collections.Generic;
using System.IO;
-using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Emby.Dlna.Main;
@@ -195,7 +193,7 @@ namespace Emby.Dlna.Api
private ControlResponse PostAsync(Stream requestStream, IUpnpService service)
{
- var id = GetPathValue(2);
+ var id = GetPathValue(2).ToString();
return service.ProcessControlRequest(new ControlRequest
{
@@ -206,51 +204,99 @@ namespace Emby.Dlna.Api
});
}
- protected string GetPathValue(int index)
+ // Copied from MediaBrowser.Api/BaseApiService.cs
+ // TODO: Remove code duplication
+ ///
+ /// Gets the path segment at the specified index.
+ ///
+ /// The index of the path segment.
+ /// The path segment at the specified index.
+ /// Path doesn't contain enough segments.
+ /// Path doesn't start with the base url.
+ protected internal ReadOnlySpan GetPathValue(int index)
{
- var pathInfo = Parse(Request.PathInfo);
- var first = pathInfo[0];
+ static void ThrowIndexOutOfRangeException()
+ => throw new IndexOutOfRangeException("Path doesn't contain enough segments.");
+ static void ThrowInvalidDataException()
+ => throw new InvalidDataException("Path doesn't start with the base url.");
+
+ ReadOnlySpan path = Request.PathInfo;
+
+ // Remove the protocol part from the url
+ int pos = path.LastIndexOf("://");
+ if (pos != -1)
+ {
+ path = path.Slice(pos + 3);
+ }
+
+ // Remove the query string
+ pos = path.LastIndexOf('?');
+ if (pos != -1)
+ {
+ path = path.Slice(0, pos);
+ }
+
+ // Remove the domain
+ pos = path.IndexOf('/');
+ if (pos != -1)
+ {
+ path = path.Slice(pos);
+ }
+
+ // Remove base url
string baseUrl = _configurationManager.Configuration.BaseUrl;
-
- // backwards compatibility
- if (baseUrl.Length == 0)
+ int baseUrlLen = baseUrl.Length;
+ if (baseUrlLen != 0)
{
- if (string.Equals(first, "mediabrowser", StringComparison.OrdinalIgnoreCase)
- || string.Equals(first, "emby", StringComparison.OrdinalIgnoreCase))
+ if (path.StartsWith(baseUrl, StringComparison.OrdinalIgnoreCase))
{
- index++;
+ path = path.Slice(baseUrlLen);
}
- }
- else if (string.Equals(first, baseUrl.Remove(0, 1)))
- {
- index++;
- var second = pathInfo[1];
- if (string.Equals(second, "mediabrowser", StringComparison.OrdinalIgnoreCase)
- || string.Equals(second, "emby", StringComparison.OrdinalIgnoreCase))
+ else
{
- index++;
+ // The path doesn't start with the base url,
+ // how did we get here?
+ ThrowInvalidDataException();
}
}
- return pathInfo[index];
- }
+ // Remove leading /
+ path = path.Slice(1);
- private static string[] Parse(string pathUri)
- {
- var actionParts = pathUri.Split(new[] { "://" }, StringSplitOptions.None);
-
- var pathInfo = actionParts[actionParts.Length - 1];
-
- var optionsPos = pathInfo.LastIndexOf('?');
- if (optionsPos != -1)
+ // Backwards compatibility
+ const string Emby = "emby/";
+ if (path.StartsWith(Emby, StringComparison.OrdinalIgnoreCase))
{
- pathInfo = pathInfo.Substring(0, optionsPos);
+ path = path.Slice(Emby.Length);
}
- var args = pathInfo.Split('/');
+ const string MediaBrowser = "mediabrowser/";
+ if (path.StartsWith(MediaBrowser, StringComparison.OrdinalIgnoreCase))
+ {
+ path = path.Slice(MediaBrowser.Length);
+ }
- return args.Skip(1).ToArray();
+ // Skip segments until we are at the right index
+ for (int i = 0; i < index; i++)
+ {
+ pos = path.IndexOf('/');
+ if (pos == -1)
+ {
+ ThrowIndexOutOfRangeException();
+ }
+
+ path = path.Slice(pos + 1);
+ }
+
+ // Remove the rest
+ pos = path.IndexOf('/');
+ if (pos != -1)
+ {
+ path = path.Slice(0, pos);
+ }
+
+ return path;
}
public object Get(GetIcon request)
diff --git a/Emby.Dlna/ContentDirectory/ContentDirectory.cs b/Emby.Dlna/ContentDirectory/ContentDirectory.cs
index 5175898ab7..78d69b3380 100644
--- a/Emby.Dlna/ContentDirectory/ContentDirectory.cs
+++ b/Emby.Dlna/ContentDirectory/ContentDirectory.cs
@@ -1,5 +1,4 @@
using System;
-using System.Collections.Generic;
using Emby.Dlna.Service;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
@@ -104,7 +103,7 @@ namespace Emby.Dlna.ContentDirectory
{
if (!string.IsNullOrEmpty(profile.UserId))
{
- var user = _userManager.GetUserById(profile.UserId);
+ var user = _userManager.GetUserById(Guid.Parse(profile.UserId));
if (user != null)
{
@@ -116,7 +115,7 @@ namespace Emby.Dlna.ContentDirectory
if (!string.IsNullOrEmpty(userId))
{
- var user = _userManager.GetUserById(userId);
+ var user = _userManager.GetUserById(Guid.Parse(userId));
if (user != null)
{
diff --git a/Emby.Server.Implementations/Library/UserDataManager.cs b/Emby.Server.Implementations/Library/UserDataManager.cs
index 36adc0b9c4..e6d2b7ae06 100644
--- a/Emby.Server.Implementations/Library/UserDataManager.cs
+++ b/Emby.Server.Implementations/Library/UserDataManager.cs
@@ -55,6 +55,7 @@ namespace Emby.Server.Implementations.Library
{
throw new ArgumentNullException(nameof(userData));
}
+
if (item == null)
{
throw new ArgumentNullException(nameof(item));
@@ -160,11 +161,6 @@ namespace Emby.Server.Implementations.Library
return GetUserData(user, item.Id, item.GetUserDataKeys());
}
- public UserItemData GetUserData(string userId, BaseItem item)
- {
- return GetUserData(new Guid(userId), item);
- }
-
public UserItemData GetUserData(Guid userId, BaseItem item)
{
return GetUserData(userId, item.Id, item.GetUserDataKeys());
diff --git a/Emby.Server.Implementations/Library/UserManager.cs b/Emby.Server.Implementations/Library/UserManager.cs
index 2b22129f33..e1b031e45e 100644
--- a/Emby.Server.Implementations/Library/UserManager.cs
+++ b/Emby.Server.Implementations/Library/UserManager.cs
@@ -194,10 +194,6 @@ namespace Emby.Server.Implementations.Library
return user;
}
- ///
- public User GetUserById(string id)
- => GetUserById(new Guid(id));
-
public User GetUserByName(string name)
{
if (string.IsNullOrWhiteSpace(name))
diff --git a/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteTranscodeFileTask.cs b/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteTranscodeFileTask.cs
index 72b524df02..f197734d46 100644
--- a/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteTranscodeFileTask.cs
+++ b/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteTranscodeFileTask.cs
@@ -31,13 +31,13 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
}
///
- /// Creates the triggers that define when the task will run
+ /// Creates the triggers that define when the task will run.
///
/// IEnumerable{BaseTaskTrigger}.
public IEnumerable GetDefaultTriggers() => new List();
///
- /// Returns the task to be executed
+ /// Returns the task to be executed.
///
/// The cancellation token.
/// The progress.
@@ -52,9 +52,8 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
return Task.CompletedTask;
}
-
///
- /// Deletes the transcoded temp files from directory with a last write time less than a given date
+ /// Deletes the transcoded temp files from directory with a last write time less than a given date.
///
/// The task cancellation token.
/// The directory.
diff --git a/MediaBrowser.Api/ApiEntryPoint.cs b/MediaBrowser.Api/ApiEntryPoint.cs
index 0542807af7..1a3657c920 100644
--- a/MediaBrowser.Api/ApiEntryPoint.cs
+++ b/MediaBrowser.Api/ApiEntryPoint.cs
@@ -10,11 +10,9 @@ using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.MediaEncoding;
-using MediaBrowser.Controller.Net;
using MediaBrowser.Controller.Plugins;
using MediaBrowser.Controller.Session;
-using MediaBrowser.Model.Diagnostics;
-using MediaBrowser.Model.Dto;
+using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Session;
using Microsoft.Extensions.Logging;
@@ -22,26 +20,24 @@ using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api
{
///
- /// Class ServerEntryPoint
+ /// Class ServerEntryPoint.
///
public class ApiEntryPoint : IServerEntryPoint
{
///
- /// The instance
+ /// The instance.
///
public static ApiEntryPoint Instance;
///
- /// Gets or sets the logger.
+ /// The logger.
///
- /// The logger.
- internal ILogger Logger { get; private set; }
- internal IHttpResultFactory ResultFactory { get; private set; }
+ private ILogger _logger;
///
- /// Gets the configuration manager.
+ /// The configuration manager.
///
- internal IServerConfigurationManager ConfigurationManager { get; }
+ private IServerConfigurationManager _serverConfigurationManager;
private readonly ISessionManager _sessionManager;
private readonly IFileSystem _fileSystem;
@@ -70,18 +66,16 @@ namespace MediaBrowser.Api
ISessionManager sessionManager,
IServerConfigurationManager config,
IFileSystem fileSystem,
- IMediaSourceManager mediaSourceManager,
- IHttpResultFactory resultFactory)
+ IMediaSourceManager mediaSourceManager)
{
- Logger = logger;
+ _logger = logger;
_sessionManager = sessionManager;
- ConfigurationManager = config;
+ _serverConfigurationManager = config;
_fileSystem = fileSystem;
_mediaSourceManager = mediaSourceManager;
- ResultFactory = resultFactory;
- _sessionManager.PlaybackProgress += _sessionManager_PlaybackProgress;
- _sessionManager.PlaybackStart += _sessionManager_PlaybackStart;
+ _sessionManager.PlaybackProgress += OnPlaybackProgress;
+ _sessionManager.PlaybackStart += OnPlaybackStart;
Instance = this;
}
@@ -115,7 +109,7 @@ namespace MediaBrowser.Api
}
}
- private void _sessionManager_PlaybackStart(object sender, PlaybackProgressEventArgs e)
+ private void OnPlaybackStart(object sender, PlaybackProgressEventArgs e)
{
if (!string.IsNullOrWhiteSpace(e.PlaySessionId))
{
@@ -123,7 +117,7 @@ namespace MediaBrowser.Api
}
}
- void _sessionManager_PlaybackProgress(object sender, PlaybackProgressEventArgs e)
+ private void OnPlaybackProgress(object sender, PlaybackProgressEventArgs e)
{
if (!string.IsNullOrWhiteSpace(e.PlaySessionId))
{
@@ -140,17 +134,9 @@ namespace MediaBrowser.Api
{
DeleteEncodedMediaCache();
}
- catch (FileNotFoundException)
- {
- // Don't clutter the log
- }
- catch (IOException)
- {
- // Don't clutter the log
- }
catch (Exception ex)
{
- Logger.LogError(ex, "Error deleting encoded media cache");
+ _logger.LogError(ex, "Error deleting encoded media cache");
}
return Task.CompletedTask;
@@ -161,8 +147,7 @@ namespace MediaBrowser.Api
///
private void DeleteEncodedMediaCache()
{
- var path = ConfigurationManager.GetTranscodePath();
-
+ var path = _serverConfigurationManager.GetTranscodePath();
if (!Directory.Exists(path))
{
return;
@@ -174,9 +159,7 @@ namespace MediaBrowser.Api
}
}
- ///
- /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
- ///
+ ///
public void Dispose()
{
Dispose(true);
@@ -219,8 +202,8 @@ namespace MediaBrowser.Api
_activeTranscodingJobs.Clear();
_transcodingLocks.Clear();
- _sessionManager.PlaybackProgress -= _sessionManager_PlaybackProgress;
- _sessionManager.PlaybackStart -= _sessionManager_PlaybackStart;
+ _sessionManager.PlaybackProgress -= OnPlaybackProgress;
+ _sessionManager.PlaybackStart -= OnPlaybackStart;
_disposed = true;
}
@@ -252,7 +235,7 @@ namespace MediaBrowser.Api
{
lock (_activeTranscodingJobs)
{
- var job = new TranscodingJob(Logger)
+ var job = new TranscodingJob(_logger)
{
Type = type,
Path = path,
@@ -406,12 +389,13 @@ namespace MediaBrowser.Api
public void OnTranscodeEndRequest(TranscodingJob job)
{
job.ActiveRequestCount--;
- Logger.LogDebug("OnTranscodeEndRequest job.ActiveRequestCount={0}", job.ActiveRequestCount);
+ _logger.LogDebug("OnTranscodeEndRequest job.ActiveRequestCount={0}", job.ActiveRequestCount);
if (job.ActiveRequestCount <= 0)
{
PingTimer(job, false);
}
}
+
internal void PingTranscodingJob(string playSessionId, bool? isUserPaused)
{
if (string.IsNullOrEmpty(playSessionId))
@@ -419,7 +403,7 @@ namespace MediaBrowser.Api
throw new ArgumentNullException(nameof(playSessionId));
}
- Logger.LogDebug("PingTranscodingJob PlaySessionId={0} isUsedPaused: {1}", playSessionId, isUserPaused);
+ _logger.LogDebug("PingTranscodingJob PlaySessionId={0} isUsedPaused: {1}", playSessionId, isUserPaused);
List jobs;
@@ -434,9 +418,10 @@ namespace MediaBrowser.Api
{
if (isUserPaused.HasValue)
{
- Logger.LogDebug("Setting job.IsUserPaused to {0}. jobId: {1}", isUserPaused, job.Id);
+ _logger.LogDebug("Setting job.IsUserPaused to {0}. jobId: {1}", isUserPaused, job.Id);
job.IsUserPaused = isUserPaused.Value;
}
+
PingTimer(job, true);
}
}
@@ -489,7 +474,7 @@ namespace MediaBrowser.Api
}
}
- Logger.LogInformation("Transcoding kill timer stopped for JobId {0} PlaySessionId {1}. Killing transcoding", job.Id, job.PlaySessionId);
+ _logger.LogInformation("Transcoding kill timer stopped for JobId {0} PlaySessionId {1}. Killing transcoding", job.Id, job.PlaySessionId);
await KillTranscodingJob(job, true, path => true);
}
@@ -558,7 +543,7 @@ namespace MediaBrowser.Api
{
job.DisposeKillTimer();
- Logger.LogDebug("KillTranscodingJob - JobId {0} PlaySessionId {1}. Killing transcoding", job.Id, job.PlaySessionId);
+ _logger.LogDebug("KillTranscodingJob - JobId {0} PlaySessionId {1}. Killing transcoding", job.Id, job.PlaySessionId);
lock (_activeTranscodingJobs)
{
@@ -590,14 +575,14 @@ namespace MediaBrowser.Api
{
try
{
- Logger.LogInformation("Stopping ffmpeg process with q command for {Path}", job.Path);
+ _logger.LogInformation("Stopping ffmpeg process with q command for {Path}", job.Path);
process.StandardInput.WriteLine("q");
// Need to wait because killing is asynchronous
if (!process.WaitForExit(5000))
{
- Logger.LogInformation("Killing ffmpeg process for {Path}", job.Path);
+ _logger.LogInformation("Killing ffmpeg process for {Path}", job.Path);
process.Kill();
}
}
@@ -620,7 +605,7 @@ namespace MediaBrowser.Api
}
catch (Exception ex)
{
- Logger.LogError(ex, "Error closing live stream for {Path}", job.Path);
+ _logger.LogError(ex, "Error closing live stream for {Path}", job.Path);
}
}
}
@@ -632,7 +617,7 @@ namespace MediaBrowser.Api
return;
}
- Logger.LogInformation("Deleting partial stream file(s) {Path}", path);
+ _logger.LogInformation("Deleting partial stream file(s) {Path}", path);
await Task.Delay(delayMs).ConfigureAwait(false);
@@ -646,20 +631,16 @@ namespace MediaBrowser.Api
{
DeleteHlsPartialStreamFiles(path);
}
- }
- catch (FileNotFoundException)
- {
-
}
catch (IOException ex)
{
- Logger.LogError(ex, "Error deleting partial stream file(s) {Path}", path);
+ _logger.LogError(ex, "Error deleting partial stream file(s) {Path}", path);
await DeletePartialStreamFiles(path, jobType, retryCount + 1, 500).ConfigureAwait(false);
}
catch (Exception ex)
{
- Logger.LogError(ex, "Error deleting partial stream file(s) {Path}", path);
+ _logger.LogError(ex, "Error deleting partial stream file(s) {Path}", path);
}
}
@@ -669,7 +650,10 @@ namespace MediaBrowser.Api
/// The output file path.
private void DeleteProgressivePartialStreamFiles(string outputFilePath)
{
- _fileSystem.DeleteFile(outputFilePath);
+ if (File.Exists(outputFilePath))
+ {
+ _fileSystem.DeleteFile(outputFilePath);
+ }
}
///
@@ -684,178 +668,24 @@ namespace MediaBrowser.Api
var filesToDelete = _fileSystem.GetFilePaths(directory)
.Where(f => f.IndexOf(name, StringComparison.OrdinalIgnoreCase) != -1);
- Exception e = null;
-
+ List exs = null;
foreach (var file in filesToDelete)
{
try
{
- Logger.LogDebug("Deleting HLS file {0}", file);
+ _logger.LogDebug("Deleting HLS file {0}", file);
_fileSystem.DeleteFile(file);
- }
- catch (FileNotFoundException)
- {
-
}
catch (IOException ex)
{
- e = ex;
- Logger.LogError(ex, "Error deleting HLS file {Path}", file);
+ (exs ??= new List(4)).Add(ex);
+ _logger.LogError(ex, "Error deleting HLS file {Path}", file);
}
}
- if (e != null)
+ if (exs != null)
{
- throw e;
- }
- }
- }
-
- ///
- /// Class TranscodingJob
- ///
- public class TranscodingJob
- {
- ///
- /// Gets or sets the play session identifier.
- ///
- /// The play session identifier.
- public string PlaySessionId { get; set; }
- ///
- /// Gets or sets the live stream identifier.
- ///
- /// The live stream identifier.
- public string LiveStreamId { get; set; }
-
- public bool IsLiveOutput { get; set; }
-
- ///
- /// Gets or sets the path.
- ///
- /// The path.
- public MediaSourceInfo MediaSource { get; set; }
- public string Path { get; set; }
- ///
- /// Gets or sets the type.
- ///
- /// The type.
- public TranscodingJobType Type { get; set; }
- ///
- /// Gets or sets the process.
- ///
- /// The process.
- public Process Process { get; set; }
- public ILogger Logger { get; private set; }
- ///
- /// Gets or sets the active request count.
- ///
- /// The active request count.
- public int ActiveRequestCount { get; set; }
- ///
- /// Gets or sets the kill timer.
- ///
- /// The kill timer.
- private Timer KillTimer { get; set; }
-
- public string DeviceId { get; set; }
-
- public CancellationTokenSource CancellationTokenSource { get; set; }
-
- public object ProcessLock = new object();
-
- public bool HasExited { get; set; }
- public bool IsUserPaused { get; set; }
-
- public string Id { get; set; }
-
- public float? Framerate { get; set; }
- public double? CompletionPercentage { get; set; }
-
- public long? BytesDownloaded { get; set; }
- public long? BytesTranscoded { get; set; }
- public int? BitRate { get; set; }
-
- public long? TranscodingPositionTicks { get; set; }
- public long? DownloadPositionTicks { get; set; }
-
- public TranscodingThrottler TranscodingThrottler { get; set; }
-
- private readonly object _timerLock = new object();
-
- public DateTime LastPingDate { get; set; }
- public int PingTimeout { get; set; }
-
- public TranscodingJob(ILogger logger)
- {
- Logger = logger;
- }
-
- public void StopKillTimer()
- {
- lock (_timerLock)
- {
- if (KillTimer != null)
- {
- KillTimer.Change(Timeout.Infinite, Timeout.Infinite);
- }
- }
- }
-
- public void DisposeKillTimer()
- {
- lock (_timerLock)
- {
- if (KillTimer != null)
- {
- KillTimer.Dispose();
- KillTimer = null;
- }
- }
- }
-
- public void StartKillTimer(Action
private readonly IUserManager _userManager;
- ///
- /// The _user data repository
- ///
- private readonly IUserDataManager _userDataRepository;
///
/// The _library manager
///
private readonly ILibraryManager _libraryManager;
private readonly IDtoService _dtoService;
- private readonly ICollectionManager _collectionManager;
private readonly ILocalizationManager _localizationManager;
private readonly IJsonSerializer _json;
private readonly IAuthorizationContext _authContext;
- public TrailersService(IUserManager userManager, IUserDataManager userDataRepository, ILibraryManager libraryManager, IDtoService dtoService, ICollectionManager collectionManager, ILocalizationManager localizationManager, IJsonSerializer json, IAuthorizationContext authContext)
+ public TrailersService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IUserManager userManager,
+ ILibraryManager libraryManager,
+ IDtoService dtoService,
+ ILocalizationManager localizationManager,
+ IJsonSerializer json,
+ IAuthorizationContext authContext)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
_userManager = userManager;
- _userDataRepository = userDataRepository;
_libraryManager = libraryManager;
_dtoService = dtoService;
- _collectionManager = collectionManager;
_localizationManager = localizationManager;
_json = json;
_authContext = authContext;
@@ -61,7 +65,15 @@ namespace MediaBrowser.Api.Movies
getItems.IncludeItemTypes = "Trailer";
- return new ItemsService(_userManager, _libraryManager, _localizationManager, _dtoService, _authContext)
+ return new ItemsService(
+ Logger,
+ ServerConfigurationManager,
+ ResultFactory,
+ _userManager,
+ _libraryManager,
+ _localizationManager,
+ _dtoService,
+ _authContext)
{
Request = Request,
diff --git a/MediaBrowser.Api/Music/AlbumsService.cs b/MediaBrowser.Api/Music/AlbumsService.cs
index 2cd3a1003c..fd6c0b7da5 100644
--- a/MediaBrowser.Api/Music/AlbumsService.cs
+++ b/MediaBrowser.Api/Music/AlbumsService.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
@@ -8,6 +9,7 @@ using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api.Music
{
@@ -41,7 +43,17 @@ namespace MediaBrowser.Api.Music
private readonly IDtoService _dtoService;
private readonly IAuthorizationContext _authContext;
- public AlbumsService(IUserManager userManager, IUserDataManager userDataRepository, ILibraryManager libraryManager, IItemRepository itemRepo, IDtoService dtoService, IAuthorizationContext authContext)
+ public AlbumsService(
+ Logger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IUserManager userManager,
+ IUserDataManager userDataRepository,
+ ILibraryManager libraryManager,
+ IItemRepository itemRepo,
+ IDtoService dtoService,
+ IAuthorizationContext authContext)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
_userManager = userManager;
_userDataRepository = userDataRepository;
diff --git a/MediaBrowser.Api/Music/InstantMixService.cs b/MediaBrowser.Api/Music/InstantMixService.cs
index 875f0a8de9..cacec8d640 100644
--- a/MediaBrowser.Api/Music/InstantMixService.cs
+++ b/MediaBrowser.Api/Music/InstantMixService.cs
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
@@ -8,6 +9,7 @@ using MediaBrowser.Controller.Playlists;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api.Music
{
@@ -62,7 +64,16 @@ namespace MediaBrowser.Api.Music
private readonly IMusicManager _musicManager;
private readonly IAuthorizationContext _authContext;
- public InstantMixService(IUserManager userManager, IDtoService dtoService, IMusicManager musicManager, ILibraryManager libraryManager, IAuthorizationContext authContext)
+ public InstantMixService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IUserManager userManager,
+ IDtoService dtoService,
+ IMusicManager musicManager,
+ ILibraryManager libraryManager,
+ IAuthorizationContext authContext)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
_userManager = userManager;
_dtoService = dtoService;
diff --git a/MediaBrowser.Api/PackageService.cs b/MediaBrowser.Api/PackageService.cs
index 1e5a932107..b0333eb9ce 100644
--- a/MediaBrowser.Api/PackageService.cs
+++ b/MediaBrowser.Api/PackageService.cs
@@ -2,14 +2,14 @@ using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
-using System.Threading;
using System.Threading.Tasks;
-using MediaBrowser.Common;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Updates;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Services;
using MediaBrowser.Model.Updates;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api
{
@@ -118,12 +118,15 @@ namespace MediaBrowser.Api
public class PackageService : BaseApiService
{
private readonly IInstallationManager _installationManager;
- private readonly IApplicationHost _appHost;
- public PackageService(IInstallationManager installationManager, IApplicationHost appHost)
+ public PackageService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IInstallationManager installationManager)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
_installationManager = installationManager;
- _appHost = appHost;
}
///
diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs
index 4bd729aac8..1e9cd33136 100644
--- a/MediaBrowser.Api/Playback/BaseStreamingService.cs
+++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs
@@ -33,12 +33,6 @@ namespace MediaBrowser.Api.Playback
{
protected virtual bool EnableOutputInSubFolder => false;
- ///
- /// Gets or sets the application paths.
- ///
- /// The application paths.
- protected IServerConfigurationManager ServerConfigurationManager { get; private set; }
-
///
/// Gets or sets the user manager.
///
@@ -89,7 +83,9 @@ namespace MediaBrowser.Api.Playback
/// Initializes a new instance of the class.
///
protected BaseStreamingService(
- IServerConfigurationManager serverConfig,
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
IUserManager userManager,
ILibraryManager libraryManager,
IIsoManager isoManager,
@@ -101,8 +97,8 @@ namespace MediaBrowser.Api.Playback
IMediaSourceManager mediaSourceManager,
IJsonSerializer jsonSerializer,
IAuthorizationContext authorizationContext)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
- ServerConfigurationManager = serverConfig;
UserManager = userManager;
LibraryManager = libraryManager;
IsoManager = isoManager;
@@ -588,7 +584,7 @@ namespace MediaBrowser.Api.Playback
}
///
- /// Parses query parameters as StreamOptions
+ /// Parses query parameters as StreamOptions.
///
/// The stream request.
private void ParseStreamOptions(StreamRequest request)
diff --git a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
index 27eb67ee61..8fdc6fa497 100644
--- a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
+++ b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
@@ -12,7 +12,6 @@ using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Configuration;
-using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.Serialization;
@@ -25,6 +24,39 @@ namespace MediaBrowser.Api.Playback.Hls
///
public abstract class BaseHlsService : BaseStreamingService
{
+ public BaseHlsService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IUserManager userManager,
+ ILibraryManager libraryManager,
+ IIsoManager isoManager,
+ IMediaEncoder mediaEncoder,
+ IFileSystem fileSystem,
+ IDlnaManager dlnaManager,
+ ISubtitleEncoder subtitleEncoder,
+ IDeviceManager deviceManager,
+ IMediaSourceManager mediaSourceManager,
+ IJsonSerializer jsonSerializer,
+ IAuthorizationContext authorizationContext)
+ : base(
+ logger,
+ serverConfigurationManager,
+ httpResultFactory,
+ userManager,
+ libraryManager,
+ isoManager,
+ mediaEncoder,
+ fileSystem,
+ dlnaManager,
+ subtitleEncoder,
+ deviceManager,
+ mediaSourceManager,
+ jsonSerializer,
+ authorizationContext)
+ {
+ }
+
///
/// Gets the audio arguments.
///
@@ -313,33 +345,5 @@ namespace MediaBrowser.Api.Playback.Hls
{
return 0;
}
-
- public BaseHlsService(
- IServerConfigurationManager serverConfig,
- IUserManager userManager,
- ILibraryManager libraryManager,
- IIsoManager isoManager,
- IMediaEncoder mediaEncoder,
- IFileSystem fileSystem,
- IDlnaManager dlnaManager,
- ISubtitleEncoder subtitleEncoder,
- IDeviceManager deviceManager,
- IMediaSourceManager mediaSourceManager,
- IJsonSerializer jsonSerializer,
- IAuthorizationContext authorizationContext)
- : base(serverConfig,
- userManager,
- libraryManager,
- isoManager,
- mediaEncoder,
- fileSystem,
- dlnaManager,
- subtitleEncoder,
- deviceManager,
- mediaSourceManager,
- jsonSerializer,
- authorizationContext)
- {
- }
}
}
diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
index 9ecb5fe8c5..f09c7e9f2a 100644
--- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
+++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
@@ -94,9 +94,10 @@ namespace MediaBrowser.Api.Playback.Hls
[Authenticated]
public class DynamicHlsService : BaseHlsService
{
-
public DynamicHlsService(
- IServerConfigurationManager serverConfig,
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
IUserManager userManager,
ILibraryManager libraryManager,
IIsoManager isoManager,
@@ -109,7 +110,10 @@ namespace MediaBrowser.Api.Playback.Hls
IJsonSerializer jsonSerializer,
IAuthorizationContext authorizationContext,
INetworkManager networkManager)
- : base(serverConfig,
+ : base(
+ logger,
+ serverConfigurationManager,
+ httpResultFactory,
userManager,
libraryManager,
isoManager,
diff --git a/MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs b/MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs
index ca5a73ff1b..bb12ab1f0d 100644
--- a/MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs
+++ b/MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs
@@ -8,6 +8,7 @@ using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Controller.Net;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api.Playback.Hls
{
@@ -83,19 +84,22 @@ namespace MediaBrowser.Api.Playback.Hls
public class HlsSegmentService : BaseApiService
{
- private readonly IServerConfigurationManager _config;
private readonly IFileSystem _fileSystem;
- public HlsSegmentService(IServerConfigurationManager config, IFileSystem fileSystem)
+ public HlsSegmentService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IFileSystem fileSystem)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
- _config = config;
_fileSystem = fileSystem;
}
public Task Get(GetHlsPlaylistLegacy request)
{
var file = request.PlaylistId + Path.GetExtension(Request.PathInfo);
- file = Path.Combine(_config.GetTranscodePath(), file);
+ file = Path.Combine(ServerConfigurationManager.GetTranscodePath(), file);
return GetFileResult(file, file);
}
@@ -113,7 +117,8 @@ namespace MediaBrowser.Api.Playback.Hls
public Task Get(GetHlsVideoSegmentLegacy request)
{
var file = request.SegmentId + Path.GetExtension(Request.PathInfo);
- var transcodeFolderPath = _config.GetTranscodePath();
+ var transcodeFolderPath = ServerConfigurationManager.GetTranscodePath();
+
file = Path.Combine(transcodeFolderPath, file);
var normalizedPlaylistId = request.PlaylistId;
@@ -133,7 +138,7 @@ namespace MediaBrowser.Api.Playback.Hls
{
// TODO: Deprecate with new iOS app
var file = request.SegmentId + Path.GetExtension(Request.PathInfo);
- file = Path.Combine(_config.GetTranscodePath(), file);
+ file = Path.Combine(ServerConfigurationManager.GetTranscodePath(), file);
return ResultFactory.GetStaticFileResult(Request, file, FileShareMode.ReadWrite);
}
diff --git a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs
index 4a5f4025ba..6d12a1ccd6 100644
--- a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs
+++ b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs
@@ -12,6 +12,7 @@ using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api.Playback.Hls
{
@@ -137,7 +138,9 @@ namespace MediaBrowser.Api.Playback.Hls
}
public VideoHlsService(
- IServerConfigurationManager serverConfig,
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
IUserManager userManager,
ILibraryManager libraryManager,
IIsoManager isoManager,
@@ -149,7 +152,10 @@ namespace MediaBrowser.Api.Playback.Hls
IMediaSourceManager mediaSourceManager,
IJsonSerializer jsonSerializer,
IAuthorizationContext authorizationContext)
- : base(serverConfig,
+ : base(
+ logger,
+ serverConfigurationManager,
+ httpResultFactory,
userManager,
libraryManager,
isoManager,
diff --git a/MediaBrowser.Api/Playback/MediaInfoService.cs b/MediaBrowser.Api/Playback/MediaInfoService.cs
index da8f99a3dd..c3032416b8 100644
--- a/MediaBrowser.Api/Playback/MediaInfoService.cs
+++ b/MediaBrowser.Api/Playback/MediaInfoService.cs
@@ -69,36 +69,34 @@ namespace MediaBrowser.Api.Playback
private readonly IMediaSourceManager _mediaSourceManager;
private readonly IDeviceManager _deviceManager;
private readonly ILibraryManager _libraryManager;
- private readonly IServerConfigurationManager _config;
private readonly INetworkManager _networkManager;
private readonly IMediaEncoder _mediaEncoder;
private readonly IUserManager _userManager;
private readonly IJsonSerializer _json;
private readonly IAuthorizationContext _authContext;
- private readonly ILogger _logger;
public MediaInfoService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
IMediaSourceManager mediaSourceManager,
IDeviceManager deviceManager,
ILibraryManager libraryManager,
- IServerConfigurationManager config,
INetworkManager networkManager,
IMediaEncoder mediaEncoder,
IUserManager userManager,
IJsonSerializer json,
- IAuthorizationContext authContext,
- ILoggerFactory loggerFactory)
+ IAuthorizationContext authContext)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
_mediaSourceManager = mediaSourceManager;
_deviceManager = deviceManager;
_libraryManager = libraryManager;
- _config = config;
_networkManager = networkManager;
_mediaEncoder = mediaEncoder;
_userManager = userManager;
_json = json;
_authContext = authContext;
- _logger = loggerFactory.CreateLogger(nameof(MediaInfoService));
}
public object Get(GetBitrateTestBytes request)
@@ -275,7 +273,7 @@ namespace MediaBrowser.Api.Playback
catch (Exception ex)
{
mediaSources = new List();
- _logger.LogError(ex, "Could not find media sources for item id {id}", id);
+ Logger.LogError(ex, "Could not find media sources for item id {id}", id);
// TODO PlaybackException ??
//result.ErrorCode = ex.ErrorCode;
}
@@ -533,7 +531,7 @@ namespace MediaBrowser.Api.Playback
if (remoteClientMaxBitrate <= 0)
{
- remoteClientMaxBitrate = _config.Configuration.RemoteClientBitrateLimit;
+ remoteClientMaxBitrate = ServerConfigurationManager.Configuration.RemoteClientBitrateLimit;
}
if (remoteClientMaxBitrate > 0)
diff --git a/MediaBrowser.Api/Playback/Progressive/AudioService.cs b/MediaBrowser.Api/Playback/Progressive/AudioService.cs
index dfe4b2b8e9..11527007b5 100644
--- a/MediaBrowser.Api/Playback/Progressive/AudioService.cs
+++ b/MediaBrowser.Api/Playback/Progressive/AudioService.cs
@@ -10,6 +10,7 @@ using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api.Playback.Progressive
{
@@ -32,8 +33,10 @@ namespace MediaBrowser.Api.Playback.Progressive
public class AudioService : BaseProgressiveStreamingService
{
public AudioService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
IHttpClient httpClient,
- IServerConfigurationManager serverConfig,
IUserManager userManager,
ILibraryManager libraryManager,
IIsoManager isoManager,
@@ -45,19 +48,22 @@ namespace MediaBrowser.Api.Playback.Progressive
IMediaSourceManager mediaSourceManager,
IJsonSerializer jsonSerializer,
IAuthorizationContext authorizationContext)
- : base(httpClient,
- serverConfig,
- userManager,
- libraryManager,
- isoManager,
- mediaEncoder,
- fileSystem,
- dlnaManager,
- subtitleEncoder,
- deviceManager,
- mediaSourceManager,
- jsonSerializer,
- authorizationContext)
+ : base(
+ logger,
+ serverConfigurationManager,
+ httpResultFactory,
+ httpClient,
+ userManager,
+ libraryManager,
+ isoManager,
+ mediaEncoder,
+ fileSystem,
+ dlnaManager,
+ subtitleEncoder,
+ deviceManager,
+ mediaSourceManager,
+ jsonSerializer,
+ authorizationContext)
{
}
diff --git a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs
index 97c1a7a496..4ada90d095 100644
--- a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs
+++ b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs
@@ -15,6 +15,7 @@ using MediaBrowser.Model.IO;
using MediaBrowser.Model.MediaInfo;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
using Microsoft.Net.Http.Headers;
namespace MediaBrowser.Api.Playback.Progressive
@@ -27,8 +28,10 @@ namespace MediaBrowser.Api.Playback.Progressive
protected IHttpClient HttpClient { get; private set; }
public BaseProgressiveStreamingService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
IHttpClient httpClient,
- IServerConfigurationManager serverConfig,
IUserManager userManager,
ILibraryManager libraryManager,
IIsoManager isoManager,
@@ -40,7 +43,10 @@ namespace MediaBrowser.Api.Playback.Progressive
IMediaSourceManager mediaSourceManager,
IJsonSerializer jsonSerializer,
IAuthorizationContext authorizationContext)
- : base(serverConfig,
+ : base(
+ logger,
+ serverConfigurationManager,
+ httpResultFactory,
userManager,
libraryManager,
isoManager,
diff --git a/MediaBrowser.Api/Playback/Progressive/VideoService.cs b/MediaBrowser.Api/Playback/Progressive/VideoService.cs
index cfc8a283d9..fc5603d277 100644
--- a/MediaBrowser.Api/Playback/Progressive/VideoService.cs
+++ b/MediaBrowser.Api/Playback/Progressive/VideoService.cs
@@ -10,6 +10,7 @@ using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api.Playback.Progressive
{
@@ -69,8 +70,10 @@ namespace MediaBrowser.Api.Playback.Progressive
public class VideoService : BaseProgressiveStreamingService
{
public VideoService(
+ Logger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
IHttpClient httpClient,
- IServerConfigurationManager serverConfig,
IUserManager userManager,
ILibraryManager libraryManager,
IIsoManager isoManager,
@@ -82,8 +85,11 @@ namespace MediaBrowser.Api.Playback.Progressive
IMediaSourceManager mediaSourceManager,
IJsonSerializer jsonSerializer,
IAuthorizationContext authorizationContext)
- : base(httpClient,
- serverConfig,
+ : base(
+ logger,
+ serverConfigurationManager,
+ httpResultFactory,
+ httpClient,
userManager,
libraryManager,
isoManager,
diff --git a/MediaBrowser.Api/Playback/UniversalAudioService.cs b/MediaBrowser.Api/Playback/UniversalAudioService.cs
index b3d8bfe59f..b1450e2cc8 100644
--- a/MediaBrowser.Api/Playback/UniversalAudioService.cs
+++ b/MediaBrowser.Api/Playback/UniversalAudioService.cs
@@ -76,8 +76,10 @@ namespace MediaBrowser.Api.Playback
public class UniversalAudioService : BaseApiService
{
public UniversalAudioService(
- IHttpClient httpClient,
+ ILogger logger,
IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IHttpClient httpClient,
IUserManager userManager,
ILibraryManager libraryManager,
IIsoManager isoManager,
@@ -87,15 +89,12 @@ namespace MediaBrowser.Api.Playback
IDeviceManager deviceManager,
ISubtitleEncoder subtitleEncoder,
IMediaSourceManager mediaSourceManager,
- IZipClient zipClient,
IJsonSerializer jsonSerializer,
IAuthorizationContext authorizationContext,
- IImageProcessor imageProcessor,
- INetworkManager networkManager,
- ILoggerFactory loggerFactory)
+ INetworkManager networkManager)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
HttpClient = httpClient;
- ServerConfigurationManager = serverConfigurationManager;
UserManager = userManager;
LibraryManager = libraryManager;
IsoManager = isoManager;
@@ -105,17 +104,12 @@ namespace MediaBrowser.Api.Playback
DeviceManager = deviceManager;
SubtitleEncoder = subtitleEncoder;
MediaSourceManager = mediaSourceManager;
- ZipClient = zipClient;
JsonSerializer = jsonSerializer;
AuthorizationContext = authorizationContext;
- ImageProcessor = imageProcessor;
NetworkManager = networkManager;
- _loggerFactory = loggerFactory;
- _logger = loggerFactory.CreateLogger(nameof(UniversalAudioService));
}
protected IHttpClient HttpClient { get; private set; }
- protected IServerConfigurationManager ServerConfigurationManager { get; private set; }
protected IUserManager UserManager { get; private set; }
protected ILibraryManager LibraryManager { get; private set; }
protected IIsoManager IsoManager { get; private set; }
@@ -125,13 +119,9 @@ namespace MediaBrowser.Api.Playback
protected IDeviceManager DeviceManager { get; private set; }
protected ISubtitleEncoder SubtitleEncoder { get; private set; }
protected IMediaSourceManager MediaSourceManager { get; private set; }
- protected IZipClient ZipClient { get; private set; }
protected IJsonSerializer JsonSerializer { get; private set; }
protected IAuthorizationContext AuthorizationContext { get; private set; }
- protected IImageProcessor ImageProcessor { get; private set; }
protected INetworkManager NetworkManager { get; private set; }
- private ILoggerFactory _loggerFactory;
- private ILogger _logger;
public Task Get(GetUniversalAudioStream request)
{
@@ -242,7 +232,18 @@ namespace MediaBrowser.Api.Playback
AuthorizationContext.GetAuthorizationInfo(Request).DeviceId = request.DeviceId;
- var mediaInfoService = new MediaInfoService(MediaSourceManager, DeviceManager, LibraryManager, ServerConfigurationManager, NetworkManager, MediaEncoder, UserManager, JsonSerializer, AuthorizationContext, _loggerFactory)
+ var mediaInfoService = new MediaInfoService(
+ Logger,
+ ServerConfigurationManager,
+ ResultFactory,
+ MediaSourceManager,
+ DeviceManager,
+ LibraryManager,
+ NetworkManager,
+ MediaEncoder,
+ UserManager,
+ JsonSerializer,
+ AuthorizationContext)
{
Request = Request
};
@@ -276,19 +277,22 @@ namespace MediaBrowser.Api.Playback
if (!isStatic && string.Equals(mediaSource.TranscodingSubProtocol, "hls", StringComparison.OrdinalIgnoreCase))
{
- var service = new DynamicHlsService(ServerConfigurationManager,
- UserManager,
- LibraryManager,
- IsoManager,
- MediaEncoder,
- FileSystem,
- DlnaManager,
- SubtitleEncoder,
- DeviceManager,
- MediaSourceManager,
- JsonSerializer,
- AuthorizationContext,
- NetworkManager)
+ var service = new DynamicHlsService(
+ Logger,
+ ServerConfigurationManager,
+ ResultFactory,
+ UserManager,
+ LibraryManager,
+ IsoManager,
+ MediaEncoder,
+ FileSystem,
+ DlnaManager,
+ SubtitleEncoder,
+ DeviceManager,
+ MediaSourceManager,
+ JsonSerializer,
+ AuthorizationContext,
+ NetworkManager)
{
Request = Request
};
@@ -322,8 +326,11 @@ namespace MediaBrowser.Api.Playback
}
else
{
- var service = new AudioService(HttpClient,
+ var service = new AudioService(
+ Logger,
ServerConfigurationManager,
+ ResultFactory,
+ HttpClient,
UserManager,
LibraryManager,
IsoManager,
@@ -360,6 +367,7 @@ namespace MediaBrowser.Api.Playback
{
return await service.Head(newRequest).ConfigureAwait(false);
}
+
return await service.Get(newRequest).ConfigureAwait(false);
}
}
diff --git a/MediaBrowser.Api/PlaylistService.cs b/MediaBrowser.Api/PlaylistService.cs
index 483bf98fb8..953b00e35a 100644
--- a/MediaBrowser.Api/PlaylistService.cs
+++ b/MediaBrowser.Api/PlaylistService.cs
@@ -1,6 +1,7 @@
using System;
using System.Linq;
using System.Threading.Tasks;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
@@ -9,6 +10,7 @@ using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Playlists;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api
{
@@ -128,7 +130,16 @@ namespace MediaBrowser.Api
private readonly ILibraryManager _libraryManager;
private readonly IAuthorizationContext _authContext;
- public PlaylistService(IDtoService dtoService, IPlaylistManager playlistManager, IUserManager userManager, ILibraryManager libraryManager, IAuthorizationContext authContext)
+ public PlaylistService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IDtoService dtoService,
+ IPlaylistManager playlistManager,
+ IUserManager userManager,
+ ILibraryManager libraryManager,
+ IAuthorizationContext authContext)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
_dtoService = dtoService;
_playlistManager = playlistManager;
diff --git a/MediaBrowser.Api/PluginService.cs b/MediaBrowser.Api/PluginService.cs
index af61887b20..16d3268b9b 100644
--- a/MediaBrowser.Api/PluginService.cs
+++ b/MediaBrowser.Api/PluginService.cs
@@ -3,14 +3,14 @@ using System.IO;
using System.Linq;
using System.Threading.Tasks;
using MediaBrowser.Common;
-using MediaBrowser.Common.Net;
using MediaBrowser.Common.Plugins;
using MediaBrowser.Common.Updates;
-using MediaBrowser.Controller.Devices;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Plugins;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api
{
@@ -150,25 +150,18 @@ namespace MediaBrowser.Api
///
private readonly IApplicationHost _appHost;
private readonly IInstallationManager _installationManager;
- private readonly INetworkManager _network;
- private readonly IDeviceManager _deviceManager;
- public PluginService(IJsonSerializer jsonSerializer,
+ public PluginService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IJsonSerializer jsonSerializer,
IApplicationHost appHost,
- IInstallationManager installationManager,
- INetworkManager network,
- IDeviceManager deviceManager)
- : base()
+ IInstallationManager installationManager)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
- if (jsonSerializer == null)
- {
- throw new ArgumentNullException(nameof(jsonSerializer));
- }
-
_appHost = appHost;
_installationManager = installationManager;
- _network = network;
- _deviceManager = deviceManager;
_jsonSerializer = jsonSerializer;
}
@@ -248,7 +241,7 @@ namespace MediaBrowser.Api
{
// We need to parse this manually because we told service stack not to with IRequiresRequestStream
// https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs
- var id = new Guid(GetPathValue(1));
+ var id = Guid.Parse(GetPathValue(1));
var plugin = _appHost.Plugins.First(p => p.Id == id) as IHasPluginConfiguration;
diff --git a/MediaBrowser.Api/Properties/AssemblyInfo.cs b/MediaBrowser.Api/Properties/AssemblyInfo.cs
index 35bcbea5cd..078af3e305 100644
--- a/MediaBrowser.Api/Properties/AssemblyInfo.cs
+++ b/MediaBrowser.Api/Properties/AssemblyInfo.cs
@@ -1,5 +1,6 @@
using System.Reflection;
using System.Resources;
+using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
@@ -14,6 +15,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: NeutralResourcesLanguage("en")]
+[assembly: InternalsVisibleTo("Jellyfin.Api.Tests")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
diff --git a/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs b/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs
index b7e94b73f2..2bd387229a 100644
--- a/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs
+++ b/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs
@@ -6,6 +6,7 @@ using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Services;
using MediaBrowser.Model.Tasks;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api.ScheduledTasks
{
@@ -85,27 +86,23 @@ namespace MediaBrowser.Api.ScheduledTasks
public class ScheduledTaskService : BaseApiService
{
///
- /// Gets or sets the task manager.
+ /// The task manager.
///
- /// The task manager.
- private ITaskManager TaskManager { get; set; }
-
- private readonly IServerConfigurationManager _config;
+ private readonly ITaskManager _taskManager;
///
/// Initializes a new instance of the class.
///
/// The task manager.
/// taskManager
- public ScheduledTaskService(ITaskManager taskManager, IServerConfigurationManager config)
+ public ScheduledTaskService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ ITaskManager taskManager)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
- if (taskManager == null)
- {
- throw new ArgumentNullException(nameof(taskManager));
- }
-
- TaskManager = taskManager;
- _config = config;
+ _taskManager = taskManager;
}
///
@@ -115,7 +112,7 @@ namespace MediaBrowser.Api.ScheduledTasks
/// IEnumerable{TaskInfo}.
public object Get(GetScheduledTasks request)
{
- IEnumerable result = TaskManager.ScheduledTasks
+ IEnumerable result = _taskManager.ScheduledTasks
.OrderBy(i => i.Name);
if (request.IsHidden.HasValue)
@@ -171,7 +168,7 @@ namespace MediaBrowser.Api.ScheduledTasks
/// Task not found
public object Get(GetScheduledTask request)
{
- var task = TaskManager.ScheduledTasks.FirstOrDefault(i => string.Equals(i.Id, request.Id));
+ var task = _taskManager.ScheduledTasks.FirstOrDefault(i => string.Equals(i.Id, request.Id));
if (task == null)
{
@@ -190,14 +187,14 @@ namespace MediaBrowser.Api.ScheduledTasks
/// Task not found
public void Post(StartScheduledTask request)
{
- var task = TaskManager.ScheduledTasks.FirstOrDefault(i => string.Equals(i.Id, request.Id));
+ var task = _taskManager.ScheduledTasks.FirstOrDefault(i => string.Equals(i.Id, request.Id));
if (task == null)
{
throw new ResourceNotFoundException("Task not found");
}
- TaskManager.Execute(task, new TaskOptions());
+ _taskManager.Execute(task, new TaskOptions());
}
///
@@ -207,14 +204,14 @@ namespace MediaBrowser.Api.ScheduledTasks
/// Task not found
public void Delete(StopScheduledTask request)
{
- var task = TaskManager.ScheduledTasks.FirstOrDefault(i => string.Equals(i.Id, request.Id));
+ var task = _taskManager.ScheduledTasks.FirstOrDefault(i => string.Equals(i.Id, request.Id));
if (task == null)
{
throw new ResourceNotFoundException("Task not found");
}
- TaskManager.Cancel(task);
+ _taskManager.Cancel(task);
}
///
@@ -226,9 +223,9 @@ namespace MediaBrowser.Api.ScheduledTasks
{
// We need to parse this manually because we told service stack not to with IRequiresRequestStream
// https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs
- var id = GetPathValue(1);
+ var id = GetPathValue(1).ToString();
- var task = TaskManager.ScheduledTasks.FirstOrDefault(i => string.Equals(i.Id, id, StringComparison.Ordinal));
+ var task = _taskManager.ScheduledTasks.FirstOrDefault(i => string.Equals(i.Id, id, StringComparison.Ordinal));
if (task == null)
{
diff --git a/MediaBrowser.Api/SearchService.cs b/MediaBrowser.Api/SearchService.cs
index 6c67d4fb15..0a3dc19dc6 100644
--- a/MediaBrowser.Api/SearchService.cs
+++ b/MediaBrowser.Api/SearchService.cs
@@ -1,6 +1,7 @@
using System;
using System.Globalization;
using System.Linq;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
@@ -12,6 +13,7 @@ using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Search;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api
{
@@ -122,7 +124,15 @@ namespace MediaBrowser.Api
/// The library manager.
/// The dto service.
/// The image processor.
- public SearchService(ISearchEngine searchEngine, ILibraryManager libraryManager, IDtoService dtoService, IImageProcessor imageProcessor)
+ public SearchService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ ISearchEngine searchEngine,
+ ILibraryManager libraryManager,
+ IDtoService dtoService,
+ IImageProcessor imageProcessor)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
_searchEngine = searchEngine;
_libraryManager = libraryManager;
diff --git a/MediaBrowser.Api/Session/SessionsService.cs b/MediaBrowser.Api/Session/SessionsService.cs
index 6caf3b4809..700861c554 100644
--- a/MediaBrowser.Api/Session/SessionsService.cs
+++ b/MediaBrowser.Api/Session/SessionsService.cs
@@ -4,6 +4,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Controller;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Devices;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
@@ -12,6 +13,7 @@ using MediaBrowser.Controller.Session;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Services;
using MediaBrowser.Model.Session;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api.Session
{
@@ -269,12 +271,12 @@ namespace MediaBrowser.Api.Session
}
///
- /// Class SessionsService
+ /// Class SessionsService.
///
public class SessionsService : BaseApiService
{
///
- /// The _session manager
+ /// The _session manager.
///
private readonly ISessionManager _sessionManager;
@@ -283,9 +285,20 @@ namespace MediaBrowser.Api.Session
private readonly IAuthenticationRepository _authRepo;
private readonly IDeviceManager _deviceManager;
private readonly ISessionContext _sessionContext;
- private IServerApplicationHost _appHost;
+ private readonly IServerApplicationHost _appHost;
- public SessionsService(ISessionManager sessionManager, IServerApplicationHost appHost, IUserManager userManager, IAuthorizationContext authContext, IAuthenticationRepository authRepo, IDeviceManager deviceManager, ISessionContext sessionContext)
+ public SessionsService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ ISessionManager sessionManager,
+ IServerApplicationHost appHost,
+ IUserManager userManager,
+ IAuthorizationContext authContext,
+ IAuthenticationRepository authRepo,
+ IDeviceManager deviceManager,
+ ISessionContext sessionContext)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
_sessionManager = sessionManager;
_userManager = userManager;
diff --git a/MediaBrowser.Api/StartupWizardService.cs b/MediaBrowser.Api/StartupWizardService.cs
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/MediaBrowser.Api/Subtitles/SubtitleService.cs b/MediaBrowser.Api/Subtitles/SubtitleService.cs
index 1878f51d05..c4a7ae78e7 100644
--- a/MediaBrowser.Api/Subtitles/SubtitleService.cs
+++ b/MediaBrowser.Api/Subtitles/SubtitleService.cs
@@ -6,6 +6,7 @@ using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.MediaEncoding;
@@ -130,7 +131,18 @@ namespace MediaBrowser.Api.Subtitles
private readonly IFileSystem _fileSystem;
private readonly IAuthorizationContext _authContext;
- public SubtitleService(ILibraryManager libraryManager, ISubtitleManager subtitleManager, ISubtitleEncoder subtitleEncoder, IMediaSourceManager mediaSourceManager, IProviderManager providerManager, IFileSystem fileSystem, IAuthorizationContext authContext)
+ public SubtitleService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ ILibraryManager libraryManager,
+ ISubtitleManager subtitleManager,
+ ISubtitleEncoder subtitleEncoder,
+ IMediaSourceManager mediaSourceManager,
+ IProviderManager providerManager,
+ IFileSystem fileSystem,
+ IAuthorizationContext authContext)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
_libraryManager = libraryManager;
_subtitleManager = subtitleManager;
diff --git a/MediaBrowser.Api/SuggestionsService.cs b/MediaBrowser.Api/SuggestionsService.cs
index 4e857eafcf..91f85db6ff 100644
--- a/MediaBrowser.Api/SuggestionsService.cs
+++ b/MediaBrowser.Api/SuggestionsService.cs
@@ -1,5 +1,6 @@
using System;
using System.Linq;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
@@ -8,6 +9,7 @@ using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api
{
@@ -39,7 +41,15 @@ namespace MediaBrowser.Api
private readonly IUserManager _userManager;
private readonly ILibraryManager _libraryManager;
- public SuggestionsService(IDtoService dtoService, IAuthorizationContext authContext, IUserManager userManager, ILibraryManager libraryManager)
+ public SuggestionsService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IDtoService dtoService,
+ IAuthorizationContext authContext,
+ IUserManager userManager,
+ ILibraryManager libraryManager)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
_dtoService = dtoService;
_authContext = authContext;
diff --git a/MediaBrowser.Api/System/ActivityLogService.cs b/MediaBrowser.Api/System/ActivityLogService.cs
index 4d6ce10143..f95fa7ca0b 100644
--- a/MediaBrowser.Api/System/ActivityLogService.cs
+++ b/MediaBrowser.Api/System/ActivityLogService.cs
@@ -1,9 +1,11 @@
using System;
using System.Globalization;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Activity;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api.System
{
@@ -35,7 +37,12 @@ namespace MediaBrowser.Api.System
{
private readonly IActivityManager _activityManager;
- public ActivityLogService(IActivityManager activityManager)
+ public ActivityLogService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IActivityManager activityManager)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
_activityManager = activityManager;
}
diff --git a/MediaBrowser.Api/System/SystemService.cs b/MediaBrowser.Api/System/SystemService.cs
index 56184e18b7..3a56ba701e 100644
--- a/MediaBrowser.Api/System/SystemService.cs
+++ b/MediaBrowser.Api/System/SystemService.cs
@@ -7,6 +7,7 @@ using System.Threading.Tasks;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Net;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Net;
@@ -103,13 +104,19 @@ namespace MediaBrowser.Api.System
/// Initializes a new instance of the class.
///
/// The app host.
- /// The application paths.
/// The file system.
/// jsonSerializer
- public SystemService(IServerApplicationHost appHost, IApplicationPaths appPaths, IFileSystem fileSystem, INetworkManager network)
+ public SystemService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IServerApplicationHost appHost,
+ IFileSystem fileSystem,
+ INetworkManager network)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
+ _appPaths = serverConfigurationManager.ApplicationPaths;
_appHost = appHost;
- _appPaths = appPaths;
_fileSystem = fileSystem;
_network = network;
}
diff --git a/MediaBrowser.Api/TranscodingJob.cs b/MediaBrowser.Api/TranscodingJob.cs
new file mode 100644
index 0000000000..6d944d19ea
--- /dev/null
+++ b/MediaBrowser.Api/TranscodingJob.cs
@@ -0,0 +1,160 @@
+using System;
+using System.Diagnostics;
+using System.Threading;
+using MediaBrowser.Api.Playback;
+using MediaBrowser.Controller.MediaEncoding;
+using MediaBrowser.Model.Dto;
+using Microsoft.Extensions.Logging;
+
+namespace MediaBrowser.Api
+{
+ ///
+ /// Class TranscodingJob.
+ ///
+ public class TranscodingJob
+ {
+ ///
+ /// Gets or sets the play session identifier.
+ ///
+ /// The play session identifier.
+ public string PlaySessionId { get; set; }
+
+ ///
+ /// Gets or sets the live stream identifier.
+ ///
+ /// The live stream identifier.
+ public string LiveStreamId { get; set; }
+
+ public bool IsLiveOutput { get; set; }
+
+ ///
+ /// Gets or sets the path.
+ ///
+ /// The path.
+ public MediaSourceInfo MediaSource { get; set; }
+ public string Path { get; set; }
+ ///
+ /// Gets or sets the type.
+ ///
+ /// The type.
+ public TranscodingJobType Type { get; set; }
+ ///
+ /// Gets or sets the process.
+ ///
+ /// The process.
+ public Process Process { get; set; }
+ public ILogger Logger { get; private set; }
+ ///
+ /// Gets or sets the active request count.
+ ///
+ /// The active request count.
+ public int ActiveRequestCount { get; set; }
+ ///
+ /// Gets or sets the kill timer.
+ ///
+ /// The kill timer.
+ private Timer KillTimer { get; set; }
+
+ public string DeviceId { get; set; }
+
+ public CancellationTokenSource CancellationTokenSource { get; set; }
+
+ public object ProcessLock = new object();
+
+ public bool HasExited { get; set; }
+ public bool IsUserPaused { get; set; }
+
+ public string Id { get; set; }
+
+ public float? Framerate { get; set; }
+ public double? CompletionPercentage { get; set; }
+
+ public long? BytesDownloaded { get; set; }
+ public long? BytesTranscoded { get; set; }
+ public int? BitRate { get; set; }
+
+ public long? TranscodingPositionTicks { get; set; }
+ public long? DownloadPositionTicks { get; set; }
+
+ public TranscodingThrottler TranscodingThrottler { get; set; }
+
+ private readonly object _timerLock = new object();
+
+ public DateTime LastPingDate { get; set; }
+ public int PingTimeout { get; set; }
+
+ public TranscodingJob(ILogger logger)
+ {
+ Logger = logger;
+ }
+
+ public void StopKillTimer()
+ {
+ lock (_timerLock)
+ {
+ if (KillTimer != null)
+ {
+ KillTimer.Change(Timeout.Infinite, Timeout.Infinite);
+ }
+ }
+ }
+
+ public void DisposeKillTimer()
+ {
+ lock (_timerLock)
+ {
+ if (KillTimer != null)
+ {
+ KillTimer.Dispose();
+ KillTimer = null;
+ }
+ }
+ }
+
+ public void StartKillTimer(Action callback)
+ {
+ StartKillTimer(callback, PingTimeout);
+ }
+
+ public void StartKillTimer(Action callback, int intervalMs)
+ {
+ if (HasExited)
+ {
+ return;
+ }
+
+ lock (_timerLock)
+ {
+ if (KillTimer == null)
+ {
+ Logger.LogDebug("Starting kill timer at {0}ms. JobId {1} PlaySessionId {2}", intervalMs, Id, PlaySessionId);
+ KillTimer = new Timer(new TimerCallback(callback), this, intervalMs, Timeout.Infinite);
+ }
+ else
+ {
+ Logger.LogDebug("Changing kill timer to {0}ms. JobId {1} PlaySessionId {2}", intervalMs, Id, PlaySessionId);
+ KillTimer.Change(intervalMs, Timeout.Infinite);
+ }
+ }
+ }
+
+ public void ChangeKillTimerIfStarted()
+ {
+ if (HasExited)
+ {
+ return;
+ }
+
+ lock (_timerLock)
+ {
+ if (KillTimer != null)
+ {
+ var intervalMs = PingTimeout;
+
+ Logger.LogDebug("Changing kill timer to {0}ms. JobId {1} PlaySessionId {2}", intervalMs, Id, PlaySessionId);
+ KillTimer.Change(intervalMs, Timeout.Infinite);
+ }
+ }
+ }
+ }
+}
diff --git a/MediaBrowser.Api/TvShowsService.cs b/MediaBrowser.Api/TvShowsService.cs
index 1340bd8ef7..ac2eca733d 100644
--- a/MediaBrowser.Api/TvShowsService.cs
+++ b/MediaBrowser.Api/TvShowsService.cs
@@ -3,17 +3,18 @@ using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using MediaBrowser.Common.Extensions;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
-using MediaBrowser.Controller.Persistence;
using MediaBrowser.Controller.TV;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Services;
+using MediaBrowser.Model.Querying;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api
{
@@ -252,16 +253,11 @@ namespace MediaBrowser.Api
///
private readonly IUserManager _userManager;
- ///
- /// The _user data repository
- ///
- private readonly IUserDataManager _userDataManager;
///
/// The _library manager
///
private readonly ILibraryManager _libraryManager;
- private readonly IItemRepository _itemRepo;
private readonly IDtoService _dtoService;
private readonly ITVSeriesManager _tvSeriesManager;
private readonly IAuthorizationContext _authContext;
@@ -272,12 +268,19 @@ namespace MediaBrowser.Api
/// The user manager.
/// The user data repository.
/// The library manager.
- public TvShowsService(IUserManager userManager, IUserDataManager userDataManager, ILibraryManager libraryManager, IItemRepository itemRepo, IDtoService dtoService, ITVSeriesManager tvSeriesManager, IAuthorizationContext authContext)
+ public TvShowsService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IUserManager userManager,
+ ILibraryManager libraryManager,
+ IDtoService dtoService,
+ ITVSeriesManager tvSeriesManager,
+ IAuthorizationContext authContext)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
_userManager = userManager;
- _userDataManager = userDataManager;
_libraryManager = libraryManager;
- _itemRepo = itemRepo;
_dtoService = dtoService;
_tvSeriesManager = tvSeriesManager;
_authContext = authContext;
diff --git a/MediaBrowser.Api/UserLibrary/ArtistsService.cs b/MediaBrowser.Api/UserLibrary/ArtistsService.cs
index a30f8adfed..adb0a440f6 100644
--- a/MediaBrowser.Api/UserLibrary/ArtistsService.cs
+++ b/MediaBrowser.Api/UserLibrary/ArtistsService.cs
@@ -1,14 +1,15 @@
using System;
using System.Collections.Generic;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
-using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api.UserLibrary
{
@@ -49,6 +50,27 @@ namespace MediaBrowser.Api.UserLibrary
[Authenticated]
public class ArtistsService : BaseItemsByNameService
{
+ public ArtistsService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IUserManager userManager,
+ ILibraryManager libraryManager,
+ IUserDataManager userDataRepository,
+ IDtoService dtoService,
+ IAuthorizationContext authorizationContext)
+ : base(
+ logger,
+ serverConfigurationManager,
+ httpResultFactory,
+ userManager,
+ libraryManager,
+ userDataRepository,
+ dtoService,
+ authorizationContext)
+ {
+ }
+
///
/// Gets the specified request.
///
@@ -122,9 +144,5 @@ namespace MediaBrowser.Api.UserLibrary
{
throw new NotImplementedException();
}
-
- public ArtistsService(IUserManager userManager, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepository, IDtoService dtoService, IAuthorizationContext authorizationContext) : base(userManager, libraryManager, userDataRepository, itemRepository, dtoService, authorizationContext)
- {
- }
}
}
diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
index e3c9ae58e7..9fa222d324 100644
--- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
+++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
@@ -1,14 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
-using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api.UserLibrary
{
@@ -19,37 +20,47 @@ namespace MediaBrowser.Api.UserLibrary
public abstract class BaseItemsByNameService : BaseApiService
where TItemType : BaseItem, IItemByName
{
- ///
- /// The _user manager
- ///
- protected readonly IUserManager UserManager;
- ///
- /// The library manager
- ///
- protected readonly ILibraryManager LibraryManager;
- protected readonly IUserDataManager UserDataRepository;
- protected readonly IItemRepository ItemRepository;
- protected IDtoService DtoService { get; private set; }
- protected IAuthorizationContext AuthorizationContext { get; private set; }
-
///
/// Initializes a new instance of the class.
///
/// The user manager.
/// The library manager.
/// The user data repository.
- /// The item repository.
/// The dto service.
- protected BaseItemsByNameService(IUserManager userManager, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepository, IDtoService dtoService, IAuthorizationContext authorizationContext)
+ protected BaseItemsByNameService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IUserManager userManager,
+ ILibraryManager libraryManager,
+ IUserDataManager userDataRepository,
+ IDtoService dtoService,
+ IAuthorizationContext authorizationContext)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
UserManager = userManager;
LibraryManager = libraryManager;
UserDataRepository = userDataRepository;
- ItemRepository = itemRepository;
DtoService = dtoService;
AuthorizationContext = authorizationContext;
}
+ ///
+ /// Gets the _user manager.
+ ///
+ protected IUserManager UserManager { get; }
+
+ ///
+ /// Gets the library manager
+ ///
+ protected ILibraryManager LibraryManager { get; }
+
+ protected IUserDataManager UserDataRepository { get; }
+
+ protected IDtoService DtoService { get; }
+
+ protected IAuthorizationContext AuthorizationContext { get; }
+
protected BaseItem GetParentItem(GetItemsByName request)
{
BaseItem parentItem;
diff --git a/MediaBrowser.Api/UserLibrary/GenresService.cs b/MediaBrowser.Api/UserLibrary/GenresService.cs
index 0c04d02dd8..13bb88ca8d 100644
--- a/MediaBrowser.Api/UserLibrary/GenresService.cs
+++ b/MediaBrowser.Api/UserLibrary/GenresService.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
@@ -9,6 +10,7 @@ using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api.UserLibrary
{
@@ -47,6 +49,27 @@ namespace MediaBrowser.Api.UserLibrary
[Authenticated]
public class GenresService : BaseItemsByNameService
{
+ public GenresService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IUserManager userManager,
+ ILibraryManager libraryManager,
+ IUserDataManager userDataRepository,
+ IDtoService dtoService,
+ IAuthorizationContext authorizationContext)
+ : base(
+ logger,
+ serverConfigurationManager,
+ httpResultFactory,
+ userManager,
+ libraryManager,
+ userDataRepository,
+ dtoService,
+ authorizationContext)
+ {
+ }
+
///
/// Gets the specified request.
///
@@ -114,9 +137,5 @@ namespace MediaBrowser.Api.UserLibrary
{
throw new NotImplementedException();
}
-
- public GenresService(IUserManager userManager, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepository, IDtoService dtoService, IAuthorizationContext authorizationContext) : base(userManager, libraryManager, userDataRepository, itemRepository, dtoService, authorizationContext)
- {
- }
}
}
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs
index b4a3026480..1511420d3d 100644
--- a/MediaBrowser.Api/UserLibrary/ItemsService.cs
+++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs
@@ -1,8 +1,8 @@
using System;
using System.Collections.Generic;
-using System.Diagnostics;
using System.Globalization;
using System.Linq;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
@@ -58,25 +58,17 @@ namespace MediaBrowser.Api.UserLibrary
/// The library manager.
/// The localization.
/// The dto service.
- public ItemsService(IUserManager userManager, ILibraryManager libraryManager, ILocalizationManager localization, IDtoService dtoService, IAuthorizationContext authContext)
+ public ItemsService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IUserManager userManager,
+ ILibraryManager libraryManager,
+ ILocalizationManager localization,
+ IDtoService dtoService,
+ IAuthorizationContext authContext)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
- if (userManager == null)
- {
- throw new ArgumentNullException(nameof(userManager));
- }
- if (libraryManager == null)
- {
- throw new ArgumentNullException(nameof(libraryManager));
- }
- if (localization == null)
- {
- throw new ArgumentNullException(nameof(localization));
- }
- if (dtoService == null)
- {
- throw new ArgumentNullException(nameof(dtoService));
- }
-
_userManager = userManager;
_libraryManager = libraryManager;
_localization = localization;
diff --git a/MediaBrowser.Api/UserLibrary/MusicGenresService.cs b/MediaBrowser.Api/UserLibrary/MusicGenresService.cs
index 94f5262b08..e9caca14aa 100644
--- a/MediaBrowser.Api/UserLibrary/MusicGenresService.cs
+++ b/MediaBrowser.Api/UserLibrary/MusicGenresService.cs
@@ -1,14 +1,15 @@
using System;
using System.Collections.Generic;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
-using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api.UserLibrary
{
@@ -38,6 +39,27 @@ namespace MediaBrowser.Api.UserLibrary
[Authenticated]
public class MusicGenresService : BaseItemsByNameService
{
+ public MusicGenresService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IUserManager userManager,
+ ILibraryManager libraryManager,
+ IUserDataManager userDataRepository,
+ IDtoService dtoService,
+ IAuthorizationContext authorizationContext)
+ : base(
+ logger,
+ serverConfigurationManager,
+ httpResultFactory,
+ userManager,
+ libraryManager,
+ userDataRepository,
+ dtoService,
+ authorizationContext)
+ {
+ }
+
///
/// Gets the specified request.
///
@@ -98,9 +120,5 @@ namespace MediaBrowser.Api.UserLibrary
{
throw new NotImplementedException();
}
-
- public MusicGenresService(IUserManager userManager, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepository, IDtoService dtoService, IAuthorizationContext authorizationContext) : base(userManager, libraryManager, userDataRepository, itemRepository, dtoService, authorizationContext)
- {
- }
}
}
diff --git a/MediaBrowser.Api/UserLibrary/PersonsService.cs b/MediaBrowser.Api/UserLibrary/PersonsService.cs
index 2024e9e637..853eada256 100644
--- a/MediaBrowser.Api/UserLibrary/PersonsService.cs
+++ b/MediaBrowser.Api/UserLibrary/PersonsService.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
@@ -9,6 +10,7 @@ using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api.UserLibrary
{
@@ -47,6 +49,27 @@ namespace MediaBrowser.Api.UserLibrary
[Authenticated]
public class PersonsService : BaseItemsByNameService
{
+ public PersonsService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IUserManager userManager,
+ ILibraryManager libraryManager,
+ IUserDataManager userDataRepository,
+ IDtoService dtoService,
+ IAuthorizationContext authorizationContext)
+ : base(
+ logger,
+ serverConfigurationManager,
+ httpResultFactory,
+ userManager,
+ libraryManager,
+ userDataRepository,
+ dtoService,
+ authorizationContext)
+ {
+ }
+
///
/// Gets the specified request.
///
@@ -120,9 +143,5 @@ namespace MediaBrowser.Api.UserLibrary
Items = items.Take(query.Limit ?? int.MaxValue).Select(i => (i as BaseItem, new ItemCounts())).ToArray()
};
}
-
- public PersonsService(IUserManager userManager, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepository, IDtoService dtoService, IAuthorizationContext authorizationContext) : base(userManager, libraryManager, userDataRepository, itemRepository, dtoService, authorizationContext)
- {
- }
}
}
diff --git a/MediaBrowser.Api/UserLibrary/PlaystateService.cs b/MediaBrowser.Api/UserLibrary/PlaystateService.cs
index b40a92a7c3..9d1cf5d9ee 100644
--- a/MediaBrowser.Api/UserLibrary/PlaystateService.cs
+++ b/MediaBrowser.Api/UserLibrary/PlaystateService.cs
@@ -1,6 +1,7 @@
using System;
using System.Globalization;
using System.Threading.Tasks;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
@@ -233,7 +234,17 @@ namespace MediaBrowser.Api.UserLibrary
private readonly ISessionContext _sessionContext;
private readonly IAuthorizationContext _authContext;
- public PlaystateService(IUserManager userManager, IUserDataManager userDataRepository, ILibraryManager libraryManager, ISessionManager sessionManager, ISessionContext sessionContext, IAuthorizationContext authContext)
+ public PlaystateService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IUserManager userManager,
+ IUserDataManager userDataRepository,
+ ILibraryManager libraryManager,
+ ISessionManager sessionManager,
+ ISessionContext sessionContext,
+ IAuthorizationContext authContext)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
_userManager = userManager;
_userDataRepository = userDataRepository;
@@ -256,7 +267,7 @@ namespace MediaBrowser.Api.UserLibrary
private UserItemDataDto MarkPlayed(MarkPlayedItem request)
{
- var user = _userManager.GetUserById(request.UserId);
+ var user = _userManager.GetUserById(Guid.Parse(request.UserId));
DateTime? datePlayed = null;
@@ -406,7 +417,7 @@ namespace MediaBrowser.Api.UserLibrary
private UserItemDataDto MarkUnplayed(MarkUnplayedItem request)
{
- var user = _userManager.GetUserById(request.UserId);
+ var user = _userManager.GetUserById(Guid.Parse(request.UserId));
var session = GetSession(_sessionContext);
diff --git a/MediaBrowser.Api/UserLibrary/StudiosService.cs b/MediaBrowser.Api/UserLibrary/StudiosService.cs
index 890acc9311..683ce5d09d 100644
--- a/MediaBrowser.Api/UserLibrary/StudiosService.cs
+++ b/MediaBrowser.Api/UserLibrary/StudiosService.cs
@@ -1,13 +1,14 @@
using System;
using System.Collections.Generic;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
-using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api.UserLibrary
{
@@ -46,6 +47,27 @@ namespace MediaBrowser.Api.UserLibrary
[Authenticated]
public class StudiosService : BaseItemsByNameService
{
+ public StudiosService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IUserManager userManager,
+ ILibraryManager libraryManager,
+ IUserDataManager userDataRepository,
+ IDtoService dtoService,
+ IAuthorizationContext authorizationContext)
+ : base(
+ logger,
+ serverConfigurationManager,
+ httpResultFactory,
+ userManager,
+ libraryManager,
+ userDataRepository,
+ dtoService,
+ authorizationContext)
+ {
+ }
+
///
/// Gets the specified request.
///
@@ -106,9 +128,5 @@ namespace MediaBrowser.Api.UserLibrary
{
throw new NotImplementedException();
}
-
- public StudiosService(IUserManager userManager, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepository, IDtoService dtoService, IAuthorizationContext authorizationContext) : base(userManager, libraryManager, userDataRepository, itemRepository, dtoService, authorizationContext)
- {
- }
}
}
diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
index da0bf6dcb0..2ec08f5787 100644
--- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
+++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
@@ -3,6 +3,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Common.Extensions;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
@@ -14,6 +15,7 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api.UserLibrary
{
@@ -270,7 +272,18 @@ namespace MediaBrowser.Api.UserLibrary
private readonly IFileSystem _fileSystem;
private readonly IAuthorizationContext _authContext;
- public UserLibraryService(IUserManager userManager, ILibraryManager libraryManager, IUserDataManager userDataRepository, IDtoService dtoService, IUserViewManager userViewManager, IFileSystem fileSystem, IAuthorizationContext authContext)
+ public UserLibraryService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IUserManager userManager,
+ ILibraryManager libraryManager,
+ IUserDataManager userDataRepository,
+ IDtoService dtoService,
+ IUserViewManager userViewManager,
+ IFileSystem fileSystem,
+ IAuthorizationContext authContext)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
_userManager = userManager;
_libraryManager = libraryManager;
diff --git a/MediaBrowser.Api/UserLibrary/UserViewsService.cs b/MediaBrowser.Api/UserLibrary/UserViewsService.cs
index d62049ce9e..0fffb06223 100644
--- a/MediaBrowser.Api/UserLibrary/UserViewsService.cs
+++ b/MediaBrowser.Api/UserLibrary/UserViewsService.cs
@@ -1,6 +1,7 @@
using System;
using System.Globalization;
using System.Linq;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
@@ -51,11 +52,15 @@ namespace MediaBrowser.Api.UserLibrary
private readonly ILibraryManager _libraryManager;
public UserViewsService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
IUserManager userManager,
IUserViewManager userViewManager,
IDtoService dtoService,
IAuthorizationContext authContext,
ILibraryManager libraryManager)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
_userManager = userManager;
_userViewManager = userViewManager;
diff --git a/MediaBrowser.Api/UserLibrary/YearsService.cs b/MediaBrowser.Api/UserLibrary/YearsService.cs
index 0ee0fd219f..07b9aff1b8 100644
--- a/MediaBrowser.Api/UserLibrary/YearsService.cs
+++ b/MediaBrowser.Api/UserLibrary/YearsService.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
@@ -8,6 +9,7 @@ using MediaBrowser.Controller.Net;
using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api.UserLibrary
{
@@ -46,6 +48,27 @@ namespace MediaBrowser.Api.UserLibrary
[Authenticated]
public class YearsService : BaseItemsByNameService
{
+ public YearsService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ IUserManager userManager,
+ ILibraryManager libraryManager,
+ IUserDataManager userDataRepository,
+ IDtoService dtoService,
+ IAuthorizationContext authorizationContext)
+ : base(
+ logger,
+ serverConfigurationManager,
+ httpResultFactory,
+ userManager,
+ libraryManager,
+ userDataRepository,
+ dtoService,
+ authorizationContext)
+ {
+ }
+
///
/// Gets the specified request.
///
@@ -105,9 +128,5 @@ namespace MediaBrowser.Api.UserLibrary
.Distinct()
.Select(year => LibraryManager.GetYear(year));
}
-
- public YearsService(IUserManager userManager, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepository, IDtoService dtoService, IAuthorizationContext authorizationContext) : base(userManager, libraryManager, userDataRepository, itemRepository, dtoService, authorizationContext)
- {
- }
}
}
diff --git a/MediaBrowser.Api/UserService.cs b/MediaBrowser.Api/UserService.cs
index 2c0a0b443b..e1b01b012c 100644
--- a/MediaBrowser.Api/UserService.cs
+++ b/MediaBrowser.Api/UserService.cs
@@ -244,22 +244,23 @@ namespace MediaBrowser.Api
///
private readonly IUserManager _userManager;
private readonly ISessionManager _sessionMananger;
- private readonly IServerConfigurationManager _config;
private readonly INetworkManager _networkManager;
private readonly IDeviceManager _deviceManager;
private readonly IAuthorizationContext _authContext;
public UserService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
IUserManager userManager,
ISessionManager sessionMananger,
- IServerConfigurationManager config,
INetworkManager networkManager,
IDeviceManager deviceManager,
IAuthorizationContext authContext)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
_userManager = userManager;
_sessionMananger = sessionMananger;
- _config = config;
_networkManager = networkManager;
_deviceManager = deviceManager;
_authContext = authContext;
@@ -268,7 +269,7 @@ namespace MediaBrowser.Api
public object Get(GetPublicUsers request)
{
// If the startup wizard hasn't been completed then just return all users
- if (!_config.Configuration.IsStartupWizardCompleted)
+ if (!ServerConfigurationManager.Configuration.IsStartupWizardCompleted)
{
return Get(new GetUsers
{
@@ -497,9 +498,9 @@ namespace MediaBrowser.Api
/// The request.
public async Task Post(UpdateUser request)
{
- var id = GetPathValue(1);
+ var id = Guid.Parse(GetPathValue(1));
- AssertCanUpdateUser(_authContext, _userManager, new Guid(id), false);
+ AssertCanUpdateUser(_authContext, _userManager, id, false);
var dtoUser = request;
diff --git a/MediaBrowser.Api/VideosService.cs b/MediaBrowser.Api/VideosService.cs
index 474036f5cb..46b6d5a947 100644
--- a/MediaBrowser.Api/VideosService.cs
+++ b/MediaBrowser.Api/VideosService.cs
@@ -7,11 +7,10 @@ using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
-using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Dto;
-using MediaBrowser.Model.IO;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Api
{
@@ -51,19 +50,21 @@ namespace MediaBrowser.Api
private readonly ILibraryManager _libraryManager;
private readonly IUserManager _userManager;
private readonly IDtoService _dtoService;
- private readonly IFileSystem _fileSystem;
- private readonly IItemRepository _itemRepo;
- private readonly IServerConfigurationManager _config;
private readonly IAuthorizationContext _authContext;
- public VideosService(ILibraryManager libraryManager, IUserManager userManager, IDtoService dtoService, IItemRepository itemRepo, IFileSystem fileSystem, IServerConfigurationManager config, IAuthorizationContext authContext)
+ public VideosService(
+ ILogger logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ ILibraryManager libraryManager,
+ IUserManager userManager,
+ IDtoService dtoService,
+ IAuthorizationContext authContext)
+ : base(logger, serverConfigurationManager, httpResultFactory)
{
_libraryManager = libraryManager;
_userManager = userManager;
_dtoService = dtoService;
- _itemRepo = itemRepo;
- _fileSystem = fileSystem;
- _config = config;
_authContext = authContext;
}
@@ -84,9 +85,8 @@ namespace MediaBrowser.Api
var dtoOptions = GetDtoOptions(_authContext, request);
- var video = item as Video;
BaseItemDto[] items;
- if (video != null)
+ if (item is Video video)
{
items = video.GetAdditionalParts()
.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, video))
@@ -94,7 +94,7 @@ namespace MediaBrowser.Api
}
else
{
- items = new BaseItemDto[] { };
+ items = Array.Empty();
}
var result = new QueryResult
diff --git a/MediaBrowser.Controller/Library/IUserDataManager.cs b/MediaBrowser.Controller/Library/IUserDataManager.cs
index ce4e3f5302..eb735d31a9 100644
--- a/MediaBrowser.Controller/Library/IUserDataManager.cs
+++ b/MediaBrowser.Controller/Library/IUserDataManager.cs
@@ -9,7 +9,7 @@ using MediaBrowser.Model.Entities;
namespace MediaBrowser.Controller.Library
{
///
- /// Interface IUserDataManager
+ /// Interface IUserDataManager.
///
public interface IUserDataManager
{
@@ -26,13 +26,11 @@ namespace MediaBrowser.Controller.Library
/// The user data.
/// The reason.
/// The cancellation token.
- /// Task.
void SaveUserData(Guid userId, BaseItem item, UserItemData userData, UserDataSaveReason reason, CancellationToken cancellationToken);
void SaveUserData(User userId, BaseItem item, UserItemData userData, UserDataSaveReason reason, CancellationToken cancellationToken);
UserItemData GetUserData(User user, BaseItem item);
- UserItemData GetUserData(string userId, BaseItem item);
UserItemData GetUserData(Guid userId, BaseItem item);
///
diff --git a/MediaBrowser.Controller/Library/IUserManager.cs b/MediaBrowser.Controller/Library/IUserManager.cs
index eea2e3a718..8d92c9f6f2 100644
--- a/MediaBrowser.Controller/Library/IUserManager.cs
+++ b/MediaBrowser.Controller/Library/IUserManager.cs
@@ -49,20 +49,13 @@ namespace MediaBrowser.Controller.Library
event EventHandler> UserLockedOut;
///
- /// Gets a User by Id.
+ /// Gets a user by Id.
///
/// The id.
/// The user with the specified Id, or null if the user doesn't exist.
/// id is an empty Guid.
User GetUserById(Guid id);
- ///
- /// Gets the user by identifier.
- ///
- /// The identifier.
- /// User.
- User GetUserById(string id);
-
///
/// Gets the name of the user by.
///
diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs
index b8abe49e3e..9de6fef619 100644
--- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs
+++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs
@@ -172,16 +172,18 @@ namespace MediaBrowser.Model.Configuration
if (string.IsNullOrWhiteSpace(value))
{
// If baseUrl is empty, set an empty prefix string
- value = string.Empty;
+ _baseUrl = string.Empty;
+ return;
}
- else if (!value.StartsWith("/"))
+
+ if (value[0] != '/')
{
// If baseUrl was not configured with a leading slash, append one for consistency
value = "/" + value;
}
// Normalize the end of the string
- if (value.EndsWith("/"))
+ if (value[value.Length - 1] == '/')
{
// If baseUrl was configured with a trailing slash, remove it for consistency
value = value.Remove(value.Length - 1);
diff --git a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs
index d84bc2abbc..981c3a53a1 100644
--- a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs
+++ b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs
@@ -16,7 +16,6 @@ using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.IO;
using MediaBrowser.XbmcMetadata.Configuration;
using Microsoft.Extensions.Logging;
@@ -856,7 +855,7 @@ namespace MediaBrowser.XbmcMetadata.Savers
return;
}
- var user = userManager.GetUserById(userId);
+ var user = userManager.GetUserById(Guid.Parse(userId));
if (user == null)
{
diff --git a/MediaBrowser.sln b/MediaBrowser.sln
index 58bfb55f6f..da828927b3 100644
--- a/MediaBrowser.sln
+++ b/MediaBrowser.sln
@@ -60,6 +60,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jellyfin.MediaEncoding.Test
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jellyfin.Naming.Tests", "tests\Jellyfin.Naming.Tests\Jellyfin.Naming.Tests.csproj", "{3998657B-1CCC-49DD-A19F-275DC8495F57}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jellyfin.Api.Tests", "tests\Jellyfin.Api.Tests\Jellyfin.Api.Tests.csproj", "{A2FD0A10-8F62-4F9D-B171-FFDF9F0AFA9D}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -166,6 +168,10 @@ Global
{3998657B-1CCC-49DD-A19F-275DC8495F57}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3998657B-1CCC-49DD-A19F-275DC8495F57}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3998657B-1CCC-49DD-A19F-275DC8495F57}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A2FD0A10-8F62-4F9D-B171-FFDF9F0AFA9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A2FD0A10-8F62-4F9D-B171-FFDF9F0AFA9D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A2FD0A10-8F62-4F9D-B171-FFDF9F0AFA9D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A2FD0A10-8F62-4F9D-B171-FFDF9F0AFA9D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -195,5 +201,6 @@ Global
{DF194677-DFD3-42AF-9F75-D44D5A416478} = {FBBB5129-006E-4AD7-BAD5-8B7CA1D10ED6}
{28464062-0939-4AA7-9F7B-24DDDA61A7C0} = {FBBB5129-006E-4AD7-BAD5-8B7CA1D10ED6}
{3998657B-1CCC-49DD-A19F-275DC8495F57} = {FBBB5129-006E-4AD7-BAD5-8B7CA1D10ED6}
+ {A2FD0A10-8F62-4F9D-B171-FFDF9F0AFA9D} = {FBBB5129-006E-4AD7-BAD5-8B7CA1D10ED6}
EndGlobalSection
EndGlobal
diff --git a/tests/Jellyfin.Api.Tests/GetPathValueTests.cs b/tests/Jellyfin.Api.Tests/GetPathValueTests.cs
new file mode 100644
index 0000000000..b01d1af1f0
--- /dev/null
+++ b/tests/Jellyfin.Api.Tests/GetPathValueTests.cs
@@ -0,0 +1,45 @@
+using MediaBrowser.Api;
+using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Controller.Net;
+using MediaBrowser.Model.Configuration;
+using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging.Abstractions;
+using Moq;
+using Xunit;
+
+namespace Jellyfin.Api.Tests
+{
+ public class GetPathValueTests
+ {
+ [Theory]
+ [InlineData("https://localhost:8096/ScheduledTasks/1234/Triggers", "", 1, "1234")]
+ [InlineData("https://localhost:8096/emby/ScheduledTasks/1234/Triggers", "", 1, "1234")]
+ [InlineData("https://localhost:8096/mediabrowser/ScheduledTasks/1234/Triggers", "", 1, "1234")]
+ [InlineData("https://localhost:8096/jellyfin/2/ScheduledTasks/1234/Triggers", "jellyfin/2", 1, "1234")]
+ [InlineData("https://localhost:8096/jellyfin/2/emby/ScheduledTasks/1234/Triggers", "jellyfin/2", 1, "1234")]
+ [InlineData("https://localhost:8096/jellyfin/2/mediabrowser/ScheduledTasks/1234/Triggers", "jellyfin/2", 1, "1234")]
+ [InlineData("https://localhost:8096/JELLYFIN/2/ScheduledTasks/1234/Triggers", "jellyfin/2", 1, "1234")]
+ [InlineData("https://localhost:8096/JELLYFIN/2/Emby/ScheduledTasks/1234/Triggers", "jellyfin/2", 1, "1234")]
+ [InlineData("https://localhost:8096/JELLYFIN/2/MediaBrowser/ScheduledTasks/1234/Triggers", "jellyfin/2", 1, "1234")]
+ public void GetPathValueTest(string path, string baseUrl, int index, string value)
+ {
+ var reqMock = Mock.Of(x => x.PathInfo == path);
+ var conf = new ServerConfiguration()
+ {
+ BaseUrl = baseUrl
+ };
+
+ var confManagerMock = Mock.Of(x => x.Configuration == conf);
+
+ var service = new BrandingService(
+ new NullLogger(),
+ confManagerMock,
+ Mock.Of())
+ {
+ Request = reqMock
+ };
+
+ Assert.Equal(value, service.GetPathValue(index).ToString());
+ }
+ }
+}
diff --git a/tests/Jellyfin.Api.Tests/Jellyfin.Api.Tests.csproj b/tests/Jellyfin.Api.Tests/Jellyfin.Api.Tests.csproj
new file mode 100644
index 0000000000..1671b8d797
--- /dev/null
+++ b/tests/Jellyfin.Api.Tests/Jellyfin.Api.Tests.csproj
@@ -0,0 +1,20 @@
+
+
+
+ netcoreapp3.0
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+