DbMigration.cs 2.1 KB

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