TimingScriptManager.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System;
  2. using System.Globalization;
  3. using System.Text;
  4. using System.Threading.Tasks;
  5. using Abp.Configuration;
  6. using Abp.Dependency;
  7. using Abp.Extensions;
  8. using Abp.Timing;
  9. using Abp.Timing.Timezone;
  10. namespace Abp.Web.Timing
  11. {
  12. /// <summary>
  13. /// This class is used to build timing script.
  14. /// </summary>
  15. public class TimingScriptManager : ITimingScriptManager, ITransientDependency
  16. {
  17. private readonly ISettingManager _settingManager;
  18. public TimingScriptManager(ISettingManager settingManager)
  19. {
  20. _settingManager = settingManager;
  21. }
  22. public async Task<string> GetScriptAsync()
  23. {
  24. var script = new StringBuilder();
  25. script.AppendLine("(function(){");
  26. script.AppendLine(" abp.clock.provider = abp.timing." + Clock.Provider.GetType().Name.ToCamelCase() + " || abp.timing.localClockProvider;");
  27. script.AppendLine(" abp.clock.provider.supportsMultipleTimezone = " + Clock.SupportsMultipleTimezone.ToString().ToLowerInvariant() + ";");
  28. if (Clock.SupportsMultipleTimezone)
  29. {
  30. script.AppendLine(" abp.timing.timeZoneInfo = " + await GetUsersTimezoneScriptsAsync());
  31. }
  32. script.Append("})();");
  33. return script.ToString();
  34. }
  35. private async Task<string> GetUsersTimezoneScriptsAsync()
  36. {
  37. var timezoneId = await _settingManager.GetSettingValueAsync(TimingSettingNames.TimeZone);
  38. var timezone = TimezoneHelper.FindTimeZoneInfo(timezoneId);
  39. return " {" +
  40. " windows: {" +
  41. " timeZoneId: '" + timezoneId + "'," +
  42. " baseUtcOffsetInMilliseconds: '" + timezone.BaseUtcOffset.TotalMilliseconds + "'," +
  43. " currentUtcOffsetInMilliseconds: '" + timezone.GetUtcOffset(Clock.Now).TotalMilliseconds + "'," +
  44. " isDaylightSavingTimeNow: '" + timezone.IsDaylightSavingTime(Clock.Now) + "'" +
  45. " }," +
  46. " iana: {" +
  47. " timeZoneId:'" + TimezoneHelper.WindowsToIana(timezoneId) + "'" +
  48. " }," +
  49. " }";
  50. }
  51. }
  52. }