DbMigration.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System.Threading.Tasks;
  2. using Emby.Server.Implementations.Persistence;
  3. using MediaBrowser.Controller.Configuration;
  4. using MediaBrowser.Model.Tasks;
  5. using Emby.Server.Core.Data;
  6. namespace Emby.Server.Core.Migrations
  7. {
  8. public class DbMigration : IVersionMigration
  9. {
  10. private readonly IServerConfigurationManager _config;
  11. private readonly ITaskManager _taskManager;
  12. public DbMigration(IServerConfigurationManager config, ITaskManager taskManager)
  13. {
  14. _config = config;
  15. _taskManager = taskManager;
  16. }
  17. public async Task Run()
  18. {
  19. // If a forced migration is required, do that now
  20. if (_config.Configuration.MigrationVersion < CleanDatabaseScheduledTask.MigrationVersion)
  21. {
  22. if (!_config.Configuration.IsStartupWizardCompleted)
  23. {
  24. _config.Configuration.MigrationVersion = CleanDatabaseScheduledTask.MigrationVersion;
  25. _config.SaveConfiguration();
  26. return;
  27. }
  28. _taskManager.SuspendTriggers = true;
  29. CleanDatabaseScheduledTask.EnableUnavailableMessage = true;
  30. Task.Run(async () =>
  31. {
  32. await Task.Delay(1000).ConfigureAwait(false);
  33. _taskManager.Execute<CleanDatabaseScheduledTask>();
  34. });
  35. return;
  36. }
  37. if (_config.Configuration.SchemaVersion < SqliteItemRepository.LatestSchemaVersion)
  38. {
  39. if (!_config.Configuration.IsStartupWizardCompleted)
  40. {
  41. _config.Configuration.SchemaVersion = SqliteItemRepository.LatestSchemaVersion;
  42. _config.SaveConfiguration();
  43. return;
  44. }
  45. Task.Run(async () =>
  46. {
  47. await Task.Delay(1000).ConfigureAwait(false);
  48. _taskManager.Execute<CleanDatabaseScheduledTask>();
  49. });
  50. }
  51. }
  52. }
  53. }