VersionCheckManager.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. using FISLib.Connect;
  2. using FISLib.Upgrade;
  3. using System;
  4. using System.IO;
  5. using System.Reflection;
  6. using System.Threading;
  7. using Vinno.FIS.Sonopost.Common;
  8. using Vinno.FIS.Sonopost.Features.Oled;
  9. using Vinno.FIS.Sonopost.Helpers;
  10. using Vinno.FIS.Sonopost.Managers.Interfaces;
  11. using Vinno.FIS.Sonopost.Settings;
  12. using Vinno.IUS.Common.Log;
  13. namespace Vinno.FIS.Sonopost.Managers
  14. {
  15. internal class VersionCheckManager : SonopostManager, IVersionCheckManager
  16. {
  17. private static string _currentVersion;
  18. private readonly ILoginManager _loginManager;
  19. private readonly IUpgraderService _fisUpgraderService;
  20. private string _packagePath;
  21. private string _packageName = "Sonopost_Windows_UpgradePackage.zip";
  22. private string _packageFullPath;
  23. private int _autoUpdateTime;
  24. private bool _needAutoUpdate;
  25. private bool _inited;
  26. private Timer _timer;
  27. public VersionCheckManager()
  28. {
  29. _needAutoUpdate = SonopostSystemSettings.Instance.UpdateSetting.NeedAutoUpdate;
  30. _autoUpdateTime = SonopostSystemSettings.Instance.UpdateSetting.AutoUpdateTime;
  31. _fisUpgraderService = AppManager.Instance.GetManager<IFISManager>().FISUpgraderService;
  32. _fisUpgraderService.DownloadProgressChanged += OnDonwloadProgressChanged;
  33. _loginManager = AppManager.Instance.GetManager<ILoginManager>();
  34. _loginManager.LoginStatusChanged += OnLoginStatusChanged;
  35. _packagePath = Path.Combine(SonopostConstants.DataFolder, "AutoUpdatePackage");
  36. _packageFullPath = Path.Combine(_packagePath, _packageName);
  37. }
  38. private void OnDonwloadProgressChanged(object sender, double e)
  39. {
  40. if (e <= 1)
  41. {
  42. Logger.WriteLineInfo($"Version Check Manager DonwloadProgressChanged: {e}");
  43. }
  44. else if (e == 2)
  45. {
  46. if (File.Exists(_packageFullPath))
  47. {
  48. UpgraderApplication(_packageFullPath);
  49. SetTaskAtFixedTime();
  50. }
  51. else
  52. {
  53. Logger.WriteLineError("New Version Download Failed!Will Download Next Time");
  54. SetTaskAtFixedTime();
  55. }
  56. }
  57. else if (e == 3)
  58. {
  59. Logger.WriteLineError("New Version Download Cancelled!Will Download Next Time");
  60. SetTaskAtFixedTime();
  61. }
  62. else if (e == 4)
  63. {
  64. Logger.WriteLineInfo("No New Version found!");
  65. SetTaskAtFixedTime();
  66. }
  67. }
  68. private void CheckVersion()
  69. {
  70. if (!_inited)
  71. {
  72. _inited = true;
  73. DownLoadPackage(null);
  74. }
  75. }
  76. /// <summary>
  77. /// 固定时间设置任务
  78. /// </summary>
  79. private void SetTaskAtFixedTime()
  80. {
  81. DateTime now = DateTime.Now;
  82. DateTime oneOClock = DateTime.Today.AddHours(_autoUpdateTime);
  83. if (now > oneOClock)
  84. {
  85. oneOClock = oneOClock.AddDays(1.0);
  86. }
  87. int msUntilFour = (int)((oneOClock - now).TotalMilliseconds);
  88. _timer = new Timer(DownLoadPackage);
  89. _timer.Change(msUntilFour, System.Threading.Timeout.Infinite);
  90. }
  91. private void DownLoadPackage(object obj)
  92. {
  93. if (_needAutoUpdate == false)
  94. {
  95. Logger.WriteLineInfo("Not Need Auto Upgrade");
  96. return;
  97. }
  98. DirectoryHelper.DeleteDirectory(_packagePath);
  99. DirectoryHelper.CreateDirectory(_packagePath);
  100. string version = GetVersion();
  101. Logger.WriteLineInfo($"Start Check New Version,Current Version:{version}");
  102. _fisUpgraderService.DownloadPackageForSonopost(_packageFullPath, FISLib.FISPlatform.Windows, version);
  103. }
  104. private void UpgraderApplication(string updatePackageName)
  105. {
  106. if (File.Exists(updatePackageName))
  107. {
  108. Logger.WriteLineInfo("Checked New Version,Upgrade!");
  109. AppManager.Instance.GetManager<IOledManager>().ShowStatus(OledMessage.Upgrading);
  110. UpgradeHelper.StartUpgrade(updatePackageName, true);
  111. FileHelper.DeleteFile(updatePackageName);
  112. }
  113. else
  114. {
  115. Logger.WriteLineInfo("No New Version found!");
  116. }
  117. }
  118. public string GetVersion()
  119. {
  120. if (string.IsNullOrWhiteSpace(_currentVersion))
  121. {
  122. _currentVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();
  123. }
  124. return _currentVersion;
  125. }
  126. public override void DoDispose()
  127. {
  128. try
  129. {
  130. _loginManager.LoginStatusChanged -= OnLoginStatusChanged;
  131. _fisUpgraderService.DownloadProgressChanged -= OnDonwloadProgressChanged;
  132. _timer?.Dispose();
  133. }
  134. catch (Exception ex)
  135. {
  136. Logger.WriteLineError($"VersionCheckManager DoDispose Error:{ex}");
  137. }
  138. base.DoDispose();
  139. }
  140. private void OnLoginStatusChanged(object sender, DeviceStatus e)
  141. {
  142. switch (e)
  143. {
  144. case DeviceStatus.Logon:
  145. CheckVersion();
  146. break;
  147. }
  148. }
  149. }
  150. }