UpdateLevelMigration.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. using MediaBrowser.Common.Implementations.Updates;
  5. using MediaBrowser.Common.Net;
  6. using MediaBrowser.Controller;
  7. using MediaBrowser.Controller.Configuration;
  8. using MediaBrowser.Model.Serialization;
  9. using MediaBrowser.Model.Updates;
  10. namespace MediaBrowser.Server.Startup.Common.Migrations
  11. {
  12. public class UpdateLevelMigration : IVersionMigration
  13. {
  14. private readonly IServerConfigurationManager _config;
  15. private readonly IServerApplicationHost _appHost;
  16. private readonly IHttpClient _httpClient;
  17. private readonly IJsonSerializer _jsonSerializer;
  18. private readonly string _releaseAssetFilename;
  19. public UpdateLevelMigration(IServerConfigurationManager config, IServerApplicationHost appHost, IHttpClient httpClient, IJsonSerializer jsonSerializer, string releaseAssetFilename)
  20. {
  21. _config = config;
  22. _appHost = appHost;
  23. _httpClient = httpClient;
  24. _jsonSerializer = jsonSerializer;
  25. _releaseAssetFilename = releaseAssetFilename;
  26. }
  27. public async void Run()
  28. {
  29. var lastVersion = _config.Configuration.LastVersion;
  30. var currentVersion = _appHost.ApplicationVersion;
  31. if (string.Equals(lastVersion, currentVersion.ToString(), StringComparison.OrdinalIgnoreCase))
  32. {
  33. return;
  34. }
  35. try
  36. {
  37. var updateLevel = _config.Configuration.SystemUpdateLevel;
  38. // Go down a level
  39. if (updateLevel == PackageVersionClass.Release)
  40. {
  41. updateLevel = PackageVersionClass.Beta;
  42. }
  43. else if (updateLevel == PackageVersionClass.Beta)
  44. {
  45. updateLevel = PackageVersionClass.Dev;
  46. }
  47. else if (updateLevel == PackageVersionClass.Dev)
  48. {
  49. // It's already dev, there's nothing to check
  50. return;
  51. }
  52. await CheckVersion(currentVersion, updateLevel, CancellationToken.None).ConfigureAwait(false);
  53. }
  54. catch
  55. {
  56. }
  57. }
  58. private async Task CheckVersion(Version currentVersion, PackageVersionClass updateLevel, CancellationToken cancellationToken)
  59. {
  60. var result = await new GithubUpdater(_httpClient, _jsonSerializer, TimeSpan.FromMinutes(5))
  61. .CheckForUpdateResult("MediaBrowser", "Emby", currentVersion, PackageVersionClass.Beta, _releaseAssetFilename, "MBServer", "Mbserver.zip",
  62. cancellationToken).ConfigureAwait(false);
  63. if (result != null && result.IsUpdateAvailable)
  64. {
  65. _config.Configuration.SystemUpdateLevel = updateLevel;
  66. _config.SaveConfiguration();
  67. return;
  68. }
  69. // Go down a level
  70. if (updateLevel == PackageVersionClass.Release)
  71. {
  72. updateLevel = PackageVersionClass.Beta;
  73. }
  74. else if (updateLevel == PackageVersionClass.Beta)
  75. {
  76. updateLevel = PackageVersionClass.Dev;
  77. }
  78. else
  79. {
  80. return;
  81. }
  82. await CheckVersion(currentVersion, updateLevel, cancellationToken).ConfigureAwait(false);
  83. }
  84. }
  85. }