From a3f7ebe7025c1c3a8bde3dd62517027c37d11a43 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 7 Aug 2013 15:15:55 -0400 Subject: [PATCH] 3.0.4967.25605 --- .../BaseApplicationHost.cs | 12 +- ...MediaBrowser.Common.Implementations.csproj | 1 - .../Updates/InstallationManager.cs | 173 ++++++++++++------ .../Updates/PackageManager.cs | 158 ---------------- .../MediaBrowser.Common.csproj | 1 - .../Updates/IInstallationManager.cs | 11 ++ .../Updates/IPackageManager.cs | 34 ---- MediaBrowser.Controller/Entities/BaseItem.cs | 2 +- MediaBrowser.Model/ApiClient/IApiClient.cs | 12 ++ ...MediaBrowser.Server.Implementations.csproj | 4 +- .../ApplicationHost.cs | 3 +- Nuget/MediaBrowser.Common.Internal.nuspec | 4 +- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +- README.md | 2 +- 15 files changed, 149 insertions(+), 274 deletions(-) delete mode 100644 MediaBrowser.Common.Implementations/Updates/PackageManager.cs delete mode 100644 MediaBrowser.Common/Updates/IPackageManager.cs diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs index 4d7743485d..31db86ddf7 100644 --- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs +++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs @@ -127,11 +127,6 @@ namespace MediaBrowser.Common.Implementations /// The security manager. protected ISecurityManager SecurityManager { get; private set; } /// - /// Gets the package manager. - /// - /// The package manager. - protected IPackageManager PackageManager { get; private set; } - /// /// Gets the HTTP client. /// /// The HTTP client. @@ -286,10 +281,7 @@ namespace MediaBrowser.Common.Implementations SecurityManager = new PluginSecurityManager(this, HttpClient, JsonSerializer, ApplicationPaths); RegisterSingleInstance(SecurityManager); - PackageManager = new PackageManager(SecurityManager, NetworkManager, HttpClient, ApplicationPaths, JsonSerializer, Logger); - RegisterSingleInstance(PackageManager); - - InstallationManager = new InstallationManager(HttpClient, PackageManager, JsonSerializer, Logger, this); + InstallationManager = new InstallationManager(Logger, this, ApplicationPaths, HttpClient, JsonSerializer, SecurityManager, NetworkManager); RegisterSingleInstance(InstallationManager); }); } @@ -583,7 +575,7 @@ namespace MediaBrowser.Common.Implementations /// Task. public async Task UpdateApplication(PackageVersionInfo package, CancellationToken cancellationToken, IProgress progress) { - await PackageManager.InstallPackage(progress, package, cancellationToken).ConfigureAwait(false); + await InstallationManager.InstallPackage(package, progress, cancellationToken).ConfigureAwait(false); EventHelper.QueueEventIfNotNull(ApplicationUpdated, this, new GenericEventArgs { Argument = package.version }, Logger); diff --git a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj index e63d2f0030..07e7869c73 100644 --- a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj +++ b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj @@ -86,7 +86,6 @@ - diff --git a/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs b/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs index 0dc29cf4bc..cf489d4643 100644 --- a/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs +++ b/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs @@ -1,7 +1,10 @@ -using MediaBrowser.Common.Events; +using System.Security.Cryptography; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Events; using MediaBrowser.Common.Net; using MediaBrowser.Common.Plugins; using MediaBrowser.Common.Progress; +using MediaBrowser.Common.Security; using MediaBrowser.Common.Updates; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; @@ -30,7 +33,7 @@ namespace MediaBrowser.Common.Implementations.Updates /// The current installations /// public List> CurrentInstallations { get; set; } - + /// /// The completed installations /// @@ -68,7 +71,7 @@ namespace MediaBrowser.Common.Implementations.Updates EventHelper.QueueEventIfNotNull(PluginUpdated, this, new GenericEventArgs> { Argument = new Tuple(plugin, newVersion) }, _logger); - ApplicationHost.NotifyPendingRestart(); + _applicationHost.NotifyPendingRestart(); } #endregion @@ -87,7 +90,7 @@ namespace MediaBrowser.Common.Implementations.Updates EventHelper.QueueEventIfNotNull(PluginInstalled, this, new GenericEventArgs { Argument = package }, _logger); - ApplicationHost.NotifyPendingRestart(); + _applicationHost.NotifyPendingRestart(); } #endregion @@ -96,63 +99,34 @@ namespace MediaBrowser.Common.Implementations.Updates /// private readonly ILogger _logger; - /// - /// The package manager - /// - private readonly IPackageManager _packageManager; - - /// - /// Gets the json serializer. - /// - /// The json serializer. - protected IJsonSerializer JsonSerializer { get; private set; } - - /// - /// Gets the HTTP client. - /// - /// The HTTP client. - protected IHttpClient HttpClient { get; private set; } + private readonly IApplicationPaths _appPaths; + private readonly IHttpClient _httpClient; + private readonly IJsonSerializer _jsonSerializer; + private readonly ISecurityManager _securityManager; + private readonly INetworkManager _networkManager; /// /// Gets the application host. /// /// The application host. - protected IApplicationHost ApplicationHost { get; private set; } + private readonly IApplicationHost _applicationHost; - /// - /// Initializes a new instance of the class. - /// - /// The HTTP client. - /// The package manager. - /// The json serializer. - /// The logger. - /// The app host. - /// zipClient - public InstallationManager(IHttpClient httpClient, IPackageManager packageManager, IJsonSerializer jsonSerializer, ILogger logger, IApplicationHost appHost) + public InstallationManager(ILogger logger, IApplicationHost appHost, IApplicationPaths appPaths, IHttpClient httpClient, IJsonSerializer jsonSerializer, ISecurityManager securityManager, INetworkManager networkManager) { - if (packageManager == null) - { - throw new ArgumentNullException("packageManager"); - } if (logger == null) { throw new ArgumentNullException("logger"); } - if (jsonSerializer == null) - { - throw new ArgumentNullException("jsonSerializer"); - } - if (httpClient == null) - { - throw new ArgumentNullException("httpClient"); - } CurrentInstallations = new List>(); CompletedInstallations = new ConcurrentBag(); - JsonSerializer = jsonSerializer; - HttpClient = httpClient; - ApplicationHost = appHost; - _packageManager = packageManager; + + _applicationHost = appHost; + _appPaths = appPaths; + _httpClient = httpClient; + _jsonSerializer = jsonSerializer; + _securityManager = securityManager; + _networkManager = networkManager; _logger = logger; } @@ -167,9 +141,16 @@ namespace MediaBrowser.Common.Implementations.Updates PackageType? packageType = null, Version applicationVersion = null) { - var packages = (await _packageManager.GetAvailablePackages(cancellationToken).ConfigureAwait(false)).ToList(); + var data = new Dictionary { { "key", _securityManager.SupporterKey }, { "mac", _networkManager.GetMacAddress() } }; + + using (var json = await _httpClient.Post(Constants.Constants.MbAdminUrl + "service/package/retrieveall", data, cancellationToken).ConfigureAwait(false)) + { + cancellationToken.ThrowIfCancellationRequested(); - return FilterPackages(packages, packageType, applicationVersion); + var packages = _jsonSerializer.DeserializeFromStream>(json).ToList(); + + return FilterPackages(packages, packageType, applicationVersion); + } } /// @@ -179,16 +160,28 @@ namespace MediaBrowser.Common.Implementations.Updates /// Type of the package. /// The application version. /// Task{List{PackageInfo}}. - protected async Task> GetAvailablePackagesWithoutRegistrationInfo(CancellationToken cancellationToken, + public async Task> GetAvailablePackagesWithoutRegistrationInfo(CancellationToken cancellationToken, PackageType? packageType = null, Version applicationVersion = null) { - var packages = (await _packageManager.GetAvailablePackagesWithoutRegistrationInfo(cancellationToken).ConfigureAwait(false)).ToList(); - return FilterPackages(packages, packageType, applicationVersion); + using (var json = await _httpClient.Get(Constants.Constants.MbAdminUrl + "service/MB3Packages.json", cancellationToken).ConfigureAwait(false)) + { + cancellationToken.ThrowIfCancellationRequested(); + + var packages = _jsonSerializer.DeserializeFromStream>(json).ToList(); + + return FilterPackages(packages, packageType, applicationVersion); + } } protected IEnumerable FilterPackages(List packages, PackageType? packageType, Version applicationVersion) { + foreach (var package in packages) + { + package.versions = package.versions.Where(v => !string.IsNullOrWhiteSpace(v.sourceUrl)) + .OrderByDescending(v => v.version).ToList(); + } + if (packageType.HasValue) { packages = packages.Where(p => p.type == packageType.Value).ToList(); @@ -279,7 +272,7 @@ namespace MediaBrowser.Common.Implementations.Updates return package.versions .OrderByDescending(v => v.version) - .FirstOrDefault(v => v.classification <= classification && IsPackageVersionUpToDate(v, ApplicationHost.ApplicationVersion)); + .FirstOrDefault(v => v.classification <= classification && IsPackageVersionUpToDate(v, _applicationHost.ApplicationVersion)); } /// @@ -310,7 +303,7 @@ namespace MediaBrowser.Common.Implementations.Updates protected IEnumerable FilterCatalog(IEnumerable catalog, bool withAutoUpdateEnabled) { - var plugins = ApplicationHost.Plugins; + var plugins = _applicationHost.Plugins; if (withAutoUpdateEnabled) { @@ -454,13 +447,13 @@ namespace MediaBrowser.Common.Implementations.Updates private async Task InstallPackageInternal(PackageVersionInfo package, IProgress progress, CancellationToken cancellationToken) { // Do the install - await _packageManager.InstallPackage(progress, package, cancellationToken).ConfigureAwait(false); + await PerformPackageInstallation(progress, package, cancellationToken).ConfigureAwait(false); // Do plugin-specific processing if (!(Path.GetExtension(package.targetFilename) ?? "").Equals(".zip", StringComparison.OrdinalIgnoreCase)) { // Set last update time if we were installed before - var plugin = ApplicationHost.Plugins.FirstOrDefault(p => p.Name.Equals(package.name, StringComparison.OrdinalIgnoreCase)); + var plugin = _applicationHost.Plugins.FirstOrDefault(p => p.Name.Equals(package.name, StringComparison.OrdinalIgnoreCase)); if (plugin != null) { @@ -470,10 +463,72 @@ namespace MediaBrowser.Common.Implementations.Updates { OnPluginInstalled(package); } - + } } + private async Task PerformPackageInstallation(IProgress progress, PackageVersionInfo package, CancellationToken cancellationToken) + { + // Target based on if it is an archive or single assembly + // zip archives are assumed to contain directory structures relative to our ProgramDataPath + var isArchive = string.Equals(Path.GetExtension(package.targetFilename), ".zip", StringComparison.OrdinalIgnoreCase); + var target = Path.Combine(isArchive ? _appPaths.TempUpdatePath : _appPaths.PluginsPath, package.targetFilename); + + // Download to temporary file so that, if interrupted, it won't destroy the existing installation + var tempFile = await _httpClient.GetTempFile(new HttpRequestOptions + { + Url = package.sourceUrl, + CancellationToken = cancellationToken, + Progress = progress + + }).ConfigureAwait(false); + + cancellationToken.ThrowIfCancellationRequested(); + + // Validate with a checksum + if (package.checksum != Guid.Empty) // support for legacy uploads for now + { + using (var crypto = new MD5CryptoServiceProvider()) + using (var stream = new BufferedStream(File.OpenRead(tempFile), 100000)) + { + var check = Guid.Parse(BitConverter.ToString(crypto.ComputeHash(stream)).Replace("-", String.Empty)); + if (check != package.checksum) + { + throw new ApplicationException(string.Format("Download validation failed for {0}. Probably corrupted during transfer.", package.name)); + } + } + } + + cancellationToken.ThrowIfCancellationRequested(); + + // Success - move it to the real target + try + { + File.Copy(tempFile, target, true); + //If it is an archive - write out a version file so we know what it is + if (isArchive) + { + File.WriteAllText(target + ".ver", package.versionStr); + } + } + catch (IOException e) + { + _logger.ErrorException("Error attempting to move file from {0} to {1}", e, tempFile, target); + throw; + } + + try + { + File.Delete(tempFile); + } + catch (IOException e) + { + // Don't fail because of this + _logger.ErrorException("Error deleting temp file {0]", e, tempFile); + } + } + + /// /// Uninstalls a plugin /// @@ -484,13 +539,13 @@ namespace MediaBrowser.Common.Implementations.Updates plugin.OnUninstalling(); // Remove it the quick way for now - ApplicationHost.RemovePlugin(plugin); + _applicationHost.RemovePlugin(plugin); File.Delete(plugin.AssemblyFilePath); OnPluginUninstalled(plugin); - ApplicationHost.NotifyPendingRestart(); + _applicationHost.NotifyPendingRestart(); } /// diff --git a/MediaBrowser.Common.Implementations/Updates/PackageManager.cs b/MediaBrowser.Common.Implementations/Updates/PackageManager.cs deleted file mode 100644 index 34cc322ab7..0000000000 --- a/MediaBrowser.Common.Implementations/Updates/PackageManager.cs +++ /dev/null @@ -1,158 +0,0 @@ -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Net; -using MediaBrowser.Common.Security; -using MediaBrowser.Common.Updates; -using MediaBrowser.Model.Logging; -using MediaBrowser.Model.Serialization; -using MediaBrowser.Model.Updates; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Security.Cryptography; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Common.Implementations.Updates -{ - public class PackageManager : IPackageManager - { - private readonly ISecurityManager _securityManager; - private readonly INetworkManager _networkManager; - private readonly IHttpClient _httpClient; - private readonly IApplicationPaths _appPaths; - private readonly IJsonSerializer _jsonSerializer; - private readonly ILogger _logger; - - /// - /// Initializes a new instance of the class. - /// - /// The security manager. - /// The network manager. - /// The HTTP client. - /// The application paths. - /// The json serializer. - /// The logger. - public PackageManager(ISecurityManager securityManager, INetworkManager networkManager, IHttpClient httpClient, IApplicationPaths applicationPaths, IJsonSerializer jsonSerializer, ILogger logger) - { - _securityManager = securityManager; - _networkManager = networkManager; - _httpClient = httpClient; - _appPaths = applicationPaths; - _jsonSerializer = jsonSerializer; - _logger = logger; - } - - /// - /// Get all available packages including registration information. - /// Use this for the plug-in catalog to provide all information for this installation. - /// - /// - /// - public async Task> GetAvailablePackages(CancellationToken cancellationToken) - { - var data = new Dictionary { { "key", _securityManager.SupporterKey }, { "mac", _networkManager.GetMacAddress() } }; - - using (var json = await _httpClient.Post(Constants.Constants.MbAdminUrl + "service/package/retrieveall", data, cancellationToken).ConfigureAwait(false)) - { - cancellationToken.ThrowIfCancellationRequested(); - - var packages = _jsonSerializer.DeserializeFromStream>(json).ToList(); - - return FilterVersions(packages); - } - - } - - /// - /// Get all available packages using the static file resource. - /// Use this for update checks as it will be much less taxing on the server and can be cached. - /// - /// - /// - public async Task> GetAvailablePackagesWithoutRegistrationInfo(CancellationToken cancellationToken) - { - using (var json = await _httpClient.Get(Constants.Constants.MbAdminUrl + "service/MB3Packages.json", cancellationToken).ConfigureAwait(false)) - { - cancellationToken.ThrowIfCancellationRequested(); - - var packages = _jsonSerializer.DeserializeFromStream>(json).ToList(); - - return FilterVersions(packages); - } - } - - private IEnumerable FilterVersions(List original) - { - foreach (var package in original) - { - package.versions = package.versions.Where(v => !string.IsNullOrWhiteSpace(v.sourceUrl)) - .OrderByDescending(v => v.version).ToList(); - } - - return original; - } - - public async Task InstallPackage(IProgress progress, PackageVersionInfo package, CancellationToken cancellationToken) - { - // Target based on if it is an archive or single assembly - // zip archives are assumed to contain directory structures relative to our ProgramDataPath - var isArchive = string.Equals(Path.GetExtension(package.targetFilename), ".zip", StringComparison.OrdinalIgnoreCase); - var target = Path.Combine(isArchive ? _appPaths.TempUpdatePath : _appPaths.PluginsPath, package.targetFilename); - - // Download to temporary file so that, if interrupted, it won't destroy the existing installation - var tempFile = await _httpClient.GetTempFile(new HttpRequestOptions - { - Url = package.sourceUrl, - CancellationToken = cancellationToken, - Progress = progress - - }).ConfigureAwait(false); - - cancellationToken.ThrowIfCancellationRequested(); - - // Validate with a checksum - if (package.checksum != Guid.Empty) // support for legacy uploads for now - { - using (var crypto = new MD5CryptoServiceProvider()) - using (var stream = new BufferedStream(File.OpenRead(tempFile), 100000)) - { - var check = Guid.Parse(BitConverter.ToString(crypto.ComputeHash(stream)).Replace("-", String.Empty)); - if (check != package.checksum) - { - throw new ApplicationException(string.Format("Download validation failed for {0}. Probably corrupted during transfer.", package.name)); - } - } - } - - cancellationToken.ThrowIfCancellationRequested(); - - // Success - move it to the real target - try - { - File.Copy(tempFile, target, true); - //If it is an archive - write out a version file so we know what it is - if (isArchive) - { - File.WriteAllText(target+".ver", package.versionStr); - } - } - catch (IOException e) - { - _logger.ErrorException("Error attempting to move file from {0} to {1}", e, tempFile, target); - throw; - } - - try - { - File.Delete(tempFile); - } - catch (IOException e) - { - // Don't fail because of this - _logger.ErrorException("Error deleting temp file {0]", e, tempFile); - } - } - - } -} diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index 32f5d0c6d5..cbacda1f9b 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -108,7 +108,6 @@ - diff --git a/MediaBrowser.Common/Updates/IInstallationManager.cs b/MediaBrowser.Common/Updates/IInstallationManager.cs index 31259353f8..929e948998 100644 --- a/MediaBrowser.Common/Updates/IInstallationManager.cs +++ b/MediaBrowser.Common/Updates/IInstallationManager.cs @@ -52,6 +52,17 @@ namespace MediaBrowser.Common.Updates PackageType? packageType = null, Version applicationVersion = null); + /// + /// Gets all available packages from a static resource. + /// + /// The cancellation token. + /// Type of the package. + /// The application version. + /// Task{List{PackageInfo}}. + Task> GetAvailablePackagesWithoutRegistrationInfo(CancellationToken cancellationToken, + PackageType? packageType = null, + Version applicationVersion = null); + /// /// Gets the package. /// diff --git a/MediaBrowser.Common/Updates/IPackageManager.cs b/MediaBrowser.Common/Updates/IPackageManager.cs deleted file mode 100644 index 06bdf46e12..0000000000 --- a/MediaBrowser.Common/Updates/IPackageManager.cs +++ /dev/null @@ -1,34 +0,0 @@ -using MediaBrowser.Model.Updates; -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Common.Updates -{ - public interface IPackageManager - { - /// - /// Gets all available packages dynamically. - /// - /// The cancellation token. - /// Task{List{PackageInfo}}. - Task> GetAvailablePackages(CancellationToken cancellationToken); - - /// - /// Gets all available packages from a static resource. - /// - /// The cancellation token. - /// Task{List{PackageInfo}}. - Task> GetAvailablePackagesWithoutRegistrationInfo(CancellationToken cancellationToken); - - /// - /// Installs a package. - /// - /// - /// The package. - /// The cancellation token. - /// Task. - Task InstallPackage(IProgress progress, PackageVersionInfo package, CancellationToken cancellationToken); - } -} diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 8aef528755..8d52d73b48 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -60,7 +60,7 @@ namespace MediaBrowser.Controller.Entities /// Gets or sets the name. /// /// The name. - public virtual string Name + public string Name { get { diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index da7e6d8670..c2b0289eab 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -5,6 +5,7 @@ using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Notifications; using MediaBrowser.Model.Plugins; using MediaBrowser.Model.Querying; +using MediaBrowser.Model.Search; using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Session; using MediaBrowser.Model.System; @@ -42,6 +43,17 @@ namespace MediaBrowser.Model.ApiClient /// Task{ThemeMediaResult}. Task GetThemeSongsAsync(string userId, string itemId, bool inheritFromParents); + /// + /// Gets the search hints async. + /// + /// The user id. + /// The search term. + /// The start index. + /// The limit. + /// Task{SearchHintResult}. + Task GetSearchHintsAsync(string userId, string searchTerm, int? startIndex = null, + int? limit = null); + /// /// Gets the theme videos async. /// diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 1ec36ddf74..88d6b3e662 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -235,9 +235,7 @@ - - - + PreserveNewest diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 9b18826e3d..f6efe899f2 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -626,7 +626,8 @@ namespace MediaBrowser.ServerApplication public override async Task CheckForApplicationUpdate(CancellationToken cancellationToken, IProgress progress) { - var availablePackages = await PackageManager.GetAvailablePackagesWithoutRegistrationInfo(CancellationToken.None).ConfigureAwait(false); + var availablePackages = await InstallationManager.GetAvailablePackagesWithoutRegistrationInfo(CancellationToken.None).ConfigureAwait(false); + var version = InstallationManager.GetLatestCompatibleVersion(availablePackages, Constants.MbServerPkgName, ConfigurationManager.CommonConfiguration.SystemUpdateLevel); return version != null ? new CheckForUpdateResult { AvailableVersion = version.version, IsUpdateAvailable = version.version > ApplicationVersion, Package = version } : diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index af704967e9..a5261aa690 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.171 + 3.0.173 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index bef1b43b3c..63888e8948 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.171 + 3.0.173 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index e72e3fc1ff..c29fb98ac4 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.171 + 3.0.173 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - + diff --git a/README.md b/README.md index 08c486c77b..c30916c88c 100644 --- a/README.md +++ b/README.md @@ -24,4 +24,4 @@ http://community.mediabrowser.tv/ Release: 3.0.4954.26523
Beta: 3.0.4964.14543
-Dev: 3.0.4951.28135 +Dev: 3.0.4967.25605