MigrateMusicBrainzTimeout.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using System;
  2. using System.IO;
  3. using System.Xml;
  4. using System.Xml.Serialization;
  5. using Emby.Server.Implementations;
  6. using MediaBrowser.Providers.Plugins.MusicBrainz.Configuration;
  7. using Microsoft.Extensions.Logging;
  8. namespace Jellyfin.Server.Migrations.PreStartupRoutines;
  9. /// <inheritdoc />
  10. public class MigrateMusicBrainzTimeout : IMigrationRoutine
  11. {
  12. private readonly ServerApplicationPaths _applicationPaths;
  13. private readonly ILogger<MigrateMusicBrainzTimeout> _logger;
  14. /// <summary>
  15. /// Initializes a new instance of the <see cref="MigrateMusicBrainzTimeout"/> class.
  16. /// </summary>
  17. /// <param name="applicationPaths">An instance of <see cref="ServerApplicationPaths"/>.</param>
  18. /// <param name="loggerFactory">An instance of the <see cref="ILoggerFactory"/> interface.</param>
  19. public MigrateMusicBrainzTimeout(ServerApplicationPaths applicationPaths, ILoggerFactory loggerFactory)
  20. {
  21. _applicationPaths = applicationPaths;
  22. _logger = loggerFactory.CreateLogger<MigrateMusicBrainzTimeout>();
  23. }
  24. /// <inheritdoc />
  25. public Guid Id => Guid.Parse("A6DCACF4-C057-4Ef9-80D3-61CEF9DDB4F0");
  26. /// <inheritdoc />
  27. public string Name => nameof(MigrateMusicBrainzTimeout);
  28. /// <inheritdoc />
  29. public bool PerformOnNewInstall => false;
  30. /// <inheritdoc />
  31. public void Perform()
  32. {
  33. string path = Path.Combine(_applicationPaths.PluginConfigurationsPath, "Jellyfin.Plugin.MusicBrainz.xml");
  34. if (!File.Exists(path))
  35. {
  36. _logger.LogDebug("No MusicBrainz plugin configuration file found, skipping");
  37. return;
  38. }
  39. var oldPluginConfiguration = ReadOld(path);
  40. if (oldPluginConfiguration is not null)
  41. {
  42. var newPluginConfiguration = new PluginConfiguration();
  43. newPluginConfiguration.Server = oldPluginConfiguration.Server;
  44. newPluginConfiguration.ReplaceArtistName = oldPluginConfiguration.ReplaceArtistName;
  45. var newRateLimit = oldPluginConfiguration.RateLimit / 1000.0;
  46. newPluginConfiguration.RateLimit = newRateLimit < 1.0 ? 1.0 : newRateLimit;
  47. WriteNew(path, newPluginConfiguration);
  48. }
  49. }
  50. private OldMusicBrainzConfiguration? ReadOld(string path)
  51. {
  52. using (var xmlReader = XmlReader.Create(path))
  53. {
  54. var serverConfigSerializer = new XmlSerializer(typeof(OldMusicBrainzConfiguration), new XmlRootAttribute("PluginConfiguration"));
  55. return serverConfigSerializer.Deserialize(xmlReader) as OldMusicBrainzConfiguration;
  56. }
  57. }
  58. private void WriteNew(string path, PluginConfiguration newPluginConfiguration)
  59. {
  60. var pluginConfigurationSerializer = new XmlSerializer(typeof(PluginConfiguration), new XmlRootAttribute("PluginConfiguration"));
  61. var xmlWriterSettings = new XmlWriterSettings { Indent = true };
  62. using (var xmlWriter = XmlWriter.Create(path, xmlWriterSettings))
  63. {
  64. pluginConfigurationSerializer.Serialize(xmlWriter, newPluginConfiguration);
  65. }
  66. }
  67. #pragma warning disable
  68. public sealed class OldMusicBrainzConfiguration
  69. {
  70. private string _server = string.Empty;
  71. private long _rateLimit = 0L;
  72. public string Server
  73. {
  74. get => _server;
  75. set => _server = value.TrimEnd('/');
  76. }
  77. public long RateLimit
  78. {
  79. get => _rateLimit;
  80. set => _rateLimit = value;
  81. }
  82. public bool ReplaceArtistName { get; set; }
  83. }
  84. #pragma warning restore
  85. }