diff --git a/src/Orchard.Web/Modules/Orchard.Warmup/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.Warmup/Controllers/AdminController.cs index 0e8ddbea8..76df64708 100644 --- a/src/Orchard.Web/Modules/Orchard.Warmup/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Warmup/Controllers/AdminController.cs @@ -1,6 +1,14 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using System.Web; using System.Web.Mvc; using Orchard.ContentManagement; using Orchard.Core.Contents.Controllers; +using Orchard.Environment.Warmup; +using Orchard.FileSystems.AppData; using Orchard.Localization; using Orchard.Security; using Orchard.Warmup.Models; @@ -10,9 +18,14 @@ using Orchard.Warmup.Services; namespace Orchard.Warmup.Controllers { public class AdminController : Controller, IUpdateModel { private readonly IWarmupScheduler _warmupScheduler; + private readonly IAppDataFolder _appDataFolder; - public AdminController(IOrchardServices services, IWarmupScheduler warmupScheduler) { + public AdminController( + IOrchardServices services, + IWarmupScheduler warmupScheduler, + IAppDataFolder appDataFolder) { _warmupScheduler = warmupScheduler; + _appDataFolder = appDataFolder; Services = services; T = NullLocalizer.Instance; @@ -63,6 +76,83 @@ namespace Orchard.Warmup.Controllers { return result; } + + [FormValueRequired("submit.Extract")] + [HttpPost, ActionName("Index")] + public ActionResult IndexPostExtract() { + var baseUrl = Services.WorkContext.CurrentSite.BaseUrl; + baseUrl = VirtualPathUtility.AppendTrailingSlash(baseUrl); + + var part = Services.WorkContext.CurrentSite.As(); + + if (String.IsNullOrWhiteSpace(baseUrl) || String.IsNullOrWhiteSpace(part.Urls)) { + return RedirectToAction("Index"); + } + + var regex = new Regex(@"]*href=""(?[^""]*\.css)""|]*src=""(?[^""]*\.js)""", RegexOptions.IgnoreCase); + var resources = new List(); + + // add the already registered urls to remove duplicates + using (var urlReader = new StringReader(part.Urls)) { + string relativeUrl; + while (null != (relativeUrl = urlReader.ReadLine())) { + if (String.IsNullOrWhiteSpace(relativeUrl)) { + continue; + } + + relativeUrl = relativeUrl.Trim(); + resources.Add(relativeUrl); + + try { + var contentUrl = VirtualPathUtility.RemoveTrailingSlash(baseUrl) + relativeUrl; + var filename = WarmupUtility.EncodeUrl(contentUrl.TrimEnd('/')); + var path = _appDataFolder.Combine("Warmup", filename); + + if(!_appDataFolder.FileExists(path)) { + continue; + } + + var content = _appDataFolder.ReadFile(path); + + // process only html files + if (!content.Contains(" x.ToLowerInvariant()).Select(x => x.First()).ToArray(); + part.Urls = String.Join(System.Environment.NewLine, uniqueResources); + + return RedirectToAction("Index"); + } + bool IUpdateModel.TryUpdateModel(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) { return TryUpdateModel(model, prefix, includeProperties, excludeProperties); } diff --git a/src/Orchard.Web/Modules/Orchard.Warmup/Views/Admin/Index.cshtml b/src/Orchard.Web/Modules/Orchard.Warmup/Views/Admin/Index.cshtml index a0d0fd5bd..bc77e781c 100644 --- a/src/Orchard.Web/Modules/Orchard.Warmup/Views/Admin/Index.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Warmup/Views/Admin/Index.cshtml @@ -33,5 +33,6 @@
+
}