#region Copyright // /************************************************************************ // Copyright (c) 2016 Jamie Rees // File: BaseUrlHelper.cs // Created By: Jamie Rees // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to // permit persons to whom the Software is furnished to do so, subject to // the following conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // ************************************************************************/ #endregion using System.Collections.Generic; using System.Text; using Nancy; using Nancy.ViewEngines.Razor; using Ombi.Core; using Ombi.Core.SettingModels; using Ombi.Helpers; namespace Ombi.UI.Helpers { public static class BaseUrlHelper { static BaseUrlHelper() { Locator = ServiceLocator.Instance; Cache = Locator.Resolve(); } private static ICacheProvider Cache { get; } private static ServiceLocator Locator { get; } private static string _Assembly; // We don't need to call the AssemblyHelper every time, the value will never change in the application life cycle. private static string Assembly { get { if (string.IsNullOrEmpty(_Assembly)) { _Assembly = AssemblyHelper.GetProductVersion(); } return _Assembly; } } public static IHtmlString LoadAssets(this HtmlHelpers helper) { var sb = new StringBuilder(); var assetLocation = GetBaseUrl(); var content = GetContentUrl(assetLocation); var settings = GetCustomizationSettings(); if (string.IsNullOrEmpty(settings.ThemeName)) { settings.ThemeName = Themes.PlexTheme; } if (settings.ThemeName == "PlexBootstrap.css") settings.ThemeName = Themes.PlexTheme; if (settings.ThemeName == "OriginalBootstrap.css") settings.ThemeName = Themes.OriginalTheme; var startUrl = $"{content}/Content"; var styleAssets = new List { $"", $"", //$"", $"", $"", $"", $"", }; var scriptAssets = new List { $"", $"", $"", $"", $"", $"", $"", $"", $"" }; foreach (var a in styleAssets) { sb.AppendLine(a); } foreach (var a in scriptAssets) { sb.AppendLine(a); } return helper.Raw(sb.ToString()); } public static IHtmlString LoadDateTimePickerAsset(this HtmlHelpers helper) { var assetLocation = GetBaseUrl(); var content = GetContentUrl(assetLocation); var startUrl = $"{content}/Content"; var sb = new StringBuilder(); sb.AppendLine($""); sb.AppendLine($""); return helper.Raw(sb.ToString()); } public static IHtmlString LoadAngularAssets(this HtmlHelpers helper) { var sb = new StringBuilder(); var assetLocation = GetBaseUrl(); var content = GetContentUrl(assetLocation); var startUrl = $"{content}/Content"; sb.AppendLine($""); // Load angular first sb.AppendLine($""); return helper.Raw(sb.ToString()); } public static IHtmlString LoadSearchAssets(this HtmlHelpers helper) { var sb = new StringBuilder(); var assetLocation = GetBaseUrl(); var content = GetContentUrl(assetLocation); sb.AppendLine($""); return helper.Raw(sb.ToString()); } public static IHtmlString LoadSettingsAssets(this HtmlHelpers helper) { var sb = new StringBuilder(); var assetLocation = GetBaseUrl(); var content = GetContentUrl(assetLocation); sb.AppendLine($""); sb.AppendLine($""); sb.AppendLine($""); return helper.Raw(sb.ToString()); } public static IHtmlString LoadRequestAssets(this HtmlHelpers helper) { var sb = new StringBuilder(); var assetLocation = GetBaseUrl(); var content = GetContentUrl(assetLocation); sb.AppendLine($""); return helper.Raw(sb.ToString()); } public static IHtmlString LoadIssueAssets(this HtmlHelpers helper) { var sb = new StringBuilder(); var assetLocation = GetBaseUrl(); var content = GetContentUrl(assetLocation); sb.AppendLine($""); return helper.Raw(sb.ToString()); } public static IHtmlString LoadWizardAssets(this HtmlHelpers helper) { var sb = new StringBuilder(); var assetLocation = GetBaseUrl(); var content = GetContentUrl(assetLocation); sb.AppendLine($""); return helper.Raw(sb.ToString()); } public static IHtmlString LoadIssueDetailsAssets(this HtmlHelpers helper) { var assetLocation = GetBaseUrl(); var content = GetContentUrl(assetLocation); var asset = $""; return helper.Raw(asset); } public static IHtmlString LoadUserManagementAssets(this HtmlHelpers helper) { var assetLocation = GetBaseUrl(); var content = GetContentUrl(assetLocation); var sb = new StringBuilder(); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); return helper.Raw(sb.ToString()); } public static IHtmlString LoadAsset(this HtmlHelpers helper, string contentPath, bool javascript) { var assetLocation = GetBaseUrl(); var content = GetContentUrl(assetLocation); if (javascript) { return helper.Raw($""); } return helper.Raw($""); } public static IHtmlString LoadTableAssets(this HtmlHelpers helper) { var sb = new StringBuilder(); var assetLocation = GetBaseUrl(); var content = GetContentUrl(assetLocation); sb.AppendLine($""); sb.AppendLine($""); return helper.Raw(sb.ToString()); } public static IHtmlString LoadAnalytics(this HtmlHelpers helper) { var settings = GetSettings(); if (!settings.CollectAnalyticData) { return helper.Raw(string.Empty); } var assetLocation = GetBaseUrl(); var content = GetContentUrl(assetLocation); var asset = $""; return helper.Raw(asset); } public static IHtmlString LoadFavIcon(this HtmlHelpers helper) { var settings = GetSettings(); if (!settings.CollectAnalyticData) { return helper.Raw(string.Empty); } var assetLocation = GetBaseUrl(); var content = GetContentUrl(assetLocation); var asset = $""; asset += $""; return helper.Raw(asset); } public static IHtmlString GetSidebarUrl(this HtmlHelpers helper, NancyContext context, string url, string title, string icon = null) { var content = GetLinkUrl(GetBaseUrl()); if (!string.IsNullOrEmpty(content)) { url = $"/{content}{url}"; } var iconHtml = string.IsNullOrEmpty(icon) ? "" : $""; var returnString = context.Request.Path == url ? $"{title} {iconHtml}" : $"{title} {iconHtml}"; return helper.Raw(returnString); } public static IHtmlString GetNavbarUrl(this HtmlHelpers helper, NancyContext context, string url, string title, string fontIcon) { var content = GetLinkUrl(GetBaseUrl()); if (!string.IsNullOrEmpty(content)) { url = $"/{content}{url}"; } var returnString = context.Request.Path == url ? $"
  • {title}
  • " : $"
  • {title}
  • "; return helper.Raw(returnString); } public static IHtmlString GetNavbarUrl(this HtmlHelpers helper, NancyContext context, string url, string title, string fontIcon, string extraHtml) { var content = GetLinkUrl(GetBaseUrl()); if (!string.IsNullOrEmpty(content)) { url = $"/{content}{url}"; } if (url.Contains("issues")) { var custom = GetCustomizationSettings(); if (!custom.EnableIssues) { return helper.Raw(string.Empty); } } var returnString = context.Request.Path == url ? $"
  • {title} {extraHtml}
  • " : $"
  • {title} {extraHtml}
  • "; return helper.Raw(returnString); } public static IHtmlString GetBaseUrl(this HtmlHelpers helper) { return helper.Raw(GetBaseUrl()); } public static IHtmlString GetApplicationName(this HtmlHelpers helper) { return helper.Raw(GetCustomizationSettings().ApplicationName); } public static IHtmlString GetMediaServerName(this HtmlHelpers helper) { var s = GetEmbySettings(); return helper.Raw(s.Enable ? "Emby" : "Plex"); } private static string GetBaseUrl() { return GetSettings().BaseUrl; } private static PlexRequestSettings GetSettings() { var returnValue = Cache.GetOrSet(CacheKeys.GetPlexRequestSettings, () => { var settings = Locator.Resolve>().GetSettings(); return settings; }); return returnValue; } private static CustomizationSettings GetCustomizationSettings() { var returnValue = Cache.GetOrSet(CacheKeys.GetCustomizationSettings, () => { var settings = Locator.Resolve>().GetSettings(); return settings; }); return returnValue; } private static EmbySettings GetEmbySettings() { var returnValue = Cache.GetOrSet(CacheKeys.GetEmbySettings, () => { var settings = Locator.Resolve>().GetSettings(); return settings; }); return returnValue; } private static string GetLinkUrl(string assetLocation) { return string.IsNullOrEmpty(assetLocation) ? string.Empty : $"{assetLocation}"; } private static string GetContentUrl(string assetLocation) { return string.IsNullOrEmpty(assetLocation) ? string.Empty : $"/{assetLocation}"; } } }