diff --git a/Emby.AutoOrganize/Core/AutoOrganizeOptionsFactory.cs b/Emby.AutoOrganize/Core/AutoOrganizeOptionsFactory.cs index 50ad9d4..4817cbd 100644 --- a/Emby.AutoOrganize/Core/AutoOrganizeOptionsFactory.cs +++ b/Emby.AutoOrganize/Core/AutoOrganizeOptionsFactory.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Emby.AutoOrganize.Model; using MediaBrowser.Common.Configuration; diff --git a/Emby.AutoOrganize/Core/ConfigurationExtensions.cs b/Emby.AutoOrganize/Core/ConfigurationExtensions.cs index f4e1ce1..870a9d5 100644 --- a/Emby.AutoOrganize/Core/ConfigurationExtensions.cs +++ b/Emby.AutoOrganize/Core/ConfigurationExtensions.cs @@ -1,5 +1,3 @@ -using System; -using System.Linq; using System.Threading; using Emby.AutoOrganize.Model; using MediaBrowser.Common.Configuration; diff --git a/Emby.AutoOrganize/Core/EpisodeFileOrganizer.cs b/Emby.AutoOrganize/Core/EpisodeFileOrganizer.cs index aadcd16..83371f4 100644 --- a/Emby.AutoOrganize/Core/EpisodeFileOrganizer.cs +++ b/Emby.AutoOrganize/Core/EpisodeFileOrganizer.cs @@ -15,7 +15,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Extensions; using MediaBrowser.Model.IO; using MediaBrowser.Model.Providers; using Microsoft.Extensions.Logging; @@ -880,11 +879,11 @@ private string GetSeriesDirectoryName(Series series, TvFileOrganizationOptions o } var seasonFolderName = options.SeriesFolderPattern. - Replace("%sn", seriesName) - .Replace("%s.n", seriesName.Replace(" ", ".")) - .Replace("%s_n", seriesName.Replace(" ", "_")) - .Replace("%sy", serieYear.ToString()) - .Replace("%fn", seriesFullName); + Replace("%sn", seriesName, StringComparison.Ordinal) + .Replace("%s.n", seriesName.Replace(' ', '.'), StringComparison.Ordinal) + .Replace("%s_n", seriesName.Replace(' ', '_'), StringComparison.Ordinal) + .Replace("%sy", serieYear.ToString(), StringComparison.Ordinal) + .Replace("%fn", seriesFullName, StringComparison.Ordinal); return _fileSystem.GetValidFilename(seasonFolderName); } @@ -971,9 +970,9 @@ private string GetSeasonFolderPath(Series series, int seasonNumber, TvFileOrgani } var seasonFolderName = options.SeasonFolderPattern - .Replace("%s", seasonNumber.ToString(_usCulture)) - .Replace("%0s", seasonNumber.ToString("00", _usCulture)) - .Replace("%00s", seasonNumber.ToString("000", _usCulture)); + .Replace("%s", seasonNumber.ToString(_usCulture), StringComparison.Ordinal) + .Replace("%0s", seasonNumber.ToString("00", _usCulture), StringComparison.Ordinal) + .Replace("%00s", seasonNumber.ToString("000", _usCulture), StringComparison.Ordinal); return Path.Combine(path, _fileSystem.GetValidFilename(seasonFolderName)); } @@ -1016,34 +1015,34 @@ private void SetEpisodeFileName(string sourcePath, Series series, Season season, throw new OrganizationException("GetEpisodeFileName: Configured episode name pattern is empty!"); } - var result = pattern.Replace("%sn", seriesName) - .Replace("%s.n", seriesName.Replace(" ", ".")) - .Replace("%s_n", seriesName.Replace(" ", "_")) - .Replace("%s", seasonNumber.ToString(_usCulture)) - .Replace("%0s", seasonNumber.ToString("00", _usCulture)) - .Replace("%00s", seasonNumber.ToString("000", _usCulture)) - .Replace("%ext", sourceExtension) - .Replace("%en", "%#1") - .Replace("%e.n", "%#2") - .Replace("%e_n", "%#3") - .Replace("%fn", Path.GetFileNameWithoutExtension(sourcePath)); + var result = pattern.Replace("%sn", seriesName, StringComparison.Ordinal) + .Replace("%s.n", seriesName.Replace(' ', '.'), StringComparison.Ordinal) + .Replace("%s_n", seriesName.Replace(' ', '_'), StringComparison.Ordinal) + .Replace("%s", seasonNumber.ToString(_usCulture), StringComparison.Ordinal) + .Replace("%0s", seasonNumber.ToString("00", _usCulture), StringComparison.Ordinal) + .Replace("%00s", seasonNumber.ToString("000", _usCulture), StringComparison.Ordinal) + .Replace("%ext", sourceExtension, StringComparison.Ordinal) + .Replace("%en", "%#1", StringComparison.Ordinal) + .Replace("%e.n", "%#2", StringComparison.Ordinal) + .Replace("%e_n", "%#3", StringComparison.Ordinal) + .Replace("%fn", Path.GetFileNameWithoutExtension(sourcePath), StringComparison.Ordinal); if (endingEpisodeNumber.HasValue) { - result = result.Replace("%ed", endingEpisodeNumber.Value.ToString(_usCulture)) - .Replace("%0ed", endingEpisodeNumber.Value.ToString("00", _usCulture)) - .Replace("%00ed", endingEpisodeNumber.Value.ToString("000", _usCulture)); + result = result.Replace("%ed", endingEpisodeNumber.Value.ToString(_usCulture), StringComparison.Ordinal) + .Replace("%0ed", endingEpisodeNumber.Value.ToString("00", _usCulture), StringComparison.Ordinal) + .Replace("%00ed", endingEpisodeNumber.Value.ToString("000", _usCulture), StringComparison.Ordinal); } - result = result.Replace("%e", episodeNumber.ToString(_usCulture)) - .Replace("%0e", episodeNumber.ToString("00", _usCulture)) - .Replace("%00e", episodeNumber.ToString("000", _usCulture)); + result = result.Replace("%e", episodeNumber.ToString(_usCulture), StringComparison.Ordinal) + .Replace("%0e", episodeNumber.ToString("00", _usCulture), StringComparison.Ordinal) + .Replace("%00e", episodeNumber.ToString("000", _usCulture), StringComparison.Ordinal); - if (result.Contains("%#")) + if (result.Contains("%#", StringComparison.Ordinal)) { - result = result.Replace("%#1", episodeTitle) - .Replace("%#2", episodeTitle.Replace(" ", ".")) - .Replace("%#3", episodeTitle.Replace(" ", "_")); + result = result.Replace("%#1", episodeTitle, StringComparison.Ordinal) + .Replace("%#2", episodeTitle.Replace(' ', '.'), StringComparison.Ordinal) + .Replace("%#3", episodeTitle.Replace(' ', '_'), StringComparison.Ordinal); } // Finally, call GetValidFilename again in case user customized the episode expression with any invalid filename characters diff --git a/Emby.AutoOrganize/Core/FileOrganizationService.cs b/Emby.AutoOrganize/Core/FileOrganizationService.cs index fb86e41..4d5abab 100644 --- a/Emby.AutoOrganize/Core/FileOrganizationService.cs +++ b/Emby.AutoOrganize/Core/FileOrganizationService.cs @@ -180,7 +180,8 @@ public async Task PerformOrganization(string resultId) .ConfigureAwait(false); break; case FileOrganizerType.Movie: - var movieOrganizer = new MovieFileOrganizer(this, + var movieOrganizer = new MovieFileOrganizer( + this, _fileSystem, _loggerFactory.CreateLogger(), _libraryManager, @@ -239,7 +240,7 @@ public async Task PerformOrganization(MovieFileOrganizationRequest request) _fileSystem, _loggerFactory.CreateLogger(), _libraryManager, - _libraryMonitor, + _libraryMonitor, _providerManager); var options = _config.GetAutoOrganizeOptions(); diff --git a/Emby.AutoOrganize/Core/MovieFileOrganizer.cs b/Emby.AutoOrganize/Core/MovieFileOrganizer.cs index 4fc24a2..31a3dbe 100644 --- a/Emby.AutoOrganize/Core/MovieFileOrganizer.cs +++ b/Emby.AutoOrganize/Core/MovieFileOrganizer.cs @@ -1,7 +1,5 @@ using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -using System.Globalization; using System.IO; using System.Linq; using System.Threading; @@ -551,12 +549,12 @@ private string GetMovieNameInternal(string sourcePath, Movie movie, string patte throw new OrganizationException("GetMovieFolder: Configured movie name pattern is empty!"); } - var result = pattern.Replace("%mn", movieName) - .Replace("%m.n", movieName.Replace(" ", ".")) - .Replace("%m_n", movieName.Replace(" ", "_")) - .Replace("%my", productionYear.ToString()) - .Replace("%ext", sourceExtension) - .Replace("%fn", Path.GetFileNameWithoutExtension(sourcePath)); + var result = pattern.Replace("%mn", movieName, StringComparison.Ordinal) + .Replace("%m.n", movieName.Replace(' ', '.'), StringComparison.Ordinal) + .Replace("%m_n", movieName.Replace(' ', '_'), StringComparison.Ordinal) + .Replace("%my", productionYear.ToString(), StringComparison.Ordinal) + .Replace("%ext", sourceExtension, StringComparison.Ordinal) + .Replace("%fn", Path.GetFileNameWithoutExtension(sourcePath), StringComparison.Ordinal); // Finally, call GetValidFilename again in case user customized the movie expression with any invalid filename characters return _fileSystem.GetValidFilename(result).Trim(); diff --git a/Emby.AutoOrganize/Core/MovieFolderOrganizer.cs b/Emby.AutoOrganize/Core/MovieFolderOrganizer.cs index 144a184..b968614 100644 --- a/Emby.AutoOrganize/Core/MovieFolderOrganizer.cs +++ b/Emby.AutoOrganize/Core/MovieFolderOrganizer.cs @@ -119,7 +119,7 @@ public async Task Organize( _fileSystem, _loggerFactory.CreateLogger(), _libraryManager, - _libraryMonitor, + _libraryMonitor, _providerManager); foreach (var file in eligibleFiles) diff --git a/Emby.AutoOrganize/Core/NameUtils.cs b/Emby.AutoOrganize/Core/NameUtils.cs index 8a06bf3..dc1d125 100644 --- a/Emby.AutoOrganize/Core/NameUtils.cs +++ b/Emby.AutoOrganize/Core/NameUtils.cs @@ -2,7 +2,6 @@ using System.Globalization; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Extensions; -using MediaBrowser.Model.Extensions; namespace Emby.AutoOrganize.Core { @@ -28,7 +27,7 @@ internal static int GetMatchScore(string sortedName, int? year, string itemName, var seriesNameWithoutYear = itemName; if (itemProductionYear.HasValue) { - seriesNameWithoutYear = seriesNameWithoutYear.Replace(itemProductionYear.Value.ToString(UsCulture), string.Empty); + seriesNameWithoutYear = seriesNameWithoutYear.Replace(itemProductionYear.Value.ToString(UsCulture), string.Empty, StringComparison.Ordinal); } if (IsNameMatch(sortedName, seriesNameWithoutYear)) @@ -80,23 +79,23 @@ private static string GetComparableName(string name) name = " " + name + " "; - name = name.Replace(".", " ") - .Replace("_", " ") - .Replace(" and ", " ") - .Replace(".and.", " ") - .Replace("&", " ") - .Replace("!", " ") - .Replace("(", " ") - .Replace(")", " ") - .Replace(":", " ") - .Replace(",", " ") - .Replace("-", " ") - .Replace("'", " ") - .Replace("[", " ") - .Replace("]", " ") - .Replace(" a ", string.Empty, StringComparison.OrdinalIgnoreCase) - .Replace(" the ", string.Empty, StringComparison.OrdinalIgnoreCase) - .Replace(" ", string.Empty); + name = name.Replace('.', ' ') + .Replace('_', ' ') + .Replace(" and ", " ", StringComparison.OrdinalIgnoreCase) + .Replace(".and.", " ", StringComparison.OrdinalIgnoreCase) + .Replace('&', ' ') + .Replace('!', ' ') + .Replace('(', ' ') + .Replace(')', ' ') + .Replace(':', ' ') + .Replace(',', ' ') + .Replace('-', ' ') + .Replace('\'', ' ') + .Replace('[', ' ') + .Replace(']', ' ') + .Replace(" a ", string.Empty, StringComparison.OrdinalIgnoreCase) + .Replace(" the ", string.Empty, StringComparison.OrdinalIgnoreCase) + .Replace(" ", string.Empty, StringComparison.Ordinal); return name.Trim(); } diff --git a/Emby.AutoOrganize/Core/OrganizationException.cs b/Emby.AutoOrganize/Core/OrganizationException.cs index 6881838..09ae6cb 100644 --- a/Emby.AutoOrganize/Core/OrganizationException.cs +++ b/Emby.AutoOrganize/Core/OrganizationException.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.Text; namespace Emby.AutoOrganize.Core { diff --git a/Emby.AutoOrganize/Core/OrganizerScheduledTask.cs b/Emby.AutoOrganize/Core/OrganizerScheduledTask.cs index fd2a9fe..427ef2c 100644 --- a/Emby.AutoOrganize/Core/OrganizerScheduledTask.cs +++ b/Emby.AutoOrganize/Core/OrganizerScheduledTask.cs @@ -3,7 +3,6 @@ using System.Diagnostics.CodeAnalysis; using System.Threading; using System.Threading.Tasks; -using Emby.AutoOrganize.Model; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; diff --git a/Emby.AutoOrganize/Data/ManagedConnection.cs b/Emby.AutoOrganize/Data/ManagedConnection.cs index f6ec909..3554dfc 100644 --- a/Emby.AutoOrganize/Data/ManagedConnection.cs +++ b/Emby.AutoOrganize/Data/ManagedConnection.cs @@ -4,9 +4,6 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using SQLitePCL.pretty; namespace Emby.AutoOrganize.Data diff --git a/Emby.AutoOrganize/Data/ReaderWriterLockSlimExtensions.cs b/Emby.AutoOrganize/Data/ReaderWriterLockSlimExtensions.cs index c1e2f4b..2613718 100644 --- a/Emby.AutoOrganize/Data/ReaderWriterLockSlimExtensions.cs +++ b/Emby.AutoOrganize/Data/ReaderWriterLockSlimExtensions.cs @@ -4,7 +4,6 @@ #pragma warning disable SA1600 // Elements should be documented using System; -using System.Collections.Generic; using System.Threading; namespace Emby.AutoOrganize.Data diff --git a/Emby.AutoOrganize/Emby.AutoOrganize.csproj b/Emby.AutoOrganize/Emby.AutoOrganize.csproj index 4894092..6e4070d 100644 --- a/Emby.AutoOrganize/Emby.AutoOrganize.csproj +++ b/Emby.AutoOrganize/Emby.AutoOrganize.csproj @@ -7,7 +7,7 @@ true - + true @@ -45,12 +45,12 @@ - + - + ../jellyfin.ruleset diff --git a/Emby.AutoOrganize/Model/MovieFileOrganizationOptions.cs b/Emby.AutoOrganize/Model/MovieFileOrganizationOptions.cs index 7a827c2..b00ee76 100644 --- a/Emby.AutoOrganize/Model/MovieFileOrganizationOptions.cs +++ b/Emby.AutoOrganize/Model/MovieFileOrganizationOptions.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; diff --git a/Emby.AutoOrganize/Model/TvFileOrganizationOptions.cs b/Emby.AutoOrganize/Model/TvFileOrganizationOptions.cs index 550ba66..eccfee9 100644 --- a/Emby.AutoOrganize/Model/TvFileOrganizationOptions.cs +++ b/Emby.AutoOrganize/Model/TvFileOrganizationOptions.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; diff --git a/Emby.AutoOrganize/PluginEntryPoint.cs b/Emby.AutoOrganize/PluginEntryPoint.cs index 5bf6127..2764fac 100644 --- a/Emby.AutoOrganize/PluginEntryPoint.cs +++ b/Emby.AutoOrganize/PluginEntryPoint.cs @@ -1,10 +1,7 @@ using System; -using System.Threading; using System.Threading.Tasks; using Emby.AutoOrganize.Core; using Emby.AutoOrganize.Data; -using Emby.AutoOrganize.Model; -using Jellyfin.Data.Events; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Plugins; @@ -12,7 +9,6 @@ using MediaBrowser.Controller.Session; using MediaBrowser.Model.IO; using MediaBrowser.Model.Serialization; -using MediaBrowser.Model.Session; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; @@ -39,6 +35,15 @@ public sealed class PluginEntryPoint : IServerEntryPoint /// /// Initializes a new instance of the class. /// + /// Instance of the interface. + /// Instance of the interface. + /// Instance of the interface. + /// Instance of the interface. + /// Instance of the interface. + /// Instance of the interface. + /// Instance of the interface. + /// Instance of the interface. + /// Instance of the interface. public PluginEntryPoint( ISessionManager sessionManager, ITaskManager taskManager, @@ -105,6 +110,7 @@ private IFileOrganizationRepository GetRepository() return repo; } + /// public void Dispose() { _taskManager?.Dispose();