Просмотр исходного кода

Merge pull request #2966 from jellyfin/serve-web

Remove several deprecated utilities in the web package
Bond-009 5 лет назад
Родитель
Сommit
02624c9df8

+ 7 - 148
MediaBrowser.WebDashboard/Api/DashboardService.cs

@@ -52,12 +52,6 @@ namespace MediaBrowser.WebDashboard.Api
         public string Name { get; set; }
     }
 
-    [Route("/web/Package", "GET", IsHidden = true)]
-    public class GetDashboardPackage
-    {
-        public string Mode { get; set; }
-    }
-
     [Route("/robots.txt", "GET", IsHidden = true)]
     public class GetRobotsTxt
     {
@@ -225,7 +219,7 @@ namespace MediaBrowser.WebDashboard.Api
                     return _resultFactory.GetStaticResult(Request, plugin.Version.ToString().GetMD5(), null, null, MimeTypes.GetMimeType("page.html"), () => Task.FromResult(stream));
                 }
 
-                return _resultFactory.GetStaticResult(Request, plugin.Version.ToString().GetMD5(), null, null, MimeTypes.GetMimeType("page.html"), () => PackageCreator.ModifyHtml(false, stream, null, _appHost.ApplicationVersionString, null));
+                return _resultFactory.GetStaticResult(Request, plugin.Version.ToString().GetMD5(), null, null, MimeTypes.GetMimeType("page.html"), () => Task.FromResult(stream));
             }
 
             throw new ResourceNotFoundException();
@@ -328,154 +322,19 @@ namespace MediaBrowser.WebDashboard.Api
                 throw new ResourceNotFoundException();
             }
 
-            var path = request.ResourceName;
-
-            var contentType = MimeTypes.GetMimeType(path);
+            var path = request?.ResourceName;
             var basePath = DashboardUIPath;
 
             // Bounce them to the startup wizard if it hasn't been completed yet
-            if (!_serverConfigurationManager.Configuration.IsStartupWizardCompleted &&
-                Request.RawUrl.IndexOf("wizard", StringComparison.OrdinalIgnoreCase) == -1 &&
-                PackageCreator.IsCoreHtml(path))
-            {
-                // But don't redirect if an html import is being requested.
-                if (path.IndexOf("bower_components", StringComparison.OrdinalIgnoreCase) == -1)
-                {
-                    Request.Response.Redirect("index.html?start=wizard#!/wizardstart.html");
-                    return null;
-                }
-            }
-
-            var localizationCulture = GetLocalizationCulture();
-
-            // Don't cache if not configured to do so
-            // But always cache images to simulate production
-            if (!_serverConfigurationManager.Configuration.EnableDashboardResponseCaching &&
-                !contentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase) &&
-                !contentType.StartsWith("font/", StringComparison.OrdinalIgnoreCase))
-            {
-                var stream = await GetResourceStream(basePath, path, localizationCulture).ConfigureAwait(false);
-                return _resultFactory.GetResult(Request, stream, contentType);
-            }
-
-            TimeSpan? cacheDuration = null;
-
-            // Cache images unconditionally - updates to image files will require new filename
-            // If there's a version number in the query string we can cache this unconditionally
-            if (contentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase) || contentType.StartsWith("font/", StringComparison.OrdinalIgnoreCase) || !string.IsNullOrEmpty(request.V))
+            if (!_serverConfigurationManager.Configuration.IsStartupWizardCompleted
+                && !Request.RawUrl.Contains("wizard", StringComparison.OrdinalIgnoreCase)
+                && Request.RawUrl.Contains("index", StringComparison.OrdinalIgnoreCase))
             {
-                cacheDuration = TimeSpan.FromDays(365);
-            }
-
-            var cacheKey = (_appHost.ApplicationVersionString + (localizationCulture ?? string.Empty) + path).GetMD5();
-
-            // html gets modified on the fly
-            if (contentType.StartsWith("text/html", StringComparison.OrdinalIgnoreCase))
-            {
-                return await _resultFactory.GetStaticResult(Request, cacheKey, null, cacheDuration, contentType, () => GetResourceStream(basePath, path, localizationCulture)).ConfigureAwait(false);
+                Request.Response.Redirect("index.html?start=wizard#!/wizardstart.html");
+                return null;
             }
 
             return await _resultFactory.GetStaticFileResult(Request, _resourceFileManager.GetResourcePath(basePath, path)).ConfigureAwait(false);
         }
