DbMigration.cs 2.1 KB

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