< Summary - Jellyfin

Information
Class: Jellyfin.Server.Migrations.PreStartupRoutines.MigrateMusicBrainzTimeout
Assembly: jellyfin
File(s): /srv/git/jellyfin/Jellyfin.Server/Migrations/PreStartupRoutines/MigrateMusicBrainzTimeout.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 35
Coverable lines: 35
Total lines: 98
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 6
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
get_Id()100%210%
get_Name()100%210%
get_PerformOnNewInstall()100%210%
Perform()0%4260%
ReadOld(...)100%210%
WriteNew(...)100%210%
.ctor()100%210%
get_Server()100%210%
set_Server(...)100%210%
get_RateLimit()100%210%
set_RateLimit(...)100%210%

File(s)

/srv/git/jellyfin/Jellyfin.Server/Migrations/PreStartupRoutines/MigrateMusicBrainzTimeout.cs

#LineLine coverage
 1using System;
 2using System.IO;
 3using System.Xml;
 4using System.Xml.Serialization;
 5using Emby.Server.Implementations;
 6using MediaBrowser.Providers.Plugins.MusicBrainz.Configuration;
 7using Microsoft.Extensions.Logging;
 8
 9namespace Jellyfin.Server.Migrations.PreStartupRoutines;
 10
 11/// <inheritdoc />
 12public class MigrateMusicBrainzTimeout : IMigrationRoutine
 13{
 14    private readonly ServerApplicationPaths _applicationPaths;
 15    private readonly ILogger<MigrateMusicBrainzTimeout> _logger;
 16
 17    /// <summary>
 18    /// Initializes a new instance of the <see cref="MigrateMusicBrainzTimeout"/> class.
 19    /// </summary>
 20    /// <param name="applicationPaths">An instance of <see cref="ServerApplicationPaths"/>.</param>
 21    /// <param name="loggerFactory">An instance of the <see cref="ILoggerFactory"/> interface.</param>
 22    public MigrateMusicBrainzTimeout(ServerApplicationPaths applicationPaths, ILoggerFactory loggerFactory)
 23    {
 024        _applicationPaths = applicationPaths;
 025        _logger = loggerFactory.CreateLogger<MigrateMusicBrainzTimeout>();
 026    }
 27
 28    /// <inheritdoc />
 029    public Guid Id => Guid.Parse("A6DCACF4-C057-4Ef9-80D3-61CEF9DDB4F0");
 30
 31    /// <inheritdoc />
 032    public string Name => nameof(MigrateMusicBrainzTimeout);
 33
 34    /// <inheritdoc />
 035    public bool PerformOnNewInstall => false;
 36
 37    /// <inheritdoc />
 38    public void Perform()
 39    {
 040        string path = Path.Combine(_applicationPaths.PluginConfigurationsPath, "Jellyfin.Plugin.MusicBrainz.xml");
 041        if (!File.Exists(path))
 42        {
 043            _logger.LogDebug("No MusicBrainz plugin configuration file found, skipping");
 044            return;
 45        }
 46
 047        var oldPluginConfiguration = ReadOld(path);
 48
 049        if (oldPluginConfiguration is not null)
 50        {
 051            var newPluginConfiguration = new PluginConfiguration
 052            {
 053                Server = oldPluginConfiguration.Server,
 054                ReplaceArtistName = oldPluginConfiguration.ReplaceArtistName
 055            };
 056            var newRateLimit = oldPluginConfiguration.RateLimit / 1000.0;
 057            newPluginConfiguration.RateLimit = newRateLimit < 1.0 ? 1.0 : newRateLimit;
 058            WriteNew(path, newPluginConfiguration);
 59        }
 060    }
 61
 62    private OldMusicBrainzConfiguration? ReadOld(string path)
 63    {
 064        using var xmlReader = XmlReader.Create(path);
 065        var serverConfigSerializer = new XmlSerializer(typeof(OldMusicBrainzConfiguration), new XmlRootAttribute("Plugin
 066        return serverConfigSerializer.Deserialize(xmlReader) as OldMusicBrainzConfiguration;
 067    }
 68
 69    private void WriteNew(string path, PluginConfiguration newPluginConfiguration)
 70    {
 071        var pluginConfigurationSerializer = new XmlSerializer(typeof(PluginConfiguration), new XmlRootAttribute("PluginC
 072        var xmlWriterSettings = new XmlWriterSettings { Indent = true };
 073        using var xmlWriter = XmlWriter.Create(path, xmlWriterSettings);
 074        pluginConfigurationSerializer.Serialize(xmlWriter, newPluginConfiguration);
 075    }
 76
 77#pragma warning disable
 78    public sealed class OldMusicBrainzConfiguration
 79    {
 080        private string _server = string.Empty;
 81
 82        private long _rateLimit = 0L;
 83
 84        public string Server
 85        {
 086            get => _server;
 087            set => _server = value.TrimEnd('/');
 88        }
 89
 90        public long RateLimit
 91        {
 092            get => _rateLimit;
 093            set => _rateLimit = value;
 94        }
 95
 96        public bool ReplaceArtistName { get; set; }
 97    }
 98}