-
-        private string GetLocalizationCulture()
-        {
-            return _serverConfigurationManager.Configuration.UICulture;
-        }
-
-        /// <summary>
-        /// Gets the resource stream.
-        /// </summary>
-        private Task<Stream> GetResourceStream(string basePath, string virtualPath, string localizationCulture)
-        {
-            return GetPackageCreator(basePath)
-                .GetResource(virtualPath, null, localizationCulture, _appHost.ApplicationVersionString);
-        }
-
-        private PackageCreator GetPackageCreator(string basePath)
-        {
-            return new PackageCreator(basePath, _resourceFileManager);
-        }
-
-        public async Task<object> Get(GetDashboardPackage request)
-        {
-            if (!_appConfig.HostWebClient() || DashboardUIPath == null)
-            {
-                throw new ResourceNotFoundException();
-            }
-
-            var mode = request.Mode;
-
-            var inputPath = string.IsNullOrWhiteSpace(mode) ?
-                DashboardUIPath
-                : "C:\\dev\\emby-web-mobile-master\\dist";
-
-            var targetPath = !string.IsNullOrWhiteSpace(mode) ?
-                inputPath
-                : "C:\\dev\\emby-web-mobile\\src";
-
-            var packageCreator = GetPackageCreator(inputPath);
-
-            if (!string.Equals(inputPath, targetPath, StringComparison.OrdinalIgnoreCase))
-            {
-                try
-                {
-                    Directory.Delete(targetPath, true);
-                }
-                catch (IOException ex)
-                {
-                    _logger.LogError(ex, "Error deleting {Path}", targetPath);
-                }
-
-                CopyDirectory(inputPath, targetPath);
-            }
-
-            var appVersion = _appHost.ApplicationVersionString;
-
-            await DumpHtml(packageCreator, inputPath, targetPath, mode, appVersion).ConfigureAwait(false);
-
-            return string.Empty;
-        }
-
-        private async Task DumpHtml(PackageCreator packageCreator, string source, string destination, string mode, string appVersion)
-        {
-            foreach (var file in _fileSystem.GetFiles(source))
-            {
-                var filename = file.Name;
-
-                if (!string.Equals(file.Extension, ".html", StringComparison.OrdinalIgnoreCase))
-                {
-                    continue;
-                }
-
-                await DumpFile(packageCreator, filename, Path.Combine(destination, filename), mode, appVersion).ConfigureAwait(false);
-            }
-        }
-
-        private async Task DumpFile(PackageCreator packageCreator, string resourceVirtualPath, string destinationFilePath, string mode, string appVersion)
-        {
-            using (var stream = await packageCreator.GetResource(resourceVirtualPath, mode, null, appVersion).ConfigureAwait(false))
-            using (var fs = new FileStream(destinationFilePath, FileMode.Create, FileAccess.Write, FileShare.Read))
-            {
-                await stream.CopyToAsync(fs).ConfigureAwait(false);
-            }
-        }
-
-        private void CopyDirectory(string source, string destination)
-        {
-            Directory.CreateDirectory(destination);
-
-            // Now Create all of the directories
-            foreach (var dirPath in _fileSystem.GetDirectories(source, true))
-            {
-                Directory.CreateDirectory(dirPath.FullName.Replace(source, destination, StringComparison.Ordinal));
-            }
-
-            // Copy all the files & Replaces any files with the same name
-            foreach (var newPath in _fileSystem.GetFiles(source, true))
-            {
-                File.Copy(newPath.FullName, newPath.FullName.Replace(source, destination, StringComparison.Ordinal), true);
-            }
-        }
     }
 }

+ 0 - 161
MediaBrowser.WebDashboard/Api/PackageCreator.cs

