diff --git a/.gitignore b/.gitignore
index 20a039d..2747a60 100644
--- a/.gitignore
+++ b/.gitignore
@@ -230,3 +230,4 @@ pip-log.txt
.mr.developer.cfg
.idea
+.history
\ No newline at end of file
diff --git a/AutoOrganize/AutoOrganize.csproj b/AutoOrganize/AutoOrganize.csproj
index a61f267..79833fa 100644
--- a/AutoOrganize/AutoOrganize.csproj
+++ b/AutoOrganize/AutoOrganize.csproj
@@ -2,8 +2,8 @@
net6.0
- 9.0.0.0
- 9.0.0.0
+ 10.0.0.0
+ 10.0.0.0
true
AllEnabledByDefault
../jellyfin.ruleset
@@ -14,41 +14,41 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
+
diff --git a/AutoOrganize/Core/EpisodeFileOrganizer.cs b/AutoOrganize/Core/EpisodeFileOrganizer.cs
index 51da6d9..c2a9123 100644
--- a/AutoOrganize/Core/EpisodeFileOrganizer.cs
+++ b/AutoOrganize/Core/EpisodeFileOrganizer.cs
@@ -9,6 +9,7 @@
using AutoOrganize.Model;
using Emby.Naming.Common;
using Emby.Naming.TV;
+using Emby.Naming.Video;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
@@ -34,8 +35,7 @@ public class EpisodeFileOrganizer
private readonly IFileSystem _fileSystem;
private readonly IFileOrganizationService _organizationService;
private readonly IProviderManager _providerManager;
-
- private NamingOptions _namingOptions;
+ private readonly NamingOptions _namingOptions;
///
/// Initializes a new instance of the class.
@@ -47,7 +47,8 @@ public EpisodeFileOrganizer(
ILogger logger,
ILibraryManager libraryManager,
ILibraryMonitor libraryMonitor,
- IProviderManager providerManager)
+ IProviderManager providerManager,
+ NamingOptions namingOptions)
{
_organizationService = organizationService;
_fileSystem = fileSystem;
@@ -55,16 +56,11 @@ public EpisodeFileOrganizer(
_libraryManager = libraryManager;
_libraryMonitor = libraryMonitor;
_providerManager = providerManager;
+ _namingOptions = namingOptions;
}
private FileOrganizerType CurrentFileOrganizerType => FileOrganizerType.Episode;
- private NamingOptions GetNamingOptionsInternal()
- {
- _namingOptions = _namingOptions ?? new NamingOptions();
- return _namingOptions;
- }
-
///
/// Organize an episode file.
///
@@ -98,8 +94,7 @@ public async Task OrganizeEpisodeFile(
return result;
}
- var namingOptions = GetNamingOptionsInternal();
- var resolver = new EpisodeResolver(namingOptions);
+ var resolver = new EpisodeResolver(_namingOptions);
var episodeInfo = resolver.Resolve(path, false) ??
new Emby.Naming.TV.EpisodeInfo(string.Empty);
@@ -691,7 +686,7 @@ private List GetOtherDuplicatePaths(
try
{
var filesOfOtherExtensions = _fileSystem.GetFilePaths(folder)
- .Where(i => _libraryManager.IsVideoFile(i) && string.Equals(Path.GetFileNameWithoutExtension(i), targetFileNameWithoutExtension, StringComparison.OrdinalIgnoreCase));
+ .Where(i => VideoResolver.IsVideoFile(i, _namingOptions) && string.Equals(Path.GetFileNameWithoutExtension(i), targetFileNameWithoutExtension, StringComparison.OrdinalIgnoreCase));
episodePaths.AddRange(filesOfOtherExtensions);
}
diff --git a/AutoOrganize/Core/FileOrganizationService.cs b/AutoOrganize/Core/FileOrganizationService.cs
index 1187cad..5242c1e 100644
--- a/AutoOrganize/Core/FileOrganizationService.cs
+++ b/AutoOrganize/Core/FileOrganizationService.cs
@@ -6,6 +6,7 @@
using System.Threading.Tasks;
using AutoOrganize.Data;
using AutoOrganize.Model;
+using Emby.Naming.Common;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Library;
@@ -30,6 +31,7 @@ public class FileOrganizationService : IFileOrganizationService
private readonly IFileSystem _fileSystem;
private readonly IProviderManager _providerManager;
private readonly ConcurrentDictionary _inProgressItemIds = new ConcurrentDictionary();
+ private readonly NamingOptions _namingOptions;
///
/// Initializes a new instance of the class.
@@ -54,6 +56,7 @@ public FileOrganizationService(
_config = config;
_fileSystem = fileSystem;
_providerManager = providerManager;
+ _namingOptions = new NamingOptions();
}
///
@@ -175,7 +178,8 @@ public async Task PerformOrganization(string resultId)
_loggerFactory.CreateLogger(),
_libraryManager,
_libraryMonitor,
- _providerManager);
+ _providerManager,
+ _namingOptions);
organizeResult = await episodeOrganizer.OrganizeEpisodeFile(result.OriginalPath, options.TvOptions, CancellationToken.None)
.ConfigureAwait(false);
break;
@@ -186,7 +190,8 @@ public async Task PerformOrganization(string resultId)
_loggerFactory.CreateLogger(),
_libraryManager,
_libraryMonitor,
- _providerManager);
+ _providerManager,
+ _namingOptions);
organizeResult = await movieOrganizer.OrganizeMovieFile(result.OriginalPath, options.MovieOptions, true, CancellationToken.None)
.ConfigureAwait(false);
break;
@@ -221,7 +226,8 @@ public async Task PerformOrganization(EpisodeFileOrganizationRequest request)
_loggerFactory.CreateLogger(),
_libraryManager,
_libraryMonitor,
- _providerManager);
+ _providerManager,
+ _namingOptions);
var options = _config.GetAutoOrganizeOptions();
var result = await organizer.OrganizeWithCorrection(request, options.TvOptions, CancellationToken.None).ConfigureAwait(false);
@@ -241,7 +247,8 @@ public async Task PerformOrganization(MovieFileOrganizationRequest request)
_loggerFactory.CreateLogger(),
_libraryManager,
_libraryMonitor,
- _providerManager);
+ _providerManager,
+ _namingOptions);
var options = _config.GetAutoOrganizeOptions();
var result = await organizer.OrganizeWithCorrection(request, options.MovieOptions, CancellationToken.None).ConfigureAwait(false);
diff --git a/AutoOrganize/Core/MovieFileOrganizer.cs b/AutoOrganize/Core/MovieFileOrganizer.cs
index de5afed..db2bb77 100644
--- a/AutoOrganize/Core/MovieFileOrganizer.cs
+++ b/AutoOrganize/Core/MovieFileOrganizer.cs
@@ -29,7 +29,7 @@ public class MovieFileOrganizer
private readonly IFileSystem _fileSystem;
private readonly IFileOrganizationService _organizationService;
private readonly IProviderManager _providerManager;
- private NamingOptions _namingOptions;
+ private readonly NamingOptions _namingOptions;
///
/// Initializes a new instance of the class.
@@ -41,7 +41,8 @@ public MovieFileOrganizer(
ILogger logger,
ILibraryManager libraryManager,
ILibraryMonitor libraryMonitor,
- IProviderManager providerManager)
+ IProviderManager providerManager,
+ NamingOptions namingOptions)
{
_organizationService = organizationService;
_fileSystem = fileSystem;
@@ -49,6 +50,7 @@ public MovieFileOrganizer(
_libraryManager = libraryManager;
_libraryMonitor = libraryMonitor;
_providerManager = providerManager;
+ _namingOptions = namingOptions;
}
private FileOrganizerType CurrentFileOrganizerType => FileOrganizerType.Movie;
@@ -88,8 +90,6 @@ public async Task OrganizeMovieFile(
return result;
}
- _namingOptions ??= new NamingOptions();
-
var movieInfo = VideoResolver.Resolve(path, false, _namingOptions);
if (!string.IsNullOrEmpty(movieInfo?.Name))
{
diff --git a/AutoOrganize/Core/MovieFolderOrganizer.cs b/AutoOrganize/Core/MovieFolderOrganizer.cs
index 4e1da07..bdfeabc 100644
--- a/AutoOrganize/Core/MovieFolderOrganizer.cs
+++ b/AutoOrganize/Core/MovieFolderOrganizer.cs
@@ -6,6 +6,8 @@
using System.Threading;
using System.Threading.Tasks;
using AutoOrganize.Model;
+using Emby.Naming.Common;
+using Emby.Naming.Video;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.IO;
@@ -25,6 +27,7 @@ public class MovieFolderOrganizer
private readonly IFileSystem _fileSystem;
private readonly IFileOrganizationService _organizationService;
private readonly IProviderManager _providerManager;
+ private readonly NamingOptions _namingOptions;
///
/// Initializes a new instance of the class.
@@ -36,7 +39,8 @@ public MovieFolderOrganizer(
IFileSystem fileSystem,
ILibraryMonitor libraryMonitor,
IFileOrganizationService organizationService,
- IProviderManager providerManager)
+ IProviderManager providerManager,
+ NamingOptions namingOptions)
{
_libraryManager = libraryManager;
_loggerFactory = loggerFactory;
@@ -45,6 +49,7 @@ public MovieFolderOrganizer(
_libraryMonitor = libraryMonitor;
_organizationService = organizationService;
_providerManager = providerManager;
+ _namingOptions = namingOptions;
}
private bool CanOrganize(FileSystemMetadata fileInfo, MovieFileOrganizationOptions options)
@@ -53,7 +58,7 @@ private bool CanOrganize(FileSystemMetadata fileInfo, MovieFileOrganizationOptio
try
{
- return _libraryManager.IsVideoFile(fileInfo.FullName) && fileInfo.Length >= minFileBytes;
+ return VideoResolver.IsVideoFile(fileInfo.FullName, _namingOptions) && fileInfo.Length >= minFileBytes;
}
catch (Exception ex)
{
@@ -116,7 +121,8 @@ public async Task Organize(
_loggerFactory.CreateLogger(),
_libraryManager,
_libraryMonitor,
- _providerManager);
+ _providerManager,
+ _namingOptions);
foreach (var file in eligibleFiles)
{
diff --git a/AutoOrganize/Core/OrganizerScheduledTask.cs b/AutoOrganize/Core/OrganizerScheduledTask.cs
index 2be827b..c8d65b3 100644
--- a/AutoOrganize/Core/OrganizerScheduledTask.cs
+++ b/AutoOrganize/Core/OrganizerScheduledTask.cs
@@ -3,6 +3,7 @@
using System.Diagnostics.CodeAnalysis;
using System.Threading;
using System.Threading.Tasks;
+using Emby.Naming.Common;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
@@ -24,6 +25,7 @@ public class OrganizerScheduledTask : IScheduledTask, IConfigurableScheduledTask
private readonly IFileSystem _fileSystem;
private readonly IServerConfigurationManager _config;
private readonly IProviderManager _providerManager;
+ private readonly NamingOptions _namingOptions;
///
/// Initializes a new instance of the class.
@@ -44,6 +46,7 @@ public OrganizerScheduledTask(
_fileSystem = fileSystem;
_config = config;
_providerManager = providerManager;
+ _namingOptions = new NamingOptions();
}
///
@@ -89,7 +92,8 @@ public async Task Execute(CancellationToken cancellationToken, IProgress
_fileSystem,
_libraryMonitor,
fileOrganizationService,
- _providerManager)
+ _providerManager,
+ _namingOptions)
.Organize(options.TvOptions, progress, cancellationToken).ConfigureAwait(false);
}
@@ -98,7 +102,14 @@ public async Task Execute(CancellationToken cancellationToken, IProgress
queueMovie = options.MovieOptions.QueueLibraryScan;
var fileOrganizationService = PluginEntryPoint.Current.FileOrganizationService;
- await new MovieFolderOrganizer(_libraryManager, _loggerFactory, _fileSystem, _libraryMonitor, fileOrganizationService, _providerManager)
+ await new MovieFolderOrganizer(
+ _libraryManager,
+ _loggerFactory,
+ _fileSystem,
+ _libraryMonitor,
+ fileOrganizationService,
+ _providerManager,
+ _namingOptions)
.Organize(options.MovieOptions, progress, cancellationToken).ConfigureAwait(false);
}
diff --git a/AutoOrganize/Core/TvFolderOrganizer.cs b/AutoOrganize/Core/TvFolderOrganizer.cs
index 93385e2..0c17739 100644
--- a/AutoOrganize/Core/TvFolderOrganizer.cs
+++ b/AutoOrganize/Core/TvFolderOrganizer.cs
@@ -6,6 +6,8 @@
using System.Threading;
using System.Threading.Tasks;
using AutoOrganize.Model;
+using Emby.Naming.Common;
+using Emby.Naming.Video;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.IO;
@@ -25,6 +27,7 @@ public class TvFolderOrganizer
private readonly IFileSystem _fileSystem;
private readonly IFileOrganizationService _organizationService;
private readonly IProviderManager _providerManager;
+ private readonly NamingOptions _namingOptions;
///
/// Initializes a new instance of the class.
@@ -36,7 +39,8 @@ public TvFolderOrganizer(
IFileSystem fileSystem,
ILibraryMonitor libraryMonitor,
IFileOrganizationService organizationService,
- IProviderManager providerManager)
+ IProviderManager providerManager,
+ NamingOptions namingOptions)
{
_libraryManager = libraryManager;
_loggerFactory = loggerFactory;
@@ -45,6 +49,7 @@ public TvFolderOrganizer(
_libraryMonitor = libraryMonitor;
_organizationService = organizationService;
_providerManager = providerManager;
+ _namingOptions = namingOptions;
}
private bool EnableOrganization(FileSystemMetadata fileInfo, TvFileOrganizationOptions options)
@@ -53,7 +58,7 @@ private bool EnableOrganization(FileSystemMetadata fileInfo, TvFileOrganizationO
try
{
- return _libraryManager.IsVideoFile(fileInfo.FullName) && fileInfo.Length >= minFileBytes;
+ return VideoResolver.IsVideoFile(fileInfo.FullName, _namingOptions) && fileInfo.Length >= minFileBytes;
}
catch (Exception ex)
{
@@ -116,7 +121,8 @@ public async Task Organize(
_loggerFactory.CreateLogger(),
_libraryManager,
_libraryMonitor,
- _providerManager);
+ _providerManager,
+ _namingOptions);
foreach (var file in eligibleFiles)
{
diff --git a/AutoOrganize/Web/autoorganizemovie.js b/AutoOrganize/Web/autoorganizemovie.js
index 6f34e18..8aefddb 100644
--- a/AutoOrganize/Web/autoorganizemovie.js
+++ b/AutoOrganize/Web/autoorganizemovie.js
@@ -76,7 +76,7 @@ function onSubmit(view) {
const watchLocation = view.querySelector('#txtWatchMovieFolder').value;
movieOptions.WatchLocations = watchLocation ? [watchLocation] : [];
- movieOptions.CopyOriginalFile = view.querySelector('#copyOrMoveMovieFile').value;
+ movieOptions.CopyOriginalFile = view.querySelector('#copyOrMoveMovieFile').value === 'true';
movieOptions.QueueLibraryScan = view.querySelector('#chkQueueLibScan').checked;
diff --git a/AutoOrganize/Web/autoorganizetv.js b/AutoOrganize/Web/autoorganizetv.js
index 03591a1..84d6e33 100644
--- a/AutoOrganize/Web/autoorganizetv.js
+++ b/AutoOrganize/Web/autoorganizetv.js
@@ -95,7 +95,7 @@ function onSubmit(view) {
const watchLocation = view.querySelector('#txtWatchFolder').value;
tvOptions.WatchLocations = watchLocation ? [watchLocation] : [];
- tvOptions.CopyOriginalFile = view.querySelector('#copyOrMoveFile').value;
+ tvOptions.CopyOriginalFile = view.querySelector('#copyOrMoveFile').value === 'true';
tvOptions.QueueLibraryScan = view.querySelector('#chkQueueLibScan').checked;