From c2c38851603d29cf7504edf3d116fb159f1f8ecb Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 23 Aug 2013 19:22:13 -0400 Subject: [PATCH] removed ffmpeg fonts from solution --- ...MediaBrowser.Server.Implementations.csproj | 2 - .../MediaEncoder/MediaEncoder.cs | 71 +++++++++---------- .../MediaEncoder/fonts/fonts.conf | 9 --- .../ApplicationHost.cs | 2 +- 4 files changed, 34 insertions(+), 50 deletions(-) delete mode 100644 MediaBrowser.Server.Implementations/MediaEncoder/fonts/fonts.conf diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index d408e082ac..4991db8e2d 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -230,8 +230,6 @@ - - diff --git a/MediaBrowser.Server.Implementations/MediaEncoder/MediaEncoder.cs b/MediaBrowser.Server.Implementations/MediaEncoder/MediaEncoder.cs index f5b5ea6c07..6c2e9606a1 100644 --- a/MediaBrowser.Server.Implementations/MediaEncoder/MediaEncoder.cs +++ b/MediaBrowser.Server.Implementations/MediaEncoder/MediaEncoder.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Common.IO; using MediaBrowser.Common.MediaInfo; +using MediaBrowser.Common.Net; using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; @@ -47,6 +48,8 @@ namespace MediaBrowser.Server.Implementations.MediaEncoder /// The json serializer. private readonly IJsonSerializer _jsonSerializer; + private readonly IHttpClient _httpClient; + /// /// The video image resource pool /// @@ -81,12 +84,13 @@ namespace MediaBrowser.Server.Implementations.MediaEncoder /// The app paths. /// The json serializer. public MediaEncoder(ILogger logger, IZipClient zipClient, IApplicationPaths appPaths, - IJsonSerializer jsonSerializer) + IJsonSerializer jsonSerializer, IHttpClient httpClient) { _logger = logger; _zipClient = zipClient; _appPaths = appPaths; _jsonSerializer = jsonSerializer; + _httpClient = httpClient; // Not crazy about this but it's the only way to suppress ffmpeg crash dialog boxes SetErrorMode(ErrorModes.SEM_FAILCRITICALERRORS | ErrorModes.SEM_NOALIGNMENTFAULTEXCEPT | @@ -201,15 +205,16 @@ namespace MediaBrowser.Server.Implementations.MediaEncoder _zipClient.ExtractAll(resourceStream, targetPath, false); } - ExtractFonts(assembly, targetPath); + ExtractFonts(targetPath); } + private const string FontUrl = "https://www.dropbox.com/s/9nb76tybcsw5xrk/ARIALUNI.zip?dl=1"; + /// /// Extracts the fonts. /// - /// The assembly. /// The target path. - private async void ExtractFonts(Assembly assembly, string targetPath) + private async void ExtractFonts(string targetPath) { var fontsDirectory = Path.Combine(targetPath, "fonts"); @@ -224,54 +229,44 @@ namespace MediaBrowser.Server.Implementations.MediaEncoder if (!File.Exists(fontFile)) { - using (var stream = assembly.GetManifestResourceStream(GetType().Namespace + ".fonts." + fontFilename)) + var tempFile = await _httpClient.GetTempFile(new HttpRequestOptions { - using ( - var fileStream = new FileStream(fontFile, FileMode.Create, FileAccess.Write, FileShare.Read, - StreamDefaults.DefaultFileStreamBufferSize, - FileOptions.Asynchronous)) - { - await stream.CopyToAsync(fileStream).ConfigureAwait(false); - } + Url = FontUrl, + Progress = new Progress() + }); + + _zipClient.ExtractAll(tempFile, fontsDirectory, true); + + try + { + File.Delete(tempFile); + } + catch (IOException ex) + { + // Log this, but don't let it fail the operation + _logger.ErrorException("Error deleting temp file {0}", ex, tempFile); } } - await ExtractFontConfigFile(assembly, fontsDirectory).ConfigureAwait(false); + await WriteFontConfigFile(fontsDirectory).ConfigureAwait(false); } - /// - /// Extracts the font config file. - /// - /// The assembly. - /// The fonts directory. - /// Task. - private async Task ExtractFontConfigFile(Assembly assembly, string fontsDirectory) + private async Task WriteFontConfigFile(string fontsDirectory) { const string fontConfigFilename = "fonts.conf"; var fontConfigFile = Path.Combine(fontsDirectory, fontConfigFilename); if (!File.Exists(fontConfigFile)) { - using ( - var stream = assembly.GetManifestResourceStream(GetType().Namespace + ".fonts." + fontConfigFilename) - ) - { - using (var streamReader = new StreamReader(stream)) - { - var contents = await streamReader.ReadToEndAsync().ConfigureAwait(false); + var contents = string.Format("{0}ArialArial Unicode MS", fontsDirectory); - contents = contents.Replace("", "" + fontsDirectory + ""); + var bytes = Encoding.UTF8.GetBytes(contents); - var bytes = Encoding.UTF8.GetBytes(contents); - - using ( - var fileStream = new FileStream(fontConfigFile, FileMode.Create, FileAccess.Write, - FileShare.Read, StreamDefaults.DefaultFileStreamBufferSize, - FileOptions.Asynchronous)) - { - await fileStream.WriteAsync(bytes, 0, bytes.Length); - } - } + using (var fileStream = new FileStream(fontConfigFile, FileMode.Create, FileAccess.Write, + FileShare.Read, StreamDefaults.DefaultFileStreamBufferSize, + FileOptions.Asynchronous)) + { + await fileStream.WriteAsync(bytes, 0, bytes.Length); } } } diff --git a/MediaBrowser.Server.Implementations/MediaEncoder/fonts/fonts.conf b/MediaBrowser.Server.Implementations/MediaEncoder/fonts/fonts.conf deleted file mode 100644 index 648bdb7b28..0000000000 --- a/MediaBrowser.Server.Implementations/MediaEncoder/fonts/fonts.conf +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Arial - Arial Unicode MS - - \ No newline at end of file diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 099b9a3dfb..eb8a730496 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -272,7 +272,7 @@ namespace MediaBrowser.ServerApplication RegisterSingleInstance(() => new LuceneSearchEngine(ApplicationPaths, LogManager, LibraryManager)); - MediaEncoder = new MediaEncoder(LogManager.GetLogger("MediaEncoder"), ZipClient, ApplicationPaths, JsonSerializer); + MediaEncoder = new MediaEncoder(LogManager.GetLogger("MediaEncoder"), ZipClient, ApplicationPaths, JsonSerializer, HttpClient); RegisterSingleInstance(MediaEncoder); var clientConnectionManager = new SessionManager(UserDataRepository, ServerConfigurationManager, Logger, UserRepository);