@@ -1,161 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Globalization;
-using System.IO;
-using System.Text;
-using System.Threading.Tasks;
-using MediaBrowser.Controller;
-
-namespace MediaBrowser.WebDashboard.Api
-{
-    public class PackageCreator
-    {
-        private readonly string _basePath;
-        private readonly IResourceFileManager _resourceFileManager;
-
-        public PackageCreator(string basePath, IResourceFileManager resourceFileManager)
-        {
-            _basePath = basePath;
-            _resourceFileManager = resourceFileManager;
-        }
-
-        public async Task<Stream> GetResource(
-            string virtualPath,
-            string mode,
-            string localizationCulture,
-            string appVersion)
-        {
-            var resourcePath = _resourceFileManager.GetResourcePath(_basePath, virtualPath);
-            Stream resourceStream = File.OpenRead(resourcePath);
-
-            if (resourceStream != null && IsCoreHtml(virtualPath))
-            {
-                bool isMainIndexPage = string.Equals(virtualPath, "index.html", StringComparison.OrdinalIgnoreCase);
-                resourceStream = await ModifyHtml(isMainIndexPage, resourceStream, mode, appVersion, localizationCulture).ConfigureAwait(false);
-            }
-
-            return resourceStream;
-        }
-
-        public static bool IsCoreHtml(string path)
-        {
-            if (path.IndexOf(".template.html", StringComparison.OrdinalIgnoreCase) != -1)
-            {
-                return false;
-            }
-
-            return string.Equals(Path.GetExtension(path), ".html", StringComparison.OrdinalIgnoreCase);
-        }
-
-        /// <summary>
-        /// Modifies the source HTML stream by adding common meta tags, css and js.
-        /// </summary>
-        /// <param name="isMainIndexPage">True if the stream contains content for the main index page.</param>
-        /// <param name="sourceStream">The stream whose content should be modified.</param>
-        /// <param name="mode">The client mode ('cordova', 'android', etc).</param>
-        /// <param name="appVersion">The application version.</param>
-        /// <param name="localizationCulture">The localization culture.</param>
-        /// <returns>
-        /// A task that represents the async operation to read and modify the input stream.
-        /// The task result contains a stream containing the modified HTML content.
-        /// </returns>
-        public static async Task<Stream> ModifyHtml(
-            bool isMainIndexPage,
-            Stream sourceStream,
-            string mode,
-            string appVersion,
-            string localizationCulture)
-        {
-            string html;
-            using (var reader = new StreamReader(sourceStream, Encoding.UTF8))
-            {
-                html = await reader.ReadToEndAsync().ConfigureAwait(false);
-            }
-
-            if (isMainIndexPage && !string.IsNullOrWhiteSpace(localizationCulture))
-            {
-                var lang = localizationCulture.Split('-')[0];
-
-                html = html.Replace("<html", "<html data-culture=\"" + localizationCulture + "\" lang=\"" + lang + "\"", StringComparison.Ordinal);
-            }
-
-            if (isMainIndexPage)
-            {
-                html = html.Replace("<head>", "<head>" + GetMetaTags(mode), StringComparison.Ordinal);
-            }
-
-            // Disable embedded scripts from plugins. We'll run them later once resources have loaded
-            if (html.IndexOf("<script", StringComparison.OrdinalIgnoreCase) != -1)
-            {
-                html = html.Replace("<script", "<!--<script", StringComparison.Ordinal);
-                html = html.Replace("</script>", "</script>-->", StringComparison.Ordinal);
-            }
-
-            if (isMainIndexPage)
-            {
-                html = html.Replace("</body>", GetCommonJavascript(mode, appVersion) + "</body>", StringComparison.Ordinal);
-            }
-
-            var bytes = Encoding.UTF8.GetBytes(html);
-
-            return new MemoryStream(bytes);
-        }
-
-        /// <summary>
-        /// Gets the meta tags.
-        /// </summary>
-        /// <returns>System.String.</returns>
-        private static string GetMetaTags(string mode)
-        {
-            var sb = new StringBuilder();
-
-            if (string.Equals(mode, "cordova", StringComparison.OrdinalIgnoreCase)
-                || string.Equals(mode, "android", StringComparison.OrdinalIgnoreCase))
-            {
-                sb.Append("<meta http-equiv=\"Content-Security-Policy\" content=\"default-src * 'self' 'unsafe-inline' 'unsafe-eval' data: gap: file: filesystem: ws: wss:;\">");
-            }
-
-            return sb.ToString();
-        }
-
-        /// <summary>
-        /// Gets the common javascript.
-        /// </summary>
-        /// <param name="mode">The mode.</param>
-        /// <param name="version">The version.</param>
-        /// <returns>System.String.</returns>
-        private static string GetCommonJavascript(string mode, string version)
-        {
-            var builder = new StringBuilder();
-
-            builder.Append("<script>");
-            if (!string.IsNullOrWhiteSpace(mode))
-            {
-                builder.AppendFormat(CultureInfo.InvariantCulture, "window.appMode='{0}';", mode);
-            }
-            else
-            {
-                builder.AppendFormat(CultureInfo.InvariantCulture, "window.dashboardVersion='{0}';", version);
-            }
-
-            builder.Append("</script>");
-
-            if (string.Equals(mode, "cordova", StringComparison.OrdinalIgnoreCase))
-            {
-                builder.Append("<script src=\"cordova.js\" defer></script>");
-            }
-
-            builder.Append("<script src=\"scripts/apploader.js");
-            if (!string.IsNullOrWhiteSpace(version))
-            {
-                builder.Append("?v=");
-                builder.Append(version);
-            }
-
-            builder.Append("\" defer></script>");
-
-            return builder.ToString();
-        }
-    }
-}