mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-03 19:17:24 -05:00 
			
		
		
		
	separate provider options
This commit is contained in:
		
							parent
							
								
									7903037524
								
							
						
					
					
						commit
						5f76b59e67
					
				@ -194,6 +194,9 @@
 | 
			
		||||
    <Compile Include="..\MediaBrowser.Model\Configuration\EncodingQuality.cs">
 | 
			
		||||
      <Link>Configuration\EncodingQuality.cs</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\MediaBrowser.Model\Configuration\FanartOptions.cs">
 | 
			
		||||
      <Link>Configuration\FanartOptions.cs</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\MediaBrowser.Model\Configuration\ImageOption.cs">
 | 
			
		||||
      <Link>Configuration\ImageOption.cs</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
@ -227,6 +230,12 @@
 | 
			
		||||
    <Compile Include="..\MediaBrowser.Model\Configuration\SubtitlePlaybackMode.cs">
 | 
			
		||||
      <Link>Configuration\SubtitlePlaybackMode.cs</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\MediaBrowser.Model\Configuration\TheMovieDbOptions.cs">
 | 
			
		||||
      <Link>Configuration\TheMovieDbOptions.cs</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\MediaBrowser.Model\Configuration\TvdbOptions.cs">
 | 
			
		||||
      <Link>Configuration\TvdbOptions.cs</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\MediaBrowser.Model\Configuration\UnratedItem.cs">
 | 
			
		||||
      <Link>Configuration\UnratedItem.cs</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
 | 
			
		||||
@ -159,6 +159,9 @@
 | 
			
		||||
    <Compile Include="..\MediaBrowser.Model\Configuration\EncodingQuality.cs">
 | 
			
		||||
      <Link>Configuration\EncodingQuality.cs</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\MediaBrowser.Model\Configuration\FanartOptions.cs">
 | 
			
		||||
      <Link>Configuration\FanartOptions.cs</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\MediaBrowser.Model\Configuration\ImageOption.cs">
 | 
			
		||||
      <Link>Configuration\ImageOption.cs</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
@ -192,6 +195,12 @@
 | 
			
		||||
    <Compile Include="..\MediaBrowser.Model\Configuration\SubtitlePlaybackMode.cs">
 | 
			
		||||
      <Link>Configuration\SubtitlePlaybackMode.cs</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\MediaBrowser.Model\Configuration\TheMovieDbOptions.cs">
 | 
			
		||||
      <Link>Configuration\TheMovieDbOptions.cs</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\MediaBrowser.Model\Configuration\TvdbOptions.cs">
 | 
			
		||||
      <Link>Configuration\TvdbOptions.cs</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\MediaBrowser.Model\Configuration\UnratedItem.cs">
 | 
			
		||||
      <Link>Configuration\UnratedItem.cs</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										17
									
								
								MediaBrowser.Model/Configuration/FanartOptions.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								MediaBrowser.Model/Configuration/FanartOptions.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
			
		||||
 | 
			
		||||
