Bladeren bron

#74 - Subtitle font

Luke Pulverenti 12 jaren geleden
bovenliggende
commit
cb6170712d

+ 0 - 7
MediaBrowser.Controller/IServerApplicationPaths.cs

@@ -76,13 +76,6 @@ namespace MediaBrowser.Controller
         /// <value>The FF MPEG stream cache path.</value>
         string EncodedMediaCachePath { get; }
 
-        /// <summary>
-        /// Gets the folder path to tools
-        /// </summary>
-        /// <value>The media tools path.</value>
-        string MediaToolsPath { get; }
-
-        /// <summary>
         /// Gets the downloaded images data path.
         /// </summary>
         /// <value>The downloaded images data path.</value>

+ 2 - 0
MediaBrowser.Controller/MediaBrowser.Controller.csproj

@@ -202,6 +202,8 @@
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource Include="MediaInfo\ffmpeg20130327.zip" />
+    <EmbeddedResource Include="MediaInfo\fonts\ARIALUNI.TTF" />
+    <EmbeddedResource Include="MediaInfo\fonts\fonts.conf" />
     <None Include="packages.config" />
   </ItemGroup>
   <ItemGroup>

+ 94 - 2
MediaBrowser.Controller/MediaInfo/FFMpegManager.cs

@@ -1,4 +1,5 @@
-using MediaBrowser.Common.IO;
+using System.Text;
+using MediaBrowser.Common.IO;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Model.Entities;
@@ -285,6 +286,32 @@ namespace MediaBrowser.Controller.MediaInfo
             }
         }
 
+        /// <summary>
+        /// The _media tools path
+        /// </summary>
+        private string _mediaToolsPath;
+        /// <summary>
+        /// Gets the folder path to tools
+        /// </summary>
+        /// <value>The media tools path.</value>
+        private string MediaToolsPath
+        {
+            get
+            {
+                if (_mediaToolsPath == null)
+                {
+                    _mediaToolsPath = Path.Combine(_appPaths.ProgramDataPath, "ffmpeg");
+
+                    if (!Directory.Exists(_mediaToolsPath))
+                    {
+                        Directory.CreateDirectory(_mediaToolsPath);
+                    }
+                }
+
+                return _mediaToolsPath;
+            }
+        }
+
         /// <summary>
         /// Gets the versioned directory path.
         /// </summary>
@@ -300,7 +327,7 @@ namespace MediaBrowser.Controller.MediaInfo
 
             var filename = resource.Substring(resource.IndexOf(prefix, StringComparison.OrdinalIgnoreCase) + prefix.Length);
 
-            var versionedDirectoryPath = Path.Combine(_appPaths.MediaToolsPath, Path.GetFileNameWithoutExtension(filename));
+            var versionedDirectoryPath = Path.Combine(MediaToolsPath, Path.GetFileNameWithoutExtension(filename));
 
             if (!Directory.Exists(versionedDirectoryPath))
             {
@@ -324,6 +351,71 @@ namespace MediaBrowser.Controller.MediaInfo
             {
                 _zipClient.ExtractAll(resourceStream, targetPath, false);
             }
+
+            ExtractFonts(assembly, targetPath);
+        }
+
+        /// <summary>
+        /// Extracts the fonts.
+        /// </summary>
+        /// <param name="assembly">The assembly.</param>
+        /// <param name="targetPath">The target path.</param>
+        private async void ExtractFonts(Assembly assembly, string targetPath)
+        {
+            var fontsDirectory = Path.Combine(targetPath, "fonts");
+
+            if (!Directory.Exists(fontsDirectory))
+            {
+                Directory.CreateDirectory(fontsDirectory);
+            }
+
+            const string fontFilename = "ARIALUNI.TTF";
+
+            var fontFile = Path.Combine(fontsDirectory, fontFilename);
+
+            if (!File.Exists(fontFile))
+            {
+                using (var stream = assembly.GetManifestResourceStream("MediaBrowser.Controller.MediaInfo.fonts." + fontFilename))
+                {
+                    using (var fileStream = new FileStream(fontFile, FileMode.Create, FileAccess.Write, FileShare.Read, StreamDefaults.DefaultFileStreamBufferSize, FileOptions.Asynchronous))
+                    {
+                        await stream.CopyToAsync(fileStream).ConfigureAwait(false);
+                    }
+                }
+            }
+
+            await ExtractFontConfigFile(assembly, fontsDirectory).ConfigureAwait(false);
+        }
+
+        /// <summary>
+        /// Extracts the font config file.
+        /// </summary>
+        /// <param name="assembly">The assembly.</param>
+        /// <param name="fontsDirectory">The fonts directory.</param>
+        private async Task ExtractFontConfigFile(Assembly assembly, string fontsDirectory)
+        {
+            const string fontConfigFilename = "fonts.conf";
+            var fontConfigFile = Path.Combine(fontsDirectory, fontConfigFilename);
+
+            if (!File.Exists(fontConfigFile))
+            {
+                using (var stream = assembly.GetManifestResourceStream("MediaBrowser.Controller.MediaInfo.fonts." + fontConfigFilename))
+                {
+                    using (var streamReader = new StreamReader(stream))
+                    {
+                        var contents = await streamReader.ReadToEndAsync().ConfigureAwait(false);
+
+                        contents = contents.Replace("<dir></dir>", "<dir>" + fontsDirectory + "</dir>");
+
+                        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);
+                        }
+                    }
+                }
+            }
         }
 
         /// <summary>

+ 9 - 0
MediaBrowser.Controller/MediaInfo/fonts/fonts.conf

@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<fontconfig>
+
+<dir></dir>
+  <alias>
+    <family>Arial</family>
+    <prefer>Arial Unicode MS</prefer>
+  </alias>
+</fontconfig>

+ 0 - 26
MediaBrowser.Server.Implementations/ServerApplicationPaths.cs

@@ -320,32 +320,6 @@ namespace MediaBrowser.Server.Implementations
             }
         }
 
-        /// <summary>
-        /// The _media tools path
-        /// </summary>
-        private string _mediaToolsPath;
-        /// <summary>
-        /// Gets the folder path to tools
-        /// </summary>
-        /// <value>The media tools path.</value>
-        public string MediaToolsPath
-        {
-            get
-            {
-                if (_mediaToolsPath == null)
-                {
-                    _mediaToolsPath = Path.Combine(ProgramDataPath, "MediaTools");
-
-                    if (!Directory.Exists(_mediaToolsPath))
-                    {
-                        Directory.CreateDirectory(_mediaToolsPath);
-                    }
-                }
-
-                return _mediaToolsPath;
-            }
-        }
-
         /// <summary>
         /// The _images data path
         /// </summary>