diff options
| author | LukePulverenti <luke.pulverenti@gmail.com> | 2013-02-24 19:13:45 -0500 |
|---|---|---|
| committer | LukePulverenti <luke.pulverenti@gmail.com> | 2013-02-24 19:13:45 -0500 |
| commit | 28ccfb1bd17eceb683d428d1c0e2d2ea52a2f7ff (patch) | |
| tree | e5dccabace19f632c185781c4501d488c7dc7fae | |
| parent | 5b1eea558a55b9a46e556b795189425441b4a026 (diff) | |
extracted httpclient dependancy
40 files changed, 412 insertions, 171 deletions
diff --git a/MediaBrowser.Common.Implementations/BaseApplicationPaths.cs b/MediaBrowser.Common.Implementations/BaseApplicationPaths.cs index 93478b22c..f38013d00 100644 --- a/MediaBrowser.Common.Implementations/BaseApplicationPaths.cs +++ b/MediaBrowser.Common.Implementations/BaseApplicationPaths.cs @@ -1,4 +1,5 @@ -using System; +using MediaBrowser.Common.Kernel; +using System; using System.Configuration; using System.IO; using System.Reflection; @@ -9,7 +10,7 @@ namespace MediaBrowser.Common.Implementations /// Provides a base class to hold common application paths used by both the Ui and Server. /// This can be subclassed to add application-specific paths. /// </summary> - public abstract class BaseApplicationPaths + public abstract class BaseApplicationPaths : IApplicationPaths { /// <summary> /// The _program data path diff --git a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj index d271db060..736a15d42 100644 --- a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj +++ b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj @@ -31,6 +31,9 @@ <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> </PropertyGroup> + <PropertyGroup> + <RunPostBuildEvent>Always</RunPostBuildEvent> + </PropertyGroup> <ItemGroup> <Reference Include="protobuf-net"> <HintPath>..\packages\protobuf-net.2.0.0.621\lib\net40\protobuf-net.dll</HintPath> @@ -77,6 +80,9 @@ </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> + <PropertyGroup> + <PostBuildEvent>xcopy "$(TargetPath)" "$(SolutionDir)\Nuget\dlls\" /y /d /r /i</PostBuildEvent> + </PropertyGroup> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. <Target Name="BeforeBuild"> diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs index a5a9b46ec..50dca1e4c 100644 --- a/MediaBrowser.Common/Kernel/BaseKernel.cs +++ b/MediaBrowser.Common/Kernel/BaseKernel.cs @@ -172,12 +172,6 @@ namespace MediaBrowser.Common.Kernel public IEnumerable<IWebSocketListener> WebSocketListeners { get; private set; } /// <summary> - /// The _HTTP manager - /// </summary> - /// <value>The HTTP manager.</value> - public HttpManager HttpManager { get; private set; } - - /// <summary> /// Gets or sets the TCP manager. /// </summary> /// <value>The TCP manager.</value> @@ -323,9 +317,6 @@ namespace MediaBrowser.Common.Kernel Logger.Info("Version {0} initializing", ApplicationVersion); - DisposeHttpManager(); - HttpManager = new HttpManager(this, Logger); - await OnConfigurationLoaded().ConfigureAwait(false); FindParts(); @@ -422,7 +413,6 @@ namespace MediaBrowser.Common.Kernel if (dispose) { DisposeTcpManager(); - DisposeHttpManager(); } } @@ -439,18 +429,6 @@ namespace MediaBrowser.Common.Kernel } /// <summary> - /// Disposes the HTTP manager. - /// </summary> - private void DisposeHttpManager() - { - if (HttpManager != null) - { - HttpManager.Dispose(); - HttpManager = null; - } - } - - /// <summary> /// Gets the current application version /// </summary> /// <value>The application version.</value> diff --git a/MediaBrowser.Common/Kernel/BasePeriodicWebSocketListener.cs b/MediaBrowser.Common/Kernel/BasePeriodicWebSocketListener.cs index 0f20758d4..5374bb714 100644 --- a/MediaBrowser.Common/Kernel/BasePeriodicWebSocketListener.cs +++ b/MediaBrowser.Common/Kernel/BasePeriodicWebSocketListener.cs @@ -3,7 +3,6 @@ using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; using System.Linq; -using System.Net.WebSockets; using System.Threading; using System.Threading.Tasks; diff --git a/MediaBrowser.Common/Kernel/TcpManager.cs b/MediaBrowser.Common/Kernel/TcpManager.cs index c04b77599..6ea390904 100644 --- a/MediaBrowser.Common/Kernel/TcpManager.cs +++ b/MediaBrowser.Common/Kernel/TcpManager.cs @@ -8,7 +8,6 @@ using System.IO; using System.Linq; using System.Net; using System.Net.Sockets; -using System.Net.WebSockets; using System.Reflection; using System.Text; using System.Threading; @@ -39,7 +38,7 @@ namespace MediaBrowser.Common.Kernel /// Gets or sets the json serializer. /// </summary> /// <value>The json serializer.</value> - private IJsonSerializer _jsonSerializer; + private readonly IJsonSerializer _jsonSerializer; /// <summary> /// This subscribes to HttpListener requests and finds the appropriate BaseHandler to process it diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index f9147141d..dd73e8877 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -72,9 +72,6 @@ </Reference> <Reference Include="System" /> <Reference Include="System.Core" /> - <Reference Include="System.Net" /> - <Reference Include="System.Net.Http" /> - <Reference Include="System.Net.Http.WebRequest" /> <Reference Include="System.Web" /> <Reference Include="Microsoft.CSharp" /> </ItemGroup> @@ -102,7 +99,7 @@ <Compile Include="Net\Handlers\BaseActionHandler.cs" /> <Compile Include="Net\Handlers\IHttpServerHandler.cs" /> <Compile Include="Net\Handlers\StaticFileHandler.cs" /> - <Compile Include="Net\HttpManager.cs" /> + <Compile Include="Net\IHttpClient.cs" /> <Compile Include="Net\IHttpServer.cs" /> <Compile Include="Net\INetworkManager.cs" /> <Compile Include="Net\IRestfulService.cs" /> @@ -113,6 +110,8 @@ <Compile Include="Net\UdpMessageReceivedEventArgs.cs" /> <Compile Include="Net\WebSocketConnectEventArgs.cs" /> <Compile Include="Net\WebSocketConnection.cs" /> + <Compile Include="Net\WebSocketMessageType.cs" /> + <Compile Include="Net\WebSocketState.cs" /> <Compile Include="Plugins\BaseUiPlugin.cs" /> <Compile Include="Plugins\IPlugin.cs" /> <Compile Include="Plugins\IUIPlugin.cs" /> diff --git a/MediaBrowser.Common/Net/IHttpClient.cs b/MediaBrowser.Common/Net/IHttpClient.cs new file mode 100644 index 000000000..ef0dd69b7 --- /dev/null +++ b/MediaBrowser.Common/Net/IHttpClient.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Common.Net +{ + public interface IHttpClient : IDisposable + { + /// <summary> + /// Performs a GET request and returns the resulting stream + /// </summary> + /// <param name="url">The URL.</param> + /// <param name="resourcePool">The resource pool.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>Task{Stream}.</returns> + /// <exception cref="MediaBrowser.Model.Net.HttpException"></exception> + Task<Stream> Get(string url, SemaphoreSlim resourcePool, CancellationToken cancellationToken); + + /// <summary> + /// Performs a POST request + /// </summary> + /// <param name="url">The URL.</param> + /// <param name="postData">Params to add to the POST data.</param> + /// <param name="resourcePool">The resource pool.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>stream on success, null on failure</returns> + /// <exception cref="System.ArgumentNullException">postData</exception> + /// <exception cref="MediaBrowser.Model.Net.HttpException"></exception> + Task<Stream> Post(string url, Dictionary<string, string> postData, SemaphoreSlim resourcePool, CancellationToken cancellationToken); + + /// <summary> + /// Downloads the contents of a given url into a temporary location + /// </summary> + /// <param name="url">The URL.</param> + /// <param name="resourcePool">The resource pool.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <param name="progress">The progress.</param> + /// <param name="userAgent">The user agent.</param> + /// <returns>Task{System.String}.</returns> + /// <exception cref="System.ArgumentNullException">progress</exception> + /// <exception cref="MediaBrowser.Model.Net.HttpException"></exception> + Task<string> GetTempFile(string url, SemaphoreSlim resourcePool, CancellationToken cancellationToken, IProgress<double> progress, string userAgent = null); + + /// <summary> + /// Downloads the contents of a given url into a MemoryStream + /// </summary> + /// <param name="url">The URL.</param> + /// <param name="resourcePool">The resource pool.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>Task{MemoryStream}.</returns> + /// <exception cref="MediaBrowser.Model.Net.HttpException"></exception> + Task<MemoryStream> GetMemoryStream(string url, SemaphoreSlim resourcePool, CancellationToken cancellationToken); + + /// <summary> + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// </summary> + void Dispose(); + } +}
\ No newline at end of file diff --git a/MediaBrowser.Common/Net/INetworkManager.cs b/MediaBrowser.Common/Net/INetworkManager.cs index 7f6bfe152..782855cd1 100644 --- a/MediaBrowser.Common/Net/INetworkManager.cs +++ b/MediaBrowser.Common/Net/INetworkManager.cs @@ -1,5 +1,5 @@ -using System.Collections.Generic; using MediaBrowser.Model.Net; +using System.Collections.Generic; namespace MediaBrowser.Common.Net { diff --git a/MediaBrowser.Common/Net/IWebSocket.cs b/MediaBrowser.Common/Net/IWebSocket.cs index 3fd4b1241..9c9bcb41d 100644 --- a/MediaBrowser.Common/Net/IWebSocket.cs +++ b/MediaBrowser.Common/Net/IWebSocket.cs @@ -1,5 +1,4 @@ using System; -using System.Net.WebSockets; using System.Threading; using System.Threading.Tasks; diff --git a/MediaBrowser.Common/Net/MimeTypes.cs b/MediaBrowser.Common/Net/MimeTypes.cs index 8f980200e..b9d0347d7 100644 --- a/MediaBrowser.Common/Net/MimeTypes.cs +++ b/MediaBrowser.Common/Net/MimeTypes.cs @@ -200,7 +200,7 @@ namespace MediaBrowser.Common.Net return "image/svg+xml"; } - throw new InvalidOperationException("Argument not supported: " + path); + throw new ArgumentException("Argument not supported: " + path); } } } diff --git a/MediaBrowser.Common/Net/WebSocketConnectEventArgs.cs b/MediaBrowser.Common/Net/WebSocketConnectEventArgs.cs index 711da7a50..ce22c9520 100644 --- a/MediaBrowser.Common/Net/WebSocketConnectEventArgs.cs +++ b/MediaBrowser.Common/Net/WebSocketConnectEventArgs.cs @@ -1,5 +1,4 @@ using System; -using System.Net; namespace MediaBrowser.Common.Net { diff --git a/MediaBrowser.Common/Net/WebSocketConnection.cs b/MediaBrowser.Common/Net/WebSocketConnection.cs index 6b22ef78e..36d649e3b 100644 --- a/MediaBrowser.Common/Net/WebSocketConnection.cs +++ b/MediaBrowser.Common/Net/WebSocketConnection.cs @@ -1,8 +1,7 @@ -using System.IO; -using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; using System; -using System.Net.WebSockets; +using System.IO; using System.Threading; using System.Threading.Tasks; diff --git a/MediaBrowser.Common/Net/WebSocketMessageType.cs b/MediaBrowser.Common/Net/WebSocketMessageType.cs new file mode 100644 index 000000000..3b12bc2b2 --- /dev/null +++ b/MediaBrowser.Common/Net/WebSocketMessageType.cs @@ -0,0 +1,22 @@ + +namespace MediaBrowser.Common.Net +{ + /// <summary> + /// Enum WebSocketMessageType + /// </summary> + public enum WebSocketMessageType + { + /// <summary> + /// The text + /// </summary> + Text, + /// <summary> + /// The binary + /// </summary> + Binary, + /// <summary> + /// The close + /// </summary> + Close, + } +} diff --git a/MediaBrowser.Common/Net/WebSocketState.cs b/MediaBrowser.Common/Net/WebSocketState.cs new file mode 100644 index 000000000..7f8ac3cbe --- /dev/null +++ b/MediaBrowser.Common/Net/WebSocketState.cs @@ -0,0 +1,38 @@ + +namespace MediaBrowser.Common.Net +{ + /// <summary> + /// Enum WebSocketState + /// </summary> + public enum WebSocketState + { + /// <summary> + /// The none + /// </summary> + None, + /// <summary> + /// The connecting + /// </summary> + Connecting, + /// <summary> + /// The open + /// </summary> + Open, + /// <summary> + /// The close sent + /// </summary> + CloseSent, + /// <summary> + /// The close received + /// </summary> + CloseReceived, + /// <summary> + /// The closed + /// </summary> + Closed, + /// <summary> + /// The aborted + /// </summary> + Aborted + } +} diff --git a/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs b/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs index e67eb3626..2c3d21a4b 100644 --- a/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs +++ b/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Kernel; -using MediaBrowser.Model.Tasks; +using MediaBrowser.Model.Tasks; using System; using System.Linq; diff --git a/MediaBrowser.Controller/Plugins/PluginSecurityManager.cs b/MediaBrowser.Controller/Plugins/PluginSecurityManager.cs index 9accef621..a08eb457d 100644 --- a/MediaBrowser.Controller/Plugins/PluginSecurityManager.cs +++ b/MediaBrowser.Controller/Plugins/PluginSecurityManager.cs @@ -44,7 +44,10 @@ namespace MediaBrowser.Controller.Plugins /// </summary> private INetworkManager _networkManager; - private IKernel _kernel; + /// <summary> + /// The _kernel + /// </summary> + private readonly IKernel _kernel; /// <summary> /// Initializes a new instance of the <see cref="PluginSecurityManager" /> class. diff --git a/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs b/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs index e833e4931..0a0b1110a 100644 --- a/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs +++ b/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Extensions; +using MediaBrowser.Common.Net; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Model.Entities; @@ -17,6 +18,22 @@ namespace MediaBrowser.Controller.Providers.Movies class FanArtMovieProvider : FanartBaseProvider { /// <summary> + /// Gets the HTTP client. + /// </summary> + /// <value>The HTTP client.</value> + protected IHttpClient HttpClient { get; private set; } + + public FanArtMovieProvider(IHttpClient httpClient) + : base() + { + if (httpClient == null) + { + throw new ArgumentNullException("httpClient"); + } + HttpClient = httpClient; + } + + /// <summary> /// The fan art base URL /// </summary> protected string FanArtBaseUrl = "http://api.fanart.tv/webservice/movie/{0}/{1}/xml/all/1/1"; @@ -70,7 +87,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (var xml = await Kernel.Instance.HttpManager.Get(url, Kernel.Instance.ResourcePools.FanArt, cancellationToken).ConfigureAwait(false)) + using (var xml = await HttpClient.Get(url, Kernel.Instance.ResourcePools.FanArt, cancellationToken).ConfigureAwait(false)) { doc.Load(xml); } @@ -113,7 +130,7 @@ namespace MediaBrowser.Controller.Providers.Movies } } cancellationToken.ThrowIfCancellationRequested(); - + if (Kernel.Instance.Configuration.DownloadMovieArt && !item.ResolveArgs.ContainsMetaFileByName(ART_FILE)) { var node = @@ -139,7 +156,7 @@ namespace MediaBrowser.Controller.Providers.Movies } } cancellationToken.ThrowIfCancellationRequested(); - + if (Kernel.Instance.Configuration.DownloadMovieDisc && !item.ResolveArgs.ContainsMetaFileByName(DISC_FILE)) { var node = doc.SelectSingleNode("//fanart/movie/moviediscs/moviedisc[@lang = \"" + language + "\"]/@url") ?? @@ -163,7 +180,7 @@ namespace MediaBrowser.Controller.Providers.Movies } cancellationToken.ThrowIfCancellationRequested(); - + if (Kernel.Instance.Configuration.DownloadMovieBanner && !item.ResolveArgs.ContainsMetaFileByName(BANNER_FILE)) { var node = doc.SelectSingleNode("//fanart/movie/moviebanners/moviebanner[@lang = \"" + language + "\"]/@url") ?? @@ -187,7 +204,7 @@ namespace MediaBrowser.Controller.Providers.Movies } cancellationToken.ThrowIfCancellationRequested(); - + if (Kernel.Instance.Configuration.DownloadMovieThumb && !item.ResolveArgs.ContainsMetaFileByName(THUMB_FILE)) { var node = doc.SelectSingleNode("//fanart/movie/moviethumbs/moviethumb[@lang = \"" + language + "\"]/@url") ?? diff --git a/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs index bc261de6d..9bd28d1ad 100644 --- a/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs +++ b/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs @@ -1,4 +1,6 @@ -using MediaBrowser.Common.Extensions; +using System.Net; +using MediaBrowser.Common.Extensions; +using MediaBrowser.Common.Net; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Model.Entities; @@ -9,7 +11,6 @@ using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; -using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Threading; @@ -37,18 +38,30 @@ namespace MediaBrowser.Controller.Providers.Movies protected IJsonSerializer JsonSerializer { get; private set; } /// <summary> + /// Gets the HTTP client. + /// </summary> + /// <value>The HTTP client.</value> + protected IHttpClient HttpClient { get; private set; } + + /// <summary> /// Initializes a new instance of the <see cref="MovieDbProvider" /> class. /// </summary> /// <param name="jsonSerializer">The json serializer.</param> + /// <param name="httpClient">The HTTP client.</param> /// <exception cref="System.ArgumentNullException">jsonSerializer</exception> - public MovieDbProvider(IJsonSerializer jsonSerializer) + public MovieDbProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient) : base() { if (jsonSerializer == null) { throw new ArgumentNullException("jsonSerializer"); } + if (httpClient == null) + { + throw new ArgumentNullException("httpClient"); + } JsonSerializer = jsonSerializer; + HttpClient = httpClient; } /// <summary> @@ -114,7 +127,7 @@ namespace MediaBrowser.Controller.Providers.Movies { get { - LazyInitializer.EnsureInitialized(ref _tmdbSettingsTask, ref _tmdbSettingsTaskInitialized, ref _tmdbSettingsTaskSyncLock, () => GetTmdbSettings(JsonSerializer)); + LazyInitializer.EnsureInitialized(ref _tmdbSettingsTask, ref _tmdbSettingsTaskInitialized, ref _tmdbSettingsTaskSyncLock, () => GetTmdbSettings(JsonSerializer, HttpClient)); return _tmdbSettingsTask; } } @@ -123,11 +136,11 @@ namespace MediaBrowser.Controller.Providers.Movies /// Gets the TMDB settings. /// </summary> /// <returns>Task{TmdbSettingsResult}.</returns> - private static async Task<TmdbSettingsResult> GetTmdbSettings(IJsonSerializer jsonSerializer) + private static async Task<TmdbSettingsResult> GetTmdbSettings(IJsonSerializer jsonSerializer, IHttpClient httpClient) { try { - using (var json = await Kernel.Instance.HttpManager.Get(String.Format(TmdbConfigUrl, ApiKey), Kernel.Instance.ResourcePools.MovieDb, CancellationToken.None).ConfigureAwait(false)) + using (var json = await httpClient.Get(String.Format(TmdbConfigUrl, ApiKey), Kernel.Instance.ResourcePools.MovieDb, CancellationToken.None).ConfigureAwait(false)) { return jsonSerializer.DeserializeFromStream<TmdbSettingsResult>(json); } @@ -189,7 +202,7 @@ namespace MediaBrowser.Controller.Providers.Movies { //in addition to ours, we need to set the last refreshed time for the local data provider //so it won't see the new files we download and process them all over again - if (JsonProvider == null) JsonProvider = new MovieProviderFromJson(JsonSerializer); + if (JsonProvider == null) JsonProvider = new MovieProviderFromJson(HttpClient, JsonSerializer); var data = item.ProviderData.GetValueOrDefault(JsonProvider.Id, new BaseProviderInfo { ProviderId = JsonProvider.Id }); data.LastRefreshed = value; item.ProviderData[JsonProvider.Id] = data; @@ -460,7 +473,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await Kernel.Instance.HttpManager.Get(url3, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url3, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) { searchResult = JsonSerializer.DeserializeFromStream<TmdbMovieSearchResults>(json); } @@ -492,7 +505,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await Kernel.Instance.HttpManager.Get(url3, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url3, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) { searchResult = JsonSerializer.DeserializeFromStream<TmdbMovieSearchResults>(json); } @@ -531,7 +544,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await Kernel.Instance.HttpManager.Get(url3, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url3, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) { var response = JsonSerializer.DeserializeFromStream<TmdbAltTitleResults>(json); @@ -611,7 +624,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await Kernel.Instance.HttpManager.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) { var movieResult = JsonSerializer.DeserializeFromStream<CompleteMovieData>(json); @@ -710,7 +723,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (var json = await Kernel.Instance.HttpManager.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (var json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) { mainResult = JsonSerializer.DeserializeFromStream<CompleteMovieData>(json); } @@ -742,7 +755,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await Kernel.Instance.HttpManager.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) { mainResult = JsonSerializer.DeserializeFromStream<CompleteMovieData>(json); } @@ -777,7 +790,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await Kernel.Instance.HttpManager.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) { cast = JsonSerializer.DeserializeFromStream<TmdbCastResult>(json); } @@ -803,7 +816,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await Kernel.Instance.HttpManager.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) { releases = JsonSerializer.DeserializeFromStream<TmdbReleasesResult>(json); } @@ -831,7 +844,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await Kernel.Instance.HttpManager.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) { images = JsonSerializer.DeserializeFromStream<TmdbImages>(json); } diff --git a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs index 5de17aab0..6b83c861e 100644 --- a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs +++ b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Serialization; using System; using System.IO; @@ -12,7 +13,7 @@ namespace MediaBrowser.Controller.Providers.Movies /// </summary> public class MovieProviderFromJson : MovieDbProvider { - public MovieProviderFromJson(IJsonSerializer jsonSerializer) : base(jsonSerializer) + public MovieProviderFromJson(IHttpClient httpClient, IJsonSerializer jsonSerializer) : base(jsonSerializer, httpClient) { } diff --git a/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs b/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs index 7517ec65c..f87af5a1f 100644 --- a/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs +++ b/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Serialization; using System; using System.IO; @@ -12,7 +13,8 @@ namespace MediaBrowser.Controller.Providers.Movies /// </summary> class PersonProviderFromJson : TmdbPersonProvider { - public PersonProviderFromJson(IJsonSerializer jsonSerializer) : base(jsonSerializer) + public PersonProviderFromJson(IHttpClient httpClient, IJsonSerializer jsonSerializer) + : base(httpClient, jsonSerializer) { } diff --git a/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs b/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs index 32013614c..2e1ca8d04 100644 --- a/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs +++ b/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs @@ -1,6 +1,8 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Net; +using MediaBrowser.Model.Serialization; using System; using System.Collections.Generic; using System.Globalization; @@ -9,7 +11,6 @@ using System.Linq; using System.Net; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Model.Serialization; namespace MediaBrowser.Controller.Providers.Movies { @@ -30,17 +31,29 @@ namespace MediaBrowser.Controller.Providers.Movies protected IJsonSerializer JsonSerializer { get; private set; } /// <summary> + /// Gets the HTTP client. + /// </summary> + /// <value>The HTTP client.</value> + protected IHttpClient HttpClient { get; private set; } + + /// <summary> /// Initializes a new instance of the <see cref="MovieDbProvider" /> class. /// </summary> + /// <param name="httpClient">The HTTP client.</param> /// <param name="jsonSerializer">The json serializer.</param> /// <exception cref="System.ArgumentNullException">jsonSerializer</exception> - public TmdbPersonProvider(IJsonSerializer jsonSerializer) + public TmdbPersonProvider(IHttpClient httpClient, IJsonSerializer jsonSerializer) : base() { if (jsonSerializer == null) { throw new ArgumentNullException("jsonSerializer"); } + if (httpClient == null) + { + throw new ArgumentNullException("httpClient"); + } + HttpClient = httpClient; JsonSerializer = jsonSerializer; } @@ -151,7 +164,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await Kernel.Instance.HttpManager.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) { searchResult = JsonSerializer.DeserializeFromStream<PersonSearchResults>(json); } @@ -177,7 +190,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await Kernel.Instance.HttpManager.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) { if (json != null) { @@ -240,7 +253,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await Kernel.Instance.HttpManager.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) { if (json != null) { @@ -308,7 +321,7 @@ namespace MediaBrowser.Controller.Providers.Movies var localPath = Path.Combine(item.MetaLocation, targetName); if (!item.ResolveArgs.ContainsMetaFileByName(targetName)) { - using (var sourceStream = await Kernel.Instance.HttpManager.FetchToMemoryStream(source, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (var sourceStream = await HttpClient.GetMemoryStream(source, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) { await Kernel.Instance.FileSystemManager.SaveToLibraryFilesystem(item, localPath, sourceStream, cancellationToken).ConfigureAwait(false); diff --git a/MediaBrowser.Controller/Providers/ProviderManager.cs b/MediaBrowser.Controller/Providers/ProviderManager.cs index c5e70dfae..0f7198756 100644 --- a/MediaBrowser.Controller/Providers/ProviderManager.cs +++ b/MediaBrowser.Controller/Providers/ProviderManager.cs @@ -1,6 +1,6 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; -using MediaBrowser.Common.Kernel; +using MediaBrowser.Common.Net; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Logging; using System; @@ -33,16 +33,23 @@ namespace MediaBrowser.Controller.Providers /// The _logger /// </summary> private readonly ILogger _logger; - + + /// <summary> + /// The _HTTP client + /// </summary> + private readonly IHttpClient _httpClient; + /// <summary> /// Initializes a new instance of the <see cref="ProviderManager" /> class. /// </summary> /// <param name="kernel">The kernel.</param> + /// <param name="httpClient">The HTTP client.</param> /// <param name="logger">The logger.</param> - public ProviderManager(Kernel kernel, ILogger logger) + public ProviderManager(Kernel kernel, IHttpClient httpClient, ILogger logger) : base(kernel) { _logger = logger; + _httpClient = httpClient; _remoteImageCache = new FileSystemRepository(ImagesDataPath); } @@ -287,7 +294,7 @@ namespace MediaBrowser.Controller.Providers Path.Combine(item.MetaLocation, targetName) : _remoteImageCache.GetResourcePath(item.GetType().FullName + item.Path.ToLower(), targetName); - var img = await Kernel.HttpManager.FetchToMemoryStream(source, resourcePool, cancellationToken).ConfigureAwait(false); + var img = await _httpClient.GetMemoryStream(source, resourcePool, cancellationToken).ConfigureAwait(false); if (Kernel.Configuration.SaveLocalMeta) // queue to media directories { diff --git a/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs b/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs index 05ab172a8..8d5c2e0c7 100644 --- a/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Extensions; +using MediaBrowser.Common.Net; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Model.Entities; @@ -15,6 +16,22 @@ namespace MediaBrowser.Controller.Providers.TV { protected string FanArtBaseUrl = "http://api.fanart.tv/webservice/series/{0}/{1}/xml/all/1/1"; + /// <summary> + /// Gets the HTTP client. + /// </summary> + /// <value>The HTTP client.</value> + protected IHttpClient HttpClient { get; private set; } + + public FanArtTVProvider(IHttpClient httpClient) + : base() + { + if (httpClient == null) + { + throw new ArgumentNullException("httpClient"); + } + HttpClient = httpClient; + } + public override bool Supports(BaseItem item) { return item is Series; @@ -36,7 +53,7 @@ namespace MediaBrowser.Controller.Providers.TV protected override async Task<bool> FetchAsyncInternal(BaseItem item, bool force, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); - + var series = (Series)item; if (ShouldFetch(series, series.ProviderData.GetValueOrDefault(Id, new BaseProviderInfo { ProviderId = Id }))) { @@ -46,7 +63,7 @@ namespace MediaBrowser.Controller.Providers.TV try { - using (var xml = await Kernel.Instance.HttpManager.Get(url, Kernel.Instance.ResourcePools.FanArt, cancellationToken).ConfigureAwait(false)) + using (var xml = await HttpClient.Get(url, Kernel.Instance.ResourcePools.FanArt, cancellationToken).ConfigureAwait(false)) { doc.Load(xml); } @@ -56,7 +73,7 @@ namespace MediaBrowser.Controller.Providers.TV } cancellationToken.ThrowIfCancellationRequested(); - + if (doc.HasChildNodes) { string path; @@ -83,7 +100,7 @@ namespace MediaBrowser.Controller.Providers.TV } cancellationToken.ThrowIfCancellationRequested(); - + if (Kernel.Instance.Configuration.DownloadTVArt && !series.ResolveArgs.ContainsMetaFileByName(ART_FILE)) { var node = doc.SelectSingleNode("//fanart/series/cleararts/clearart[@lang = \"" + language + "\"]/@url") ?? @@ -107,7 +124,7 @@ namespace MediaBrowser.Controller.Providers.TV } cancellationToken.ThrowIfCancellationRequested(); - + if (Kernel.Instance.Configuration.DownloadTVThumb && !series.ResolveArgs.ContainsMetaFileByName(THUMB_FILE)) { var node = doc.SelectSingleNode("//fanart/series/tvthumbs/tvthumb[@lang = \"" + language + "\"]/@url") ?? diff --git a/MediaBrowser.Controller/Providers/TV/RemoteEpisodeProvider.cs b/MediaBrowser.Controller/Providers/TV/RemoteEpisodeProvider.cs index b06598114..a31520c9d 100644 --- a/MediaBrowser.Controller/Providers/TV/RemoteEpisodeProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/RemoteEpisodeProvider.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Extensions; using MediaBrowser.Controller.Resolvers.TV; @@ -19,6 +20,21 @@ namespace MediaBrowser.Controller.Providers.TV /// </summary> class RemoteEpisodeProvider : BaseMetadataProvider { + /// <summary> + /// Gets the HTTP client. + /// </summary> + /// <value>The HTTP client.</value> + protected IHttpClient HttpClient { get; private set; } + + public RemoteEpisodeProvider(IHttpClient httpClient) + : base() + { + if (httpClient == null) + { + throw new ArgumentNullException("httpClient"); + } + HttpClient = httpClient; + } /// <summary> /// The episode query @@ -171,7 +187,7 @@ namespace MediaBrowser.Controller.Providers.TV try { - using (var result = await Kernel.Instance.HttpManager.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) + using (var result = await HttpClient.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) { doc.Load(result); } @@ -189,7 +205,7 @@ namespace MediaBrowser.Controller.Providers.TV try { - using (var result = await Kernel.Instance.HttpManager.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) + using (var result = await HttpClient.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) { if (result != null) doc.Load(result); usingAbsoluteData = true; diff --git a/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs b/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs index 3e7f6b1a2..72468c24a 100644 --- a/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Resolvers.TV; using MediaBrowser.Model.Entities; @@ -17,6 +18,21 @@ namespace MediaBrowser.Controller.Providers.TV /// </summary> class RemoteSeasonProvider : BaseMetadataProvider { + /// <summary> + /// Gets the HTTP client. + /// </summary> + /// <value>The HTTP client.</value> + protected IHttpClient HttpClient { get; private set; } + + public RemoteSeasonProvider(IHttpClient httpClient) + : base() + { + if (httpClient == null) + { + throw new ArgumentNullException("httpClient"); + } + HttpClient = httpClient; + } /// <summary> /// Supportses the specified item. @@ -82,7 +98,7 @@ namespace MediaBrowser.Controller.Providers.TV protected override async Task<bool> FetchAsyncInternal(BaseItem item, bool force, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); - + var season = (Season)item; if (!HasLocalMeta(item)) @@ -135,7 +151,7 @@ namespace MediaBrowser.Controller.Providers.TV try { - using (var imgs = await Kernel.Instance.HttpManager.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) + using (var imgs = await HttpClient.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) { images.Load(imgs); } diff --git a/MediaBrowser.Controller/Providers/TV/RemoteSeriesProvider.cs b/MediaBrowser.Controller/Providers/TV/RemoteSeriesProvider.cs index b8941dbba..c05e9c5e6 100644 --- a/MediaBrowser.Controller/Providers/TV/RemoteSeriesProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/RemoteSeriesProvider.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Extensions; +using MediaBrowser.Common.Net; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Extensions; @@ -21,6 +22,21 @@ namespace MediaBrowser.Controller.Providers.TV /// </summary> class RemoteSeriesProvider : BaseMetadataProvider { + /// <summary> + /// Gets the HTTP client. + /// </summary> + /// <value>The HTTP client.</value> + protected IHttpClient HttpClient { get; private set; } + + public RemoteSeriesProvider(IHttpClient httpClient) + : base() + { + if (httpClient == null) + { + throw new ArgumentNullException("httpClient"); + } + HttpClient = httpClient; + } /// <summary> /// The root URL @@ -153,7 +169,7 @@ namespace MediaBrowser.Controller.Providers.TV try { - using (var xml = await Kernel.Instance.HttpManager.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) + using (var xml = await HttpClient.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) { doc.Load(xml); } @@ -232,7 +248,7 @@ namespace MediaBrowser.Controller.Providers.TV try { - using (var actors = await Kernel.Instance.HttpManager.Get(urlActors, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) + using (var actors = await HttpClient.Get(urlActors, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) { docActors.Load(actors); } @@ -299,7 +315,7 @@ namespace MediaBrowser.Controller.Providers.TV try { - using (var imgs = await Kernel.Instance.HttpManager.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) + using (var imgs = await HttpClient.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) { images.Load(imgs); } @@ -446,7 +462,7 @@ namespace MediaBrowser.Controller.Providers.TV try { - using (var results = await Kernel.Instance.HttpManager.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) + using (var results = await HttpClient.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) { doc.Load(results); } diff --git a/MediaBrowser.Controller/Updates/InstallationManager.cs b/MediaBrowser.Controller/Updates/InstallationManager.cs index af544dd51..15d626b2f 100644 --- a/MediaBrowser.Controller/Updates/InstallationManager.cs +++ b/MediaBrowser.Controller/Updates/InstallationManager.cs @@ -114,15 +114,22 @@ namespace MediaBrowser.Controller.Updates protected IJsonSerializer JsonSerializer { get; private set; } /// <summary> + /// Gets the HTTP client. + /// </summary> + /// <value>The HTTP client.</value> + protected IHttpClient HttpClient { get; private set; } + + /// <summary> /// Initializes a new instance of the <see cref="InstallationManager" /> class. /// </summary> /// <param name="kernel">The kernel.</param> + /// <param name="httpClient">The HTTP client.</param> /// <param name="zipClient">The zip client.</param> /// <param name="networkManager">The network manager.</param> - /// <param name="jsonSerializer"></param> + /// <param name="jsonSerializer">The json serializer.</param> /// <param name="logger">The logger.</param> /// <exception cref="System.ArgumentNullException">zipClient</exception> - public InstallationManager(Kernel kernel, IZipClient zipClient, INetworkManager networkManager, IJsonSerializer jsonSerializer, ILogger logger) + public InstallationManager(Kernel kernel, IHttpClient httpClient, IZipClient zipClient, INetworkManager networkManager, IJsonSerializer jsonSerializer, ILogger logger) : base(kernel) { if (zipClient == null) @@ -141,9 +148,13 @@ namespace MediaBrowser.Controller.Updates { throw new ArgumentNullException("jsonSerializer"); } + if (httpClient == null) + { + throw new ArgumentNullException("httpClient"); + } JsonSerializer = jsonSerializer; - + HttpClient = httpClient; _networkManager = networkManager; _logger = logger; ZipClient = zipClient; @@ -162,7 +173,7 @@ namespace MediaBrowser.Controller.Updates { var data = new Dictionary<string, string> { { "key", Kernel.PluginSecurityManager.SupporterKey }, { "mac", _networkManager.GetMacAddress() } }; - using (var json = await Kernel.HttpManager.Post(Controller.Kernel.MBAdminUrl + "service/package/retrieveall", data, Kernel.ResourcePools.Mb, cancellationToken).ConfigureAwait(false)) + using (var json = await HttpClient.Post(Controller.Kernel.MBAdminUrl + "service/package/retrieveall", data, Kernel.ResourcePools.Mb, cancellationToken).ConfigureAwait(false)) { cancellationToken.ThrowIfCancellationRequested(); @@ -276,7 +287,7 @@ namespace MediaBrowser.Controller.Updates /// <returns>Task{IEnumerable{PackageVersionInfo}}.</returns> public async Task<IEnumerable<PackageVersionInfo>> GetAvailablePluginUpdates(bool withAutoUpdateEnabled, CancellationToken cancellationToken) { - var catalog = await Kernel.InstallationManager.GetAvailablePackages(cancellationToken).ConfigureAwait(false); + var catalog = await GetAvailablePackages(cancellationToken).ConfigureAwait(false); var plugins = Kernel.Plugins; @@ -288,7 +299,7 @@ namespace MediaBrowser.Controller.Updates // Figure out what needs to be installed return plugins.Select(p => { - var latestPluginInfo = Kernel.InstallationManager.GetLatestCompatibleVersion(catalog, p.Name, p.Configuration.UpdateClass); + var latestPluginInfo = GetLatestCompatibleVersion(catalog, p.Name, p.Configuration.UpdateClass); return latestPluginInfo != null && latestPluginInfo.version > p.Version ? latestPluginInfo : null; @@ -414,7 +425,7 @@ namespace MediaBrowser.Controller.Updates var target = isArchive ? Kernel.ApplicationPaths.ProgramDataPath : Path.Combine(Kernel.ApplicationPaths.PluginsPath, package.targetFilename); // Download to temporary file so that, if interrupted, it won't destroy the existing installation - var tempFile = await Kernel.HttpManager.FetchToTempFile(package.sourceUrl, Kernel.ResourcePools.Mb, cancellationToken, progress).ConfigureAwait(false); + var tempFile = await HttpClient.GetTempFile(package.sourceUrl, Kernel.ResourcePools.Mb, cancellationToken, progress).ConfigureAwait(false); cancellationToken.ThrowIfCancellationRequested(); diff --git a/MediaBrowser.Common/Net/HttpManager.cs b/MediaBrowser.Networking/HttpManager/HttpManager.cs index 180843e0f..2f44fa74b 100644 --- a/MediaBrowser.Common/Net/HttpManager.cs +++ b/MediaBrowser.Networking/HttpManager/HttpManager.cs @@ -1,5 +1,6 @@ using MediaBrowser.Common.IO; using MediaBrowser.Common.Kernel; +using MediaBrowser.Common.Net; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; using System; @@ -14,12 +15,12 @@ using System.Text; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Common.Net +namespace MediaBrowser.Networking.HttpManager { /// <summary> /// Class HttpManager /// </summary> - public class HttpManager : IDisposable + public class HttpManager : IHttpClient { /// <summary> /// The _logger @@ -27,20 +28,20 @@ namespace MediaBrowser.Common.Net private readonly ILogger _logger; /// <summary> - /// The _kernel + /// The _app paths /// </summary> - private readonly IKernel _kernel; + private readonly IApplicationPaths _appPaths; /// <summary> /// Initializes a new instance of the <see cref="HttpManager" /> class. /// </summary> - /// <param name="kernel">The kernel.</param> + /// <param name="appPaths">The kernel.</param> /// <param name="logger">The logger.</param> - public HttpManager(IKernel kernel, ILogger logger) + public HttpManager(IApplicationPaths appPaths, ILogger logger) { - if (kernel == null) + if (appPaths == null) { - throw new ArgumentNullException("kernel"); + throw new ArgumentNullException("appPaths"); } if (logger == null) { @@ -48,7 +49,7 @@ namespace MediaBrowser.Common.Net } _logger = logger; - _kernel = kernel; + _appPaths = appPaths; } /// <summary> @@ -199,7 +200,7 @@ namespace MediaBrowser.Common.Net /// <returns>Task{System.String}.</returns> /// <exception cref="System.ArgumentNullException">progress</exception> /// <exception cref="MediaBrowser.Model.Net.HttpException"></exception> - public async Task<string> FetchToTempFile(string url, SemaphoreSlim resourcePool, CancellationToken cancellationToken, IProgress<double> progress, string userAgent = null) + public async Task<string> GetTempFile(string url, SemaphoreSlim resourcePool, CancellationToken cancellationToken, IProgress<double> progress, string userAgent = null) { ValidateParams(url, resourcePool, cancellationToken); @@ -210,7 +211,7 @@ namespace MediaBrowser.Common.Net cancellationToken.ThrowIfCancellationRequested(); - var tempFile = Path.Combine(_kernel.ApplicationPaths.TempDirectory, Guid.NewGuid() + ".tmp"); + var tempFile = Path.Combine(_appPaths.TempDirectory, Guid.NewGuid() + ".tmp"); var message = new HttpRequestMessage(HttpMethod.Get, url); @@ -221,7 +222,7 @@ namespace MediaBrowser.Common.Net await resourcePool.WaitAsync(cancellationToken).ConfigureAwait(false); - _logger.Info("HttpManager.FetchToTempFile url: {0}, temp file: {1}", url, tempFile); + _logger.Info("HttpManager.GetTempFile url: {0}, temp file: {1}", url, tempFile); try { @@ -315,7 +316,7 @@ namespace MediaBrowser.Common.Net /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task{MemoryStream}.</returns> /// <exception cref="MediaBrowser.Model.Net.HttpException"></exception> - public async Task<MemoryStream> FetchToMemoryStream(string url, SemaphoreSlim resourcePool, CancellationToken cancellationToken) + public async Task<MemoryStream> GetMemoryStream(string url, SemaphoreSlim resourcePool, CancellationToken cancellationToken) { ValidateParams(url, resourcePool, cancellationToken); @@ -327,7 +328,7 @@ namespace MediaBrowser.Common.Net var ms = new MemoryStream(); - _logger.Info("HttpManager.FetchToMemoryStream url: {0}", url); + _logger.Info("HttpManager.GetMemoryStream url: {0}", url); try { diff --git a/MediaBrowser.Networking/Web/HttpServer.cs b/MediaBrowser.Networking/HttpServer/HttpServer.cs index ab4b8558f..b6250527d 100644 --- a/MediaBrowser.Networking/Web/HttpServer.cs +++ b/MediaBrowser.Networking/HttpServer/HttpServer.cs @@ -25,7 +25,7 @@ using System.Reflection; using System.Text; using System.Threading.Tasks; -namespace MediaBrowser.Networking.Web +namespace MediaBrowser.Networking.HttpServer { /// <summary> /// Class HttpServer diff --git a/MediaBrowser.Networking/Web/NativeWebSocket.cs b/MediaBrowser.Networking/HttpServer/NativeWebSocket.cs index ad28d1a7f..84d163be8 100644 --- a/MediaBrowser.Networking/Web/NativeWebSocket.cs +++ b/MediaBrowser.Networking/HttpServer/NativeWebSocket.cs @@ -1,10 +1,13 @@ -using MediaBrowser.Model.Logging; +using MediaBrowser.Common.Net; +using MediaBrowser.Model.Logging; using System; using System.Net.WebSockets; using System.Threading; using System.Threading.Tasks; +using WebSocketMessageType = MediaBrowser.Common.Net.WebSocketMessageType; +using WebSocketState = MediaBrowser.Common.Net.WebSocketState; -namespace MediaBrowser.Common.Net +namespace MediaBrowser.Networking.HttpServer { /// <summary> /// Class NativeWebSocket @@ -20,7 +23,7 @@ namespace MediaBrowser.Common.Net /// Gets or sets the web socket. /// </summary> /// <value>The web socket.</value> - private WebSocket WebSocket { get; set; } + private System.Net.WebSockets.WebSocket WebSocket { get; set; } /// <summary> /// Initializes a new instance of the <see cref="NativeWebSocket" /> class. @@ -28,7 +31,7 @@ namespace MediaBrowser.Common.Net /// <param name="socket">The socket.</param> /// <param name="logger">The logger.</param> /// <exception cref="System.ArgumentNullException">socket</exception> - public NativeWebSocket(WebSocket socket, ILogger logger) + public NativeWebSocket(System.Net.WebSockets.WebSocket socket, ILogger logger) { if (socket == null) { @@ -52,7 +55,17 @@ namespace MediaBrowser.Common.Net /// <value>The state.</value> public WebSocketState State { - get { return WebSocket.State; } + get + { + WebSocketState commonState; + + if (!Enum.TryParse(WebSocket.State.ToString(), true, out commonState)) + { + _logger.Warn("Unrecognized WebSocketState: {0}", WebSocket.State.ToString()); + } + + return commonState; + } } /// <summary> @@ -113,7 +126,14 @@ namespace MediaBrowser.Common.Net /// <returns>Task.</returns> public Task SendAsync(byte[] bytes, WebSocketMessageType type, bool endOfMessage, CancellationToken cancellationToken) { - return WebSocket.SendAsync(new ArraySegment<byte>(bytes), type, true, cancellationToken); + System.Net.WebSockets.WebSocketMessageType nativeType; + + if (!Enum.TryParse(type.ToString(), true, out nativeType)) + { + _logger.Warn("Unrecognized WebSocketMessageType: {0}", type.ToString()); + } + + return WebSocket.SendAsync(new ArraySegment<byte>(bytes), nativeType, true, cancellationToken); } /// <summary> diff --git a/MediaBrowser.Networking/Web/ServerFactory.cs b/MediaBrowser.Networking/HttpServer/ServerFactory.cs index b93f2ca1c..e853a6ec2 100644 --- a/MediaBrowser.Networking/Web/ServerFactory.cs +++ b/MediaBrowser.Networking/HttpServer/ServerFactory.cs @@ -3,7 +3,7 @@ using MediaBrowser.Common.Net; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; -namespace MediaBrowser.Networking.Web +namespace MediaBrowser.Networking.HttpServer { /// <summary> /// Class ServerFactory diff --git a/MediaBrowser.Networking/MediaBrowser.Networking.csproj b/MediaBrowser.Networking/MediaBrowser.Networking.csproj index 41fd6ceab..cf5da4659 100644 --- a/MediaBrowser.Networking/MediaBrowser.Networking.csproj +++ b/MediaBrowser.Networking/MediaBrowser.Networking.csproj @@ -81,6 +81,9 @@ <Reference Include="System" /> <Reference Include="System.Core" /> <Reference Include="System.Management" /> + <Reference Include="System.Net" /> + <Reference Include="System.Net.Http" /> + <Reference Include="System.Net.Http.WebRequest" /> <Reference Include="System.Reactive.Core, Version=2.0.20823.0, Culture=neutral, PublicKeyToken=f300afd708cefcd3, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\Rx-Core.2.0.21114\lib\Net45\System.Reactive.Core.dll</HintPath> @@ -104,16 +107,17 @@ <Compile Include="..\SharedVersion.cs"> <Link>Properties\SharedVersion.cs</Link> </Compile> + <Compile Include="HttpManager\HttpManager.cs" /> <Compile Include="Udp\UdpServer.cs" /> <Compile Include="WebSocket\AlchemyServer.cs" /> <Compile Include="WebSocket\AlchemyWebSocket.cs" /> - <Compile Include="Web\HttpServer.cs" /> + <Compile Include="HttpServer\HttpServer.cs" /> <Compile Include="Management\NativeMethods.cs" /> <Compile Include="Management\NetworkManager.cs" /> <Compile Include="Management\NetworkShares.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> - <Compile Include="Web\ServerFactory.cs" /> - <Compile Include="Web\NativeWebSocket.cs" /> + <Compile Include="HttpServer\ServerFactory.cs" /> + <Compile Include="HttpServer\NativeWebSocket.cs" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj"> @@ -145,6 +149,7 @@ <Content Include="swagger-ui\swagger-ui.js" /> <Content Include="swagger-ui\swagger-ui.min.js" /> </ItemGroup> + <ItemGroup /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <PropertyGroup> <PostBuildEvent>xcopy "$(TargetPath)" "$(SolutionDir)\Nuget\dlls\" /y /d /r /i</PostBuildEvent> diff --git a/MediaBrowser.Networking/WebSocket/AlchemyWebSocket.cs b/MediaBrowser.Networking/WebSocket/AlchemyWebSocket.cs index 5eca1a78c..c8ab58ca4 100644 --- a/MediaBrowser.Networking/WebSocket/AlchemyWebSocket.cs +++ b/MediaBrowser.Networking/WebSocket/AlchemyWebSocket.cs @@ -2,7 +2,6 @@ using MediaBrowser.Common.Net; using MediaBrowser.Model.Logging; using System; -using System.Net.WebSockets; using System.Text; using System.Threading; using System.Threading.Tasks; diff --git a/MediaBrowser.Server.Implementations/WorldWeatherOnline/WeatherProvider.cs b/MediaBrowser.Server.Implementations/WorldWeatherOnline/WeatherProvider.cs index 1b75a58b8..39ac203fc 100644 --- a/MediaBrowser.Server.Implementations/WorldWeatherOnline/WeatherProvider.cs +++ b/MediaBrowser.Server.Implementations/WorldWeatherOnline/WeatherProvider.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller; +using MediaBrowser.Common.Net; +using MediaBrowser.Controller; using MediaBrowser.Controller.Weather; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; @@ -29,24 +30,33 @@ namespace MediaBrowser.Server.Implementations.WorldWeatherOnline protected IJsonSerializer JsonSerializer { get; private set; } /// <summary> + /// The _HTTP client + /// </summary> + private IHttpClient HttpClient { get; set; } + + /// <summary> /// Initializes a new instance of the <see cref="WeatherProvider" /> class. /// </summary> /// <param name="jsonSerializer">The json serializer.</param> /// <param name="logger">The logger.</param> /// <exception cref="System.ArgumentNullException">logger</exception> - public WeatherProvider(IJsonSerializer jsonSerializer, ILogger logger) + public WeatherProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient, ILogger logger) { if (logger == null) { throw new ArgumentNullException("logger"); } - + if (httpClient == null) + { + throw new ArgumentNullException("httpClient"); + } if (jsonSerializer == null) { throw new ArgumentNullException("jsonSerializer"); } JsonSerializer = jsonSerializer; + HttpClient = httpClient; Logger = logger; } @@ -81,7 +91,7 @@ namespace MediaBrowser.Server.Implementations.WorldWeatherOnline Logger.Info("Accessing weather from " + url); - using (var stream = await Kernel.Instance.HttpManager.Get(url, _weatherSemaphore, cancellationToken).ConfigureAwait(false)) + using (var stream = await HttpClient.Get(url, _weatherSemaphore, cancellationToken).ConfigureAwait(false)) { var data = JsonSerializer.DeserializeFromStream<WeatherResult>(stream).data; diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 40e190756..88eb1c7e1 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -15,9 +15,10 @@ using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.Serialization; using MediaBrowser.Model.System; using MediaBrowser.Model.Updates; +using MediaBrowser.Networking.HttpManager; +using MediaBrowser.Networking.HttpServer; using MediaBrowser.Networking.Management; using MediaBrowser.Networking.Udp; -using MediaBrowser.Networking.Web; using MediaBrowser.Networking.WebSocket; using MediaBrowser.Server.Implementations; using MediaBrowser.ServerApplication.Implementations; @@ -45,12 +46,6 @@ namespace MediaBrowser.ServerApplication private ILogger Logger { get; set; } /// <summary> - /// Gets or sets the iso manager. - /// </summary> - /// <value>The iso manager.</value> - private IIsoManager IsoManager { get; set; } - - /// <summary> /// Gets or sets the log file path. /// </summary> /// <value>The log file path.</value> @@ -143,14 +138,12 @@ namespace MediaBrowser.ServerApplication RegisterSingleInstance<IApplicationHost>(this); RegisterSingleInstance(Logger); - IsoManager = new PismoIsoManager(Logger); - RegisterSingleInstance(_applicationPaths); RegisterSingleInstance<IApplicationPaths>(_applicationPaths); - - RegisterSingleInstance(IsoManager); RegisterSingleInstance(_taskManager); + RegisterSingleInstance<IIsoManager>(() => new PismoIsoManager(Logger)); RegisterSingleInstance<IBlurayExaminer>(() => new BdInfoExaminer()); + RegisterSingleInstance<IHttpClient>(() => new HttpManager(_applicationPaths, Logger)); RegisterSingleInstance<INetworkManager>(() => new NetworkManager()); RegisterSingleInstance<IZipClient>(() => new DotNetZipClient()); RegisterSingleInstance<IWebSocketServer>(() => new AlchemyServer(Logger)); @@ -477,8 +470,6 @@ namespace MediaBrowser.ServerApplication /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> protected virtual void Dispose(bool dispose) { - IsoManager.Dispose(); - foreach (var part in _disposableParts) { part.Dispose(); @@ -487,12 +478,4 @@ namespace MediaBrowser.ServerApplication _disposableParts.Clear(); } } - - public class MyClass - { - public MyClass() - { - - } - } } diff --git a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj index 8a3a0b7af..c843242c3 100644 --- a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj +++ b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj @@ -367,15 +367,6 @@ <Content Include="CorePlugins\MediaBrowser.Api.dll"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> - <Content Include="CorePlugins\MediaBrowser.ApiInteraction.Javascript.dll"> - <CopyToOutputDirectory>Always</CopyToOutputDirectory> - </Content> - <Content Include="CorePlugins\MediaBrowser.Server.Sqlite.dll"> - <CopyToOutputDirectory>Always</CopyToOutputDirectory> - </Content> - <Content Include="CorePlugins\MediaBrowser.Server.WorldWeatherOnline.dll"> - <CopyToOutputDirectory>Always</CopyToOutputDirectory> - </Content> <Content Include="CorePlugins\MediaBrowser.WebDashboard.dll"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> diff --git a/Nuget/MediaBrowser.ApiClient.nuspec b/Nuget/MediaBrowser.ApiClient.nuspec index bcb9a7d07..f889230a5 100644 --- a/Nuget/MediaBrowser.ApiClient.nuspec +++ b/Nuget/MediaBrowser.ApiClient.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> <metadata> <id>MediaBrowser.ApiClient</id> - <version>3.0.0.2-beta</version> + <version>3.0.0.4-beta</version> <title>MediaBrowser.ApiClient</title> <authors>Media Browser Team</authors> <owners>scottisafool,Luke</owners> @@ -12,13 +12,13 @@ <dependencies> <group targetFramework=".NETFramework4.5"> <dependency id="ServiceStack.Text" version="3.9.37" /> - <dependency id="protobuf-net" version="2.0.0.621" /> + <dependency id="protobuf-net" version="2.0.0.621" /> </group> <group targetFramework=".NETPortable0.0-net45+sl4+wp71+win8"> <dependency id="Newtonsoft.Json" version="4.5.11" /> <dependency id="Microsoft.Bcl.Async" version="1.0.14-rc" /> <dependency id="Microsoft.Net.Http" version="2.1.3-beta" /> - <dependency id="protobuf-net" version="2.0.0.621" /> + <dependency id="protobuf-net" version="2.0.0.621" /> </group> </dependencies> </metadata> diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 9e431b767..8f1d5f259 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <metadata> <id>MediaBrowser.Common.Internal</id> - <version>3.0.1</version> + <version>3.0.4</version> <title /> <authors>Luke</authors> <owners>Media Browser Team</owners> @@ -15,10 +15,11 @@ </dependencies> </metadata> <files> - <file src="lib\net45\MediaBrowser.ClickOnce.dll" target="lib\net45\MediaBrowser.ClickOnce.dll" /> - <file src="lib\net45\MediaBrowser.IsoMounter.dll" target="lib\net45\MediaBrowser.IsoMounter.dll" /> - <file src="lib\net45\MediaBrowser.Logging.NLog.dll" target="lib\net45\MediaBrowser.Logging.NLog.dll" /> - <file src="lib\net45\MediaBrowser.Networking.dll" target="lib\net45\MediaBrowser.Networking.dll" /> - <file src="lib\net45\pfmclrapi.dll" target="lib\net45\pfmclrapi.dll" /> + <file src="dlls\MediaBrowser.ClickOnce.dll" target="lib\net45\MediaBrowser.ClickOnce.dll" /> + <file src="dlls\MediaBrowser.Common.Implementations.dll" target="lib\net45\MediaBrowser.Common.Implementations.dll" /> + <file src="dlls\MediaBrowser.IsoMounter.dll" target="lib\net45\MediaBrowser.IsoMounter.dll" /> + <file src="dlls\MediaBrowser.Logging.NLog.dll" target="lib\net45\MediaBrowser.Logging.NLog.dll" /> + <file src="dlls\MediaBrowser.Networking.dll" target="lib\net45\MediaBrowser.Networking.dll" /> + <file src="dlls\pfmclrapi.dll" target="lib\net45\pfmclrapi.dll" /> </files> </package>
\ No newline at end of file diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index b6ca6ae02..dc8a10b9d 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <metadata> <id>MediaBrowser.Common</id> - <version>1.0.1</version> + <version>3.0.4</version> <title>MediaBrowser.Common</title> <authors>Media Browser Team</authors> <owners /> diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 82fb2c531..80d0b82a0 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <metadata> <id>MediaBrowser.Server.Core</id> - <version>1.0.0</version> + <version>3.0.4</version> <title>Media Browser.Server.Core</title> <authors>Media Browser Team</authors> <owners /> @@ -10,7 +10,7 @@ <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>Contains core components required to build plugins for Media Browser Server.</description> <dependencies> - <dependency id="MediaBrowser.Common" version="1.0.1" /> + <dependency id="MediaBrowser.Common" version="3.0.2" /> </dependencies> </metadata> <files> |