namespace MediaBrowser.Model.Configuration
 | 
			
		||||
{
 | 
			
		||||
    public class FanartOptions
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets a value indicating whether [enable automatic updates].
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <value><c>true</c> if [enable automatic updates]; otherwise, <c>false</c>.</value>
 | 
			
		||||
        public bool EnableAutomaticUpdates { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the user API key.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <value>The user API key.</value>
 | 
			
		||||
        public string UserApiKey { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,5 +1,4 @@
 | 
			
		||||
using System.Xml.Schema;
 | 
			
		||||
using MediaBrowser.Model.Dto;
 | 
			
		||||
using MediaBrowser.Model.Dto;
 | 
			
		||||
using MediaBrowser.Model.Entities;
 | 
			
		||||
 | 
			
		||||
namespace MediaBrowser.Model.Configuration
 | 
			
		||||
@ -32,10 +31,11 @@ namespace MediaBrowser.Model.Configuration
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <value>The HTTPS server port number.</value>
 | 
			
		||||
        public int HttpsPortNumber { get; set; }
 | 
			
		||||
        
 | 
			
		||||
        /// Gets or sets the value pointing to the file system where the ssl certiifcate is located.
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets a value indicating whether [use HTTPS].
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <value>The value pointing to the file system where the ssl certiifcate is located.</value>
 | 
			
		||||
        /// <value><c>true</c> if [use HTTPS]; otherwise, <c>false</c>.</value>
 | 
			
		||||
        public bool UseHttps { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
@ -154,6 +154,7 @@ namespace MediaBrowser.Model.Configuration
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <value><c>true</c> if [enable dashboard response caching]; otherwise, <c>false</c>.</value>
 | 
			
		||||
        public bool EnableDashboardResponseCaching { get; set; }
 | 
			
		||||
        public bool EnableDashboardResourceMinification { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Allows the dashboard to be served from a custom path.
 | 
			
		||||
@ -161,18 +162,8 @@ namespace MediaBrowser.Model.Configuration
 | 
			
		||||
        /// <value>The dashboard source path.</value>
 | 
			
		||||
        public string DashboardSourcePath { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets a value indicating whether [enable tv db updates].
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <value><c>true</c> if [enable tv db updates]; otherwise, <c>false</c>.</value>
 | 
			
		||||
        public bool EnableTvDbUpdates { get; set; }
 | 
			
		||||
        public bool EnableTmdbUpdates { get; set; }
 | 
			
		||||
 | 
			
		||||
        public bool StoreArtistsInMetadata { get; set; }
 | 
			
		||||
 | 
			
		||||
        public bool EnableFanArtUpdates { get; set; }
 | 
			
		||||
        public string FanartApiKey { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the image saving convention.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
@ -220,6 +211,7 @@ namespace MediaBrowser.Model.Configuration
 | 
			
		||||
            UseHttps = false;
 | 
			
		||||
            CertificatePath = null;
 | 
			
		||||
            EnableDashboardResponseCaching = true;
 | 
			
		||||
            EnableDashboardResourceMinification = true;
 | 
			
		||||
 | 
			
		||||
            EnableAutomaticRestart = true;
 | 
			
		||||
            EnableWin8HttpListener = true;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										12
									
								
								MediaBrowser.Model/Configuration/TheMovieDbOptions.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								MediaBrowser.Model/Configuration/TheMovieDbOptions.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
 | 
			
		||||
namespace MediaBrowser.Model.Configuration
 | 
			
		||||
{
 | 
			
		||||
    public class TheMovieDbOptions
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets a value indicating whether [enable automatic updates].
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <value><c>true</c> if [enable automatic updates]; otherwise, <c>false</c>.</value>
 | 
			
		||||
        public bool EnableAutomaticUpdates { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										12
									
								
								MediaBrowser.Model/Configuration/TvdbOptions.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								MediaBrowser.Model/Configuration/TvdbOptions.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
 | 
			
		||||
namespace MediaBrowser.Model.Configuration
 | 
			
		||||
{
 | 
			
		||||
    public class TvdbOptions
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets a value indicating whether [enable automatic updates].
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <value><c>true</c> if [enable automatic updates]; otherwise, <c>false</c>.</value>
 | 
			
		||||
        public bool EnableAutomaticUpdates { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -548,7 +548,7 @@ namespace MediaBrowser.Model.Dlna
 | 
			
		||||
            {
 | 
			
		||||
                SubtitleProfile externalProfile = GetSubtitleProfile(options.Profile.SubtitleProfiles, SubtitleDeliveryMethod.External, _serverTextSubtitleOutputs);
 | 
			
		||||
 | 
			
		||||
                if (options.Context == EncodingContext.Streaming && externalProfile != null)
 | 
			
		||||
                if (externalProfile != null)
 | 
			
		||||
                {
 | 
			
		||||
                    return externalProfile;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
@ -97,8 +97,11 @@
 | 
			
		||||
    <Compile Include="Configuration\ChapterOptions.cs" />
 | 
			
		||||
    <Compile Include="Configuration\CinemaModeConfiguration.cs" />
 | 
			
		||||
    <Compile Include="Configuration\EncodingOptions.cs" />
 | 
			
		||||
    <Compile Include="Configuration\FanartOptions.cs" />
 | 
			
		||||
    <Compile Include="Configuration\MetadataConfiguration.cs" />
 | 
			
		||||
    <Compile Include="Configuration\PeopleMetadataOptions.cs" />
 | 
			
		||||
    <Compile Include="Configuration\TheMovieDbOptions.cs" />
 | 
			
		||||
    <Compile Include="Configuration\TvdbOptions.cs" />
 | 
			
		||||
    <Compile Include="Configuration\XbmcMetadataOptions.cs" />
 | 
			
		||||
    <Compile Include="Configuration\SubtitlePlaybackMode.cs" />
 | 
			
		||||
    <Compile Include="Connect\ConnectAuthenticationExchangeResult.cs" />
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,7 @@
 | 
			
		||||
using MediaBrowser.Common.Net;
 | 
			
		||||
using MediaBrowser.Controller.Configuration;
 | 
			
		||||
using MediaBrowser.Controller.Library;
 | 
			
		||||
using MediaBrowser.Model.Configuration;
 | 
			
		||||
using MediaBrowser.Model.Logging;
 | 
			
		||||
using MediaBrowser.Model.Serialization;
 | 
			
		||||
using MediaBrowser.Providers.Music;
 | 
			
		||||
@ -13,6 +14,7 @@ using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using MediaBrowser.Providers.TV;
 | 
			
		||||
 | 
			
		||||
namespace MediaBrowser.Providers.Movies
 | 
			
		||||
{
 | 
			
		||||
@ -54,7 +56,9 @@ namespace MediaBrowser.Providers.Movies
 | 
			
		||||
        /// <returns>Task.</returns>
 | 
			
		||||
        public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
 | 
			
		||||
        {
 | 
			
		||||
            if (!_config.Configuration.EnableFanArtUpdates)
 | 
			
		||||
            var options = FanartSeriesProvider.Current.GetFanartOptions();
 | 
			
		||||
 | 
			
		||||
            if (!options.EnableAutomaticUpdates)
 | 
			
		||||
            {
 | 
			
		||||
                progress.Report(100);
 | 
			
		||||
                return;
 | 
			
		||||
@ -82,7 +86,7 @@ namespace MediaBrowser.Providers.Movies
 | 
			
		||||
            // If this is our first time, don't do any updates and just record the timestamp
 | 
			
		||||
            if (!string.IsNullOrEmpty(lastUpdateTime))
 | 
			
		||||
            {
 | 
			
		||||
                var moviesToUpdate = await GetMovieIdsToUpdate(existingDirectories, lastUpdateTime, cancellationToken).ConfigureAwait(false);
 | 
			
		||||
                var moviesToUpdate = await GetMovieIdsToUpdate(existingDirectories, lastUpdateTime, options, cancellationToken).ConfigureAwait(false);
 | 
			
		||||
 | 
			
		||||
                progress.Report(5);
 | 
			
		||||
 | 
			
		||||
@ -96,13 +100,14 @@ namespace MediaBrowser.Providers.Movies
 | 
			
		||||
            progress.Report(100);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async Task<IEnumerable<string>> GetMovieIdsToUpdate(IEnumerable<string> existingIds, string lastUpdateTime, CancellationToken cancellationToken)
 | 
			
		||||
        private async Task<IEnumerable<string>> GetMovieIdsToUpdate(IEnumerable<string> existingIds, string lastUpdateTime, FanartOptions options, CancellationToken cancellationToken)
 | 
			
		||||
        {
 | 
			
		||||
            var url = string.Format(UpdatesUrl, FanartArtistProvider.ApiKey, lastUpdateTime);
 | 
			
		||||
 | 
			
		||||
            if (!string.IsNullOrWhiteSpace(_config.Configuration.FanartApiKey))
 | 
			
		||||
            var clientKey = options.UserApiKey;
 | 
			
		||||
            if (!string.IsNullOrWhiteSpace(clientKey))
 | 
			
		||||
            {
 | 
			
		||||
                url += "&client_key=" + _config.Configuration.FanartApiKey;
 | 
			
		||||
                url += "&client_key=" + clientKey;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // First get last time
 | 
			
		||||
 | 
			
		||||
@ -19,6 +19,7 @@ using System.IO;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using MediaBrowser.Providers.TV;
 | 
			
		||||
 | 
			
		||||
namespace MediaBrowser.Providers.Movies
 | 
			
		||||
{
 | 
			
		||||
@ -216,7 +217,8 @@ namespace MediaBrowser.Providers.Movies
 | 
			
		||||
 | 
			
		||||
        public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date)
 | 
			
		||||
        {
 | 
			
		||||
            if (!_config.Configuration.EnableFanArtUpdates)
 | 
			
		||||
            var options = FanartSeriesProvider.Current.GetFanartOptions();
 | 
			
		||||
            if (!options.EnableAutomaticUpdates)
 | 
			
		||||
            {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
@ -283,9 +285,10 @@ namespace MediaBrowser.Providers.Movies
 | 
			
		||||
 | 
			
		||||
            var url = string.Format(FanArtBaseUrl, FanartArtistProvider.ApiKey, id);
 | 
			
		||||
 | 
			
		||||
            if (!string.IsNullOrWhiteSpace(_config.Configuration.FanartApiKey))
 | 
			
		||||
            var clientKey = FanartSeriesProvider.Current.GetFanartOptions().UserApiKey;
 | 
			
		||||
            if (!string.IsNullOrWhiteSpace(clientKey))
 | 
			
		||||
            {
 | 
			
		||||
                url += "&client_key=" + _config.Configuration.FanartApiKey;
 | 
			
		||||
                url += "&client_key=" + clientKey;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var path = GetFanartJsonPath(id);
 | 
			
		||||
 | 
			
		||||
@ -7,6 +7,7 @@ using MediaBrowser.Controller.Entities.Movies;
 | 
			
		||||
using MediaBrowser.Controller.Library;
 | 
			
		||||
using MediaBrowser.Controller.Localization;
 | 
			
		||||
using MediaBrowser.Controller.Providers;
 | 
			
		||||
using MediaBrowser.Model.Configuration;
 | 
			
		||||
using MediaBrowser.Model.Entities;
 | 
			
		||||
using MediaBrowser.Model.Logging;
 | 
			
		||||
using MediaBrowser.Model.Providers;
 | 
			
		||||
@ -371,9 +372,14 @@ namespace MediaBrowser.Providers.Movies
 | 
			
		||||
            return _httpClient.Get(options);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public TheMovieDbOptions GetTheMovieDbOptions()
 | 
			
		||||
        {
 | 
			
		||||
            return _configurationManager.GetConfiguration<TheMovieDbOptions>("themoviedb");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool HasChanged(IHasMetadata item, DateTime date)
 | 
			
		||||
        {
 | 
			
		||||
            if (!_configurationManager.Configuration.EnableTmdbUpdates)
 | 
			
		||||
            if (!GetTheMovieDbOptions().EnableAutomaticUpdates)
 | 
			
		||||
            {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
@ -605,4 +611,19 @@ namespace MediaBrowser.Providers.Movies
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class TmdbConfigStore : IConfigurationFactory
 | 
			
		||||
    {
 | 
			
		||||
        public IEnumerable<ConfigurationStore> GetConfigurations()
 | 
			
		||||
        {
 | 
			
		||||
            return new List<ConfigurationStore>
 | 
			
		||||
            {
 | 
			
		||||
                new ConfigurationStore
 | 
			
		||||
                {
 | 
			
		||||
                     Key = "themoviedb",
 | 
			
		||||
                     ConfigurationType = typeof(TheMovieDbOptions)
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -68,7 +68,7 @@ namespace MediaBrowser.Providers.Movies
 | 
			
		||||
        /// <returns>Task.</returns>
 | 
			
		||||
        public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
 | 
			
		||||
        {
 | 
			
		||||
            if (!_config.Configuration.EnableTmdbUpdates)
 | 
			
		||||
            if (!MovieDbProvider.Current.GetTheMovieDbOptions().EnableAutomaticUpdates)
 | 
			
		||||
            {
 | 
			
		||||
                progress.Report(100);
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
@ -16,6 +16,7 @@ using System.Text;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Xml;
 | 
			
		||||
using MediaBrowser.Providers.TV;
 | 
			
		||||
 | 
			
		||||
namespace MediaBrowser.Providers.Music
 | 
			
		||||
{
 | 
			
		||||
@ -356,7 +357,8 @@ namespace MediaBrowser.Providers.Music
 | 
			
		||||
 | 
			
		||||
        public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date)
 | 
			
		||||
        {
 | 
			
		||||
            if (!_config.Configuration.EnableFanArtUpdates)
 | 
			
		||||
            var options = FanartSeriesProvider.Current.GetFanartOptions();
 | 
			
		||||
            if (!options.EnableAutomaticUpdates)
 | 
			
		||||
            {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -17,6 +17,7 @@ using System.Text;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Xml;
 | 
			
		||||
using MediaBrowser.Providers.TV;
 | 
			
		||||
 | 
			
		||||
namespace MediaBrowser.Providers.Music
 | 
			
		||||
{
 | 
			
		||||
@ -373,7 +374,8 @@ namespace MediaBrowser.Providers.Music
 | 
			
		||||
 | 
			
		||||
        public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date)
 | 
			
		||||
        {
 | 
			
		||||
            if (!_config.Configuration.EnableFanArtUpdates)
 | 
			
		||||
            var options = FanartSeriesProvider.Current.GetFanartOptions();
 | 
			
		||||
            if (!options.EnableAutomaticUpdates)
 | 
			
		||||
            {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
@ -423,9 +425,10 @@ namespace MediaBrowser.Providers.Music
 | 
			
		||||
 | 
			
		||||
            var url = string.Format(FanArtBaseUrl, ApiKey, musicBrainzId);
 | 
			
		||||
 | 
			
		||||
            if (!string.IsNullOrWhiteSpace(_config.Configuration.FanartApiKey))
 | 
			
		||||
            var clientKey = FanartSeriesProvider.Current.GetFanartOptions().UserApiKey;
 | 
			
		||||
            if (!string.IsNullOrWhiteSpace(clientKey))
 | 
			
		||||
            {
 | 
			
		||||
                url += "&client_key=" + _config.Configuration.FanartApiKey;
 | 
			
		||||
                url += "&client_key=" + clientKey;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var xmlPath = GetArtistXmlPath(_config.ApplicationPaths, musicBrainzId);
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,7 @@
 | 
			
		||||
using MediaBrowser.Common.Net;
 | 
			
		||||
using MediaBrowser.Controller.Configuration;
 | 
			
		||||
using MediaBrowser.Controller.Library;
 | 
			
		||||
using MediaBrowser.Model.Configuration;
 | 
			
		||||
using MediaBrowser.Model.Logging;
 | 
			
		||||
using MediaBrowser.Model.Serialization;
 | 
			
		||||
using System;
 | 
			
		||||
@ -12,6 +13,7 @@ using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using MediaBrowser.Providers.TV;
 | 
			
		||||
 | 
			
		||||
namespace MediaBrowser.Providers.Music
 | 
			
		||||
{
 | 
			
		||||
@ -53,7 +55,9 @@ namespace MediaBrowser.Providers.Music
 | 
			
		||||
        /// <returns>Task.</returns>
 | 
			
		||||
        public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
 | 
			
		||||
        {
 | 
			
		||||
            if (!_config.Configuration.EnableFanArtUpdates)
 | 
			
		||||
            var options = FanartSeriesProvider.Current.GetFanartOptions();
 | 
			
		||||
 | 
			
		||||
            if (!options.EnableAutomaticUpdates)
 | 
			
		||||
            {
 | 
			
		||||
                progress.Report(100);
 | 
			
		||||
                return;
 | 
			
		||||
@ -81,7 +85,7 @@ namespace MediaBrowser.Providers.Music
 | 
			
		||||
            // If this is our first time, don't do any updates and just record the timestamp
 | 
			
		||||
            if (!string.IsNullOrEmpty(lastUpdateTime))
 | 
			
		||||
            {
 | 
			
		||||
                var artistsToUpdate = await GetArtistIdsToUpdate(existingDirectories, lastUpdateTime, cancellationToken).ConfigureAwait(false);
 | 
			
		||||
                var artistsToUpdate = await GetArtistIdsToUpdate(existingDirectories, lastUpdateTime, options, cancellationToken).ConfigureAwait(false);
 | 
			
		||||
 | 
			
		||||
                progress.Report(5);
 | 
			
		||||
 | 
			
		||||
@ -102,13 +106,13 @@ namespace MediaBrowser.Providers.Music
 | 
			
		||||
        /// <param name="lastUpdateTime">The last update time.</param>
 | 
			
		||||
        /// <param name="cancellationToken">The cancellation token.</param>
 | 
			
		||||
        /// <returns>Task{IEnumerable{System.String}}.</returns>
 | 
			
		||||
        private async Task<IEnumerable<string>> GetArtistIdsToUpdate(IEnumerable<string> existingArtistIds, string lastUpdateTime, CancellationToken cancellationToken)
 | 
			
		||||
        private async Task<IEnumerable<string>> GetArtistIdsToUpdate(IEnumerable<string> existingArtistIds, string lastUpdateTime, FanartOptions options, CancellationToken cancellationToken)
 | 
			
		||||
        {
 | 
			
		||||
            var url = string.Format(UpdatesUrl, FanartArtistProvider.ApiKey, lastUpdateTime);
 | 
			
		||||
 | 
			
		||||
            if (!string.IsNullOrWhiteSpace(_config.Configuration.FanartApiKey))
 | 
			
		||||
            if (!string.IsNullOrWhiteSpace(options.UserApiKey))
 | 
			
		||||
            {
 | 
			
		||||
                url += "&client_key=" + _config.Configuration.FanartApiKey;
 | 
			
		||||
                url += "&client_key=" + options.UserApiKey;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            // First get last time
 | 
			
		||||
 | 
			
		||||
@ -223,7 +223,8 @@ namespace MediaBrowser.Providers.TV
 | 
			
		||||
 | 
			
		||||
        public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date)
 | 
			
		||||
        {
 | 
			
		||||
            if (!_config.Configuration.EnableFanArtUpdates)
 | 
			
		||||
            var options = FanartSeriesProvider.Current.GetFanartOptions();
 | 
			
		||||
            if (!options.EnableAutomaticUpdates)
 | 
			
		||||
            {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,7 @@
 | 
			
		||||
using MediaBrowser.Common.Net;
 | 
			
		||||
using MediaBrowser.Controller.Configuration;
 | 
			
		||||
using MediaBrowser.Controller.Library;
 | 
			
		||||
using MediaBrowser.Model.Configuration;
 | 
			
		||||
using MediaBrowser.Model.Logging;
 | 
			
		||||
using MediaBrowser.Model.Serialization;
 | 
			
		||||
using MediaBrowser.Providers.Music;
 | 
			
		||||
@ -54,7 +55,9 @@ namespace MediaBrowser.Providers.TV
 | 
			
		||||
        /// <returns>Task.</returns>
 | 
			
		||||
        public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
 | 
			
		||||
        {
 | 
			
		||||
            if (!_config.Configuration.EnableFanArtUpdates)
 | 
			
		||||
            var options = FanartSeriesProvider.Current.GetFanartOptions();
 | 
			
		||||
 | 
			
		||||
            if (!options.EnableAutomaticUpdates)
 | 
			
		||||
            {
 | 
			
		||||
                progress.Report(100);
 | 
			
		||||
                return;
 | 
			
		||||
@ -82,7 +85,7 @@ namespace MediaBrowser.Providers.TV
 | 
			
		||||
            // If this is our first time, don't do any updates and just record the timestamp
 | 
			
		||||
            if (!string.IsNullOrEmpty(lastUpdateTime))
 | 
			
		||||
            {
 | 
			
		||||
                var seriesToUpdate = await GetSeriesIdsToUpdate(existingDirectories, lastUpdateTime, cancellationToken).ConfigureAwait(false);
 | 
			
		||||
                var seriesToUpdate = await GetSeriesIdsToUpdate(existingDirectories, lastUpdateTime, options, cancellationToken).ConfigureAwait(false);
 | 
			
		||||
 | 
			
		||||
                progress.Report(5);
 | 
			
		||||
 | 
			
		||||
@ -103,13 +106,13 @@ namespace MediaBrowser.Providers.TV
 | 
			
		||||
        /// <param name="lastUpdateTime">The last update time.</param>
 | 
			
		||||
        /// <param name="cancellationToken">The cancellation token.</param>
 | 
			
		||||
        /// <returns>Task{IEnumerable{System.String}}.</returns>
 | 
			
		||||
        private async Task<IEnumerable<string>> GetSeriesIdsToUpdate(IEnumerable<string> existingSeriesIds, string lastUpdateTime, CancellationToken cancellationToken)
 | 
			
		||||
        private async Task<IEnumerable<string>> GetSeriesIdsToUpdate(IEnumerable<string> existingSeriesIds, string lastUpdateTime, FanartOptions options, CancellationToken cancellationToken)
 | 
			
		||||
        {
 | 
			
		||||
            var url = string.Format(UpdatesUrl, FanartArtistProvider.ApiKey, lastUpdateTime);
 | 
			
		||||
 | 
			
		||||
            if (!string.IsNullOrWhiteSpace(_config.Configuration.FanartApiKey))
 | 
			
		||||
            if (!string.IsNullOrWhiteSpace(options.UserApiKey))
 | 
			
		||||
            {
 | 
			
		||||
                url += "&client_key=" + _config.Configuration.FanartApiKey;
 | 
			
		||||
                url += "&client_key=" + options.UserApiKey;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // First get last time
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,7 @@ using MediaBrowser.Controller.Configuration;
 | 
			
		||||
using MediaBrowser.Controller.Entities;
 | 
			
		||||
using MediaBrowser.Controller.Entities.TV;
 | 
			
		||||
using MediaBrowser.Controller.Providers;
 | 
			
		||||
using MediaBrowser.Model.Configuration;
 | 
			
		||||
using MediaBrowser.Model.Dto;
 | 
			
		||||
using MediaBrowser.Model.Entities;
 | 
			
		||||
using MediaBrowser.Model.Net;
 | 
			
		||||
@ -161,10 +162,10 @@ namespace MediaBrowser.Providers.TV
 | 
			
		||||
            PopulateImages(list, obj.tvposter, ImageType.Primary, 1000, 1426);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void PopulateImages(List<RemoteImageInfo> list, 
 | 
			
		||||
            List<Image> images, 
 | 
			
		||||
            ImageType type, 
 | 
			
		||||
            int width, 
 | 
			
		||||
        private void PopulateImages(List<RemoteImageInfo> list,
 | 
			
		||||
            List<Image> images,
 | 
			
		||||
            ImageType type,
 | 
			
		||||
            int width,
 | 
			
		||||
            int height,
 | 
			
		||||
            bool allowSeasonAll = false)
 | 
			
		||||
        {
 | 
			
		||||
@ -283,6 +284,11 @@ namespace MediaBrowser.Providers.TV
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public FanartOptions GetFanartOptions()
 | 
			
		||||
        {
 | 
			
		||||
            return _config.GetConfiguration<FanartOptions>("fanart");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Downloads the series json.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
@ -295,11 +301,12 @@ namespace MediaBrowser.Providers.TV
 | 
			
		||||
 | 
			
		||||
            var url = string.Format(FanArtBaseUrl, FanartArtistProvider.ApiKey, tvdbId);
 | 
			
		||||
 | 
			
		||||
            if (!string.IsNullOrWhiteSpace(_config.Configuration.FanartApiKey))
 | 
			
		||||
            var clientKey = GetFanartOptions().UserApiKey;
 | 
			
		||||
            if (!string.IsNullOrWhiteSpace(clientKey))
 | 
			
		||||
            {
 | 
			
		||||
                url += "&client_key=" + _config.Configuration.FanartApiKey;
 | 
			
		||||
                url += "&client_key=" + clientKey;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            var path = GetFanartJsonPath(tvdbId);
 | 
			
		||||
 | 
			
		||||
            Directory.CreateDirectory(Path.GetDirectoryName(path));
 | 
			
		||||
@ -336,7 +343,8 @@ namespace MediaBrowser.Providers.TV
 | 
			
		||||
 | 
			
		||||
        public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date)
 | 
			
		||||
        {
 | 
			
		||||
            if (!_config.Configuration.EnableFanArtUpdates)
 | 
			
		||||
            var options = GetFanartOptions();
 | 
			
		||||
            if (!options.EnableAutomaticUpdates)
 | 
			
		||||
            {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
@ -383,4 +391,19 @@ namespace MediaBrowser.Providers.TV
 | 
			
		||||
            public List<Image> seasonbanner { get; set; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class FanartConfigStore : IConfigurationFactory
 | 
			
		||||
    {
 | 
			
		||||
        public IEnumerable<ConfigurationStore> GetConfigurations()
 | 
			
		||||
        {
 | 
			
		||||
            return new List<ConfigurationStore>
 | 
			
		||||
            {
 | 
			
		||||
                new ConfigurationStore
 | 
			
		||||
                {
 | 
			
		||||
                     Key = "fanart",
 | 
			
		||||
                     ConfigurationType = typeof(FanartOptions)
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -369,7 +369,7 @@ namespace MediaBrowser.Providers.TV
 | 
			
		||||
 | 
			
		||||
        public bool HasChanged(IHasMetadata item, DateTime date)
 | 
			
		||||
        {
 | 
			
		||||
            if (!_configurationManager.Configuration.EnableTmdbUpdates)
 | 
			
		||||
            if (!MovieDbProvider.Current.GetTheMovieDbOptions().EnableAutomaticUpdates)
 | 
			
		||||
            {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -193,7 +193,7 @@ namespace MediaBrowser.Providers.TV
 | 
			
		||||
            if (!episode.IsVirtualUnaired)
 | 
			
		||||
            {
 | 
			
		||||
                // For non-unaired items, only enable if configured
 | 
			
		||||
                if (!_config.Configuration.EnableTvDbUpdates)
 | 
			
		||||
                if (!TvdbSeriesProvider.Current.GetTvDbOptions().EnableAutomaticUpdates)
 | 
			
		||||
                {
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
@ -362,7 +362,7 @@ namespace MediaBrowser.Providers.TV
 | 
			
		||||
            if (item.LocationType != LocationType.Virtual)
 | 
			
		||||
            {
 | 
			
		||||
                // For non-virtual items, only enable if configured
 | 
			
		||||
                if (!_config.Configuration.EnableTvDbUpdates)
 | 
			
		||||
                if (!TvdbSeriesProvider.Current.GetTvDbOptions().EnableAutomaticUpdates)
 | 
			
		||||
                {
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
@ -340,7 +340,7 @@ namespace MediaBrowser.Providers.TV
 | 
			
		||||
 | 
			
		||||
        public bool HasChanged(IHasMetadata item, MetadataStatus status, IDirectoryService directoryService)
 | 
			
		||||
        {
 | 
			
		||||
            if (!_config.Configuration.EnableTvDbUpdates)
 | 
			
		||||
            if (!TvdbSeriesProvider.Current.GetTvDbOptions().EnableAutomaticUpdates)
 | 
			
		||||
            {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,7 @@ using MediaBrowser.Controller.Entities;
 | 
			
		||||
using MediaBrowser.Controller.Entities.TV;
 | 
			
		||||
using MediaBrowser.Controller.Library;
 | 
			
		||||
using MediaBrowser.Controller.Providers;
 | 
			
		||||
using MediaBrowser.Model.Configuration;
 | 
			
		||||
using MediaBrowser.Model.Entities;
 | 
			
		||||
using MediaBrowser.Model.IO;
 | 
			
		||||
using MediaBrowser.Model.Logging;
 | 
			
		||||
@ -224,6 +225,11 @@ namespace MediaBrowser.Providers.TV
 | 
			
		||||
            await ExtractEpisodes(seriesDataPath, Path.Combine(seriesDataPath, preferredMetadataLanguage + ".xml"), lastTvDbUpdateTime).ConfigureAwait(false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public TvdbOptions GetTvDbOptions()
 | 
			
		||||
        {
 | 
			
		||||
            return _config.GetConfiguration<TvdbOptions>("tvdb");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private readonly Task _cachedTask = Task.FromResult(true);
 | 
			
		||||
        internal Task EnsureSeriesInfo(string seriesId, string preferredMetadataLanguage, CancellationToken cancellationToken)
 | 
			
		||||
        {
 | 
			
		||||
@ -237,7 +243,7 @@ namespace MediaBrowser.Providers.TV
 | 
			
		||||
            var seriesXmlFilename = preferredMetadataLanguage + ".xml";
 | 
			
		||||
 | 
			
		||||
            var download = false;
 | 
			
		||||
            var automaticUpdatesEnabled = _config.Configuration.EnableTvDbUpdates;
 | 
			
		||||
            var automaticUpdatesEnabled = GetTvDbOptions().EnableAutomaticUpdates;
 | 
			
		||||
 | 
			
		||||
            const int cacheDays = 2;
 | 
			
		||||
 | 
			
		||||
@ -1219,4 +1225,19 @@ namespace MediaBrowser.Providers.TV
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class TvdbConfigStore : IConfigurationFactory
 | 
			
		||||
    {
 | 
			
		||||
        public IEnumerable<ConfigurationStore> GetConfigurations()
 | 
			
		||||
        {
 | 
			
		||||
            return new List<ConfigurationStore>
 | 
			
		||||
            {
 | 
			
		||||
                new ConfigurationStore
 | 
			
		||||
                {
 | 
			
		||||
                     Key = "tvdb",
 | 
			
		||||
                     ConfigurationType = typeof(TvdbOptions)
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -40,6 +40,12 @@
 | 
			
		||||
    "OptionIAcceptTermsOfService": "I accept the terms of service",
 | 
			
		||||
    "ButtonPrivacyPolicy": "Privacy policy",
 | 
			
		||||
    "ButtonTermsOfService": "Terms of Service",
 | 
			
		||||
    "HeaderDeveloperOptions": "Developer Options",
 | 
			
		||||
    "OptionEnableWebClientResponseCache": "Enable web client response caching",
 | 
			
		||||
    "OptionDisableForDevelopmentHelp": "Disable these for web client development purposes",
 | 
			
		||||
    "OptionEnableWebClientResourceMinification": "Enable web client resource minification",
 | 
			
		||||
    "LabelDashboardSourcePath": "Web client source path:",
 | 
			
		||||
    "LabelDashboardSourcePathHelp": "If running the server from source, specify the path to the dashboard-ui folder. All web client files will be served from this location.",
 | 
			
		||||
    "ButtonOk": "Ok",
 | 
			
		||||
    "ButtonCancel": "Cancel",
 | 
			
		||||
    "ButtonNew": "New",
 | 
			
		||||
@ -47,6 +53,7 @@
 | 
			
		||||
    "HeaderAudio": "Audio",
 | 
			
		||||
    "HeaderVideo": "Video",
 | 
			
		||||
    "HeaderPaths": "Paths",
 | 
			
		||||
    "ButtonDonateWithPayPal": "Donate with PayPal",
 | 
			
		||||
    "OptionDetectArchiveFilesAsMedia": "Detect archive files as media",
 | 
			
		||||
    "OptionDetectArchiveFilesAsMediaHelp": "If enabled, files with .rar and .zip extensions will be detected as media files.",
 | 
			
		||||
    "LabelEnterConnectUserName": "User name or email:",
 | 
			
		||||
@ -1308,7 +1315,7 @@
 | 
			
		||||
    "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.",
 | 
			
		||||
    "HeaderNewUsers": "New Users",
 | 
			
		||||
    "ButtonSignUp": "Sign up",
 | 
			
		||||
    "ButtonForgotPassword": "Forgot password?",
 | 
			
		||||
    "ButtonForgotPassword": "Forgot password",
 | 
			
		||||
    "OptionDisableUserPreferences": "Disable access to user preferences",
 | 
			
		||||
    "OptionDisableUserPreferencesHelp": "If enabled, only administrators will be able to configure user profile images, passwords, and language preferences.",
 | 
			
		||||
    "HeaderSelectServer": "Select Server",
 | 
			
		||||
 | 
			
		||||
@ -702,8 +702,8 @@ namespace MediaBrowser.Server.Implementations.Sync
 | 
			
		||||
            var mediaSources = hasMediaSources.GetMediaSources(false).ToList();
 | 
			
		||||
 | 
			
		||||
            var preferredAudio = string.IsNullOrEmpty(user.Configuration.AudioLanguagePreference)
 | 
			
		||||
            ? new string[] { }
 | 
			
		||||
            : new[] { user.Configuration.AudioLanguagePreference };
 | 
			
		||||
                ? new string[] { }
 | 
			
		||||
                : new[] { user.Configuration.AudioLanguagePreference };
 | 
			
		||||
 | 
			
		||||
            var preferredSubs = string.IsNullOrEmpty(user.Configuration.SubtitleLanguagePreference)
 | 
			
		||||
                ? new List<string> { }
 | 
			
		||||
 | 
			
		||||
@ -134,7 +134,7 @@ namespace MediaBrowser.WebDashboard.Api
 | 
			
		||||
        {
 | 
			
		||||
            var page = ServerEntryPoint.Instance.PluginConfigurationPages.First(p => p.Name.Equals(request.Name, StringComparison.OrdinalIgnoreCase));
 | 
			
		||||
 | 
			
		||||
            return ResultFactory.GetStaticResult(Request, page.Plugin.Version.ToString().GetMD5(), null, null, MimeTypes.GetMimeType("page.html"), () => GetPackageCreator().ModifyHtml(page.GetHtmlStream(), null));
 | 
			
		||||
            return ResultFactory.GetStaticResult(Request, page.Plugin.Version.ToString().GetMD5(), null, null, MimeTypes.GetMimeType("page.html"), () => GetPackageCreator().ModifyHtml(page.GetHtmlStream(), null, false));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
@ -249,8 +249,10 @@ namespace MediaBrowser.WebDashboard.Api
 | 
			
		||||
        /// <returns>Task{Stream}.</returns>
 | 
			
		||||
        private Task<Stream> GetResourceStream(string path, string localizationCulture)
 | 
			
		||||
        {
 | 
			
		||||
            var minify = _serverConfigurationManager.Configuration.EnableDashboardResourceMinification;
 | 
			
		||||
 | 
			
		||||
            return GetPackageCreator()
 | 
			
		||||
                .GetResource(path, localizationCulture, _appHost.ApplicationVersion.ToString());
 | 
			
		||||
                .GetResource(path, localizationCulture, _appHost.ApplicationVersion.ToString(), minify);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private PackageCreator GetPackageCreator()
 | 
			
		||||
@ -321,7 +323,7 @@ namespace MediaBrowser.WebDashboard.Api
 | 
			
		||||
 | 
			
		||||
        private async Task DumpFile(string resourceVirtualPath, string destinationFilePath, string culture, string appVersion)
 | 
			
		||||
        {
 | 
			
		||||
            using (var stream = await GetPackageCreator().GetResource(resourceVirtualPath, culture, appVersion).ConfigureAwait(false))
 | 
			
		||||
            using (var stream = await GetPackageCreator().GetResource(resourceVirtualPath, culture, appVersion, true).ConfigureAwait(false))
 | 
			
		||||
            {
 | 
			
		||||
                using (var fs = _fileSystem.GetFileStream(destinationFilePath, FileMode.Create, FileAccess.Write, FileShare.Read))
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
@ -10,6 +10,7 @@ using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using WebMarkupMin.Core.Minifiers;
 | 
			
		||||
using WebMarkupMin.Core.Settings;
 | 
			
		||||
 | 
			
		||||
namespace MediaBrowser.WebDashboard.Api
 | 
			
		||||
{
 | 
			
		||||
@ -30,9 +31,9 @@ namespace MediaBrowser.WebDashboard.Api
 | 
			
		||||
            _jsonSerializer = jsonSerializer;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<Stream> GetResource(string path, 
 | 
			
		||||
        public async Task<Stream> GetResource(string path,
 | 
			
		||||
            string localizationCulture,
 | 
			
		||||
            string appVersion)
 | 
			
		||||
            string appVersion, bool enableMinification)
 | 
			
		||||
        {
 | 
			
		||||
            var isHtml = IsHtml(path);
 | 
			
		||||
 | 
			
		||||
@ -40,11 +41,11 @@ namespace MediaBrowser.WebDashboard.Api
 | 
			
		||||
 | 
			
		||||
            if (path.Equals("scripts/all.js", StringComparison.OrdinalIgnoreCase))
 | 
			
		||||
            {
 | 
			
		||||
                resourceStream = await GetAllJavascript(localizationCulture, appVersion).ConfigureAwait(false);
 | 
			
		||||
                resourceStream = await GetAllJavascript(localizationCulture, appVersion, enableMinification).ConfigureAwait(false);
 | 
			
		||||
            }
 | 
			
		||||
            else if (path.Equals("css/all.css", StringComparison.OrdinalIgnoreCase))
 | 
			
		||||
            {
 | 
			
		||||
                resourceStream = await GetAllCss().ConfigureAwait(false);
 | 
			
		||||
                resourceStream = await GetAllCss(enableMinification).ConfigureAwait(false);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
@ -57,7 +58,7 @@ namespace MediaBrowser.WebDashboard.Api
 | 
			
		||||
                // jQuery ajax doesn't seem to handle if-modified-since correctly
 | 
			
		||||
                if (isHtml)
 | 
			
		||||
                {
 | 
			
		||||
                    resourceStream = await ModifyHtml(resourceStream, localizationCulture).ConfigureAwait(false);
 | 
			
		||||
                    resourceStream = await ModifyHtml(resourceStream, localizationCulture, enableMinification).ConfigureAwait(false);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -106,8 +107,9 @@ namespace MediaBrowser.WebDashboard.Api
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="sourceStream">The source stream.</param>
 | 
			
		||||
        /// <param name="localizationCulture">The localization culture.</param>
 | 
			
		||||
        /// <param name="enableMinification">if set to <c>true</c> [enable minification].</param>
 | 
			
		||||
        /// <returns>Task{Stream}.</returns>
 | 
			
		||||
        public async Task<Stream> ModifyHtml(Stream sourceStream, string localizationCulture)
 | 
			
		||||
        public async Task<Stream> ModifyHtml(Stream sourceStream, string localizationCulture, bool enableMinification)
 | 
			
		||||
        {
 | 
			
		||||
            using (sourceStream)
 | 
			
		||||
            {
 | 
			
		||||
@ -128,16 +130,27 @@ namespace MediaBrowser.WebDashboard.Api
 | 
			
		||||
                        html = html.Replace("<html>", "<html lang=\"" + lang + "\">");
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    //try
 | 
			
		||||
                    //{
 | 
			
		||||
                    //    var minifier = new HtmlMinifier(new HtmlMinificationSettings(true));
 | 
			
		||||
                    if (enableMinification)
 | 
			
		||||
                    {
 | 
			
		||||
                        try
 | 
			
		||||
                        {
 | 
			
		||||
                            var minifier = new HtmlMinifier(new HtmlMinificationSettings());
 | 
			
		||||
                            var result = minifier.Minify(html, false);
 | 
			
		||||
 | 
			
		||||
                    //    html = minifier.Minify(html).MinifiedContent;
 | 
			
		||||
                    //}
 | 
			
		||||
                    //catch (Exception ex)
 | 
			
		||||
                    //{
 | 
			
		||||
                    //    Logger.ErrorException("Error minifying html", ex);
 | 
			
		||||
                    //}
 | 
			
		||||
                            if (result.Errors.Count > 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                _logger.Error("Error minifying html: " + result.Errors[0].Message);
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                html = result.MinifiedContent;
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        catch (Exception ex)
 | 
			
		||||
                        {
 | 
			
		||||
                            _logger.ErrorException("Error minifying html", ex);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                var version = GetType().Assembly.GetName().Version;
 | 
			
		||||
@ -221,7 +234,6 @@ namespace MediaBrowser.WebDashboard.Api
 | 
			
		||||
            var files = new[]
 | 
			
		||||
                            {
 | 
			
		||||
                                "scripts/all.js" + versionString,
 | 
			
		||||
                                "thirdparty/jstree3.0.8/jstree.min.js",
 | 
			
		||||
                                "thirdparty/swipebox-master/js/jquery.swipebox.min.js" + versionString
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
@ -236,7 +248,7 @@ namespace MediaBrowser.WebDashboard.Api
 | 
			
		||||
        /// Gets a stream containing all concatenated javascript
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns>Task{Stream}.</returns>
 | 
			
		||||
        private async Task<Stream> GetAllJavascript(string culture, string version)
 | 
			
		||||
        private async Task<Stream> GetAllJavascript(string culture, string version, bool enableMinification)
 | 
			
		||||
        {
 | 
			
		||||
            var memoryStream = new MemoryStream();
 | 
			
		||||
            var newLineBytes = Encoding.UTF8.GetBytes(Environment.NewLine);
 | 
			
		||||
@ -250,6 +262,8 @@ namespace MediaBrowser.WebDashboard.Api
 | 
			
		||||
            await AppendResource(memoryStream, "thirdparty/cast_sender.js", newLineBytes).ConfigureAwait(false);
 | 
			
		||||
            await AppendResource(memoryStream, "thirdparty/browser.js", newLineBytes).ConfigureAwait(false);
 | 
			
		||||
 | 
			
		||||
            await AppendResource(memoryStream, "thirdparty/jstree3.0.8/jstree.js", newLineBytes).ConfigureAwait(false);
 | 
			
		||||
 | 
			
		||||
            await AppendLocalization(memoryStream, culture).ConfigureAwait(false);
 | 
			
		||||
            await memoryStream.WriteAsync(newLineBytes, 0, newLineBytes.Length).ConfigureAwait(false);
 | 
			
		||||
 | 
			
		||||
@ -304,15 +318,25 @@ namespace MediaBrowser.WebDashboard.Api
 | 
			
		||||
 | 
			
		||||
            var js = builder.ToString();
 | 
			
		||||
 | 
			
		||||
            try
 | 
			
		||||
            if (enableMinification)
 | 
			
		||||
            {
 | 
			
		||||
                var result = new CrockfordJsMinifier().Minify(js, false, Encoding.UTF8);
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    var result = new CrockfordJsMinifier().Minify(js, false, Encoding.UTF8);
 | 
			
		||||
 | 
			
		||||
                js = result.MinifiedContent;
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                _logger.ErrorException("Error minifying javascript", ex);
 | 
			
		||||
                    if (result.Errors.Count > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        _logger.Error("Error minifying javascript: " + result.Errors[0].Message);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        js = result.MinifiedContent;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception ex)
 | 
			
		||||
                {
 | 
			
		||||
                    _logger.ErrorException("Error minifying javascript", ex);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var bytes = Encoding.UTF8.GetBytes(js);
 | 
			
		||||
@ -518,7 +542,7 @@ namespace MediaBrowser.WebDashboard.Api
 | 
			
		||||
        /// Gets all CSS.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns>Task{Stream}.</returns>
 | 
			
		||||
        private async Task<Stream> GetAllCss()
 | 
			
		||||
        private async Task<Stream> GetAllCss(bool enableMinification)
 | 
			
		||||
        {
 | 
			
		||||
            var files = new[]
 | 
			
		||||
                                  {
 | 
			
		||||
@ -561,16 +585,26 @@ namespace MediaBrowser.WebDashboard.Api
 | 
			
		||||
 | 
			
		||||
            var css = builder.ToString();
 | 
			
		||||
 | 
			
		||||
            //try
 | 
			
		||||
            //{
 | 
			
		||||
            //    var result = new KristensenCssMinifier().Minify(builder.ToString(), false, Encoding.UTF8);
 | 
			
		||||
            if (enableMinification)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    var result = new KristensenCssMinifier().Minify(builder.ToString(), false, Encoding.UTF8);
 | 
			
		||||
 | 
			
		||||
            //    css = result.MinifiedContent;
 | 
			
		||||
            //}
 | 
			
		||||
            //catch (Exception ex)
 | 
			
		||||
            //{
 | 
			
		||||
            //    Logger.ErrorException("Error minifying css", ex);
 | 
			
		||||
            //}
 | 
			
		||||
                    if (result.Errors.Count > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        _logger.Error("Error minifying css: " + result.Errors[0].Message);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        css = result.MinifiedContent;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception ex)
 | 
			
		||||
                {
 | 
			
		||||
                    _logger.ErrorException("Error minifying css", ex);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(css));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -90,6 +90,9 @@
 | 
			
		||||
    <Content Include="dashboard-ui\css\images\server.png">
 | 
			
		||||
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
 | 
			
		||||
    </Content>
 | 
			
		||||
    <Content Include="dashboard-ui\css\images\splash.png">
 | 
			
		||||
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
 | 
			
		||||
    </Content>
 | 
			
		||||
    <Content Include="dashboard-ui\css\images\tour\dashboard\help.png">
 | 
			
		||||
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
 | 
			
		||||
    </Content>
 | 
			
		||||
@ -2152,11 +2155,6 @@
 | 
			
		||||
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
 | 
			
		||||
    </Content>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Content Include="dashboard-ui\css\images\supporter\donatepaypal.png">
 | 
			
		||||
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
 | 
			
		||||
    </Content>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Content Include="dashboard-ui\css\images\supporter\registerpaypal.png">
 | 
			
		||||
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user