mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-09-07 11:57:55 +02:00
Merge branch 'master' of https://github.com/MediaBrowser/MediaBrowser
This commit is contained in:
commit
f69151fc42
7 changed files with 85 additions and 8 deletions
|
@ -174,6 +174,10 @@ namespace MediaBrowser.Api.UserLibrary
|
||||||
{
|
{
|
||||||
items = items.Where(i => string.Compare(request.NameStartsWithOrGreater, i.SortName, StringComparison.CurrentCultureIgnoreCase) < 1);
|
items = items.Where(i => string.Compare(request.NameStartsWithOrGreater, i.SortName, StringComparison.CurrentCultureIgnoreCase) < 1);
|
||||||
}
|
}
|
||||||
|
if (!string.IsNullOrEmpty(request.NameStartsWith))
|
||||||
|
{
|
||||||
|
items = items.Where(i => string.Compare(request.NameStartsWith, i.SortName.Substring(0, 1), StringComparison.CurrentCultureIgnoreCase) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(request.NameLessThan))
|
if (!string.IsNullOrEmpty(request.NameLessThan))
|
||||||
{
|
{
|
||||||
|
@ -313,6 +317,9 @@ namespace MediaBrowser.Api.UserLibrary
|
||||||
[ApiMember(Name = "NameStartsWithOrGreater", Description = "Optional filter by items whose name is sorted equally or greater than a given input string.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
[ApiMember(Name = "NameStartsWithOrGreater", Description = "Optional filter by items whose name is sorted equally or greater than a given input string.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||||
public string NameStartsWithOrGreater { get; set; }
|
public string NameStartsWithOrGreater { get; set; }
|
||||||
|
|
||||||
|
[ApiMember(Name = "NameStartsWith", Description = "Optional filter by items whose name is sorted equally than a given input string.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||||
|
public string NameStartsWith { get; set; }
|
||||||
|
|
||||||
[ApiMember(Name = "NameLessThan", Description = "Optional filter by items whose name is sorted less than a given input string.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
[ApiMember(Name = "NameLessThan", Description = "Optional filter by items whose name is sorted less than a given input string.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||||
public string NameLessThan { get; set; }
|
public string NameLessThan { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -111,6 +111,12 @@ namespace MediaBrowser.Api.UserLibrary
|
||||||
[ApiMember(Name = "NameStartsWithOrGreater", Description = "Optional filter by items whose name is sorted equally or greater than a given input string.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
[ApiMember(Name = "NameStartsWithOrGreater", Description = "Optional filter by items whose name is sorted equally or greater than a given input string.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||||
public string NameStartsWithOrGreater { get; set; }
|
public string NameStartsWithOrGreater { get; set; }
|
||||||
|
|
||||||
|
[ApiMember(Name = "NameStartsWith", Description = "Optional filter by items whose name is sorted equally than a given input string.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||||
|
public string NameStartsWith { get; set; }
|
||||||
|
|
||||||
|
[ApiMember(Name = "NameLessThan", Description = "Optional filter by items whose name is equally or lesser than a given input string.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||||
|
public string NameLessThan { get; set; }
|
||||||
|
|
||||||
[ApiMember(Name = "AlbumArtistStartsWithOrGreater", Description = "Optional filter by items whose album artist is sorted equally or greater than a given input string.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
[ApiMember(Name = "AlbumArtistStartsWithOrGreater", Description = "Optional filter by items whose album artist is sorted equally or greater than a given input string.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||||
public string AlbumArtistStartsWithOrGreater { get; set; }
|
public string AlbumArtistStartsWithOrGreater { get; set; }
|
||||||
|
|
||||||
|
@ -768,6 +774,15 @@ namespace MediaBrowser.Api.UserLibrary
|
||||||
{
|
{
|
||||||
items = items.Where(i => string.Compare(request.NameStartsWithOrGreater, i.SortName, StringComparison.CurrentCultureIgnoreCase) < 1);
|
items = items.Where(i => string.Compare(request.NameStartsWithOrGreater, i.SortName, StringComparison.CurrentCultureIgnoreCase) < 1);
|
||||||
}
|
}
|
||||||
|
if (!string.IsNullOrEmpty(request.NameStartsWith))
|
||||||
|
{
|
||||||
|
items = items.Where(i => string.Compare(request.NameStartsWith, i.SortName.Substring(0, 1), StringComparison.CurrentCultureIgnoreCase) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(request.NameLessThan))
|
||||||
|
{
|
||||||
|
items = items.Where(i => string.Compare(request.NameLessThan, i.SortName, StringComparison.CurrentCultureIgnoreCase) == 1);
|
||||||
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(request.AlbumArtistStartsWithOrGreater))
|
if (!string.IsNullOrEmpty(request.AlbumArtistStartsWithOrGreater))
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,6 +19,8 @@ namespace MediaBrowser.Model.Configuration
|
||||||
|
|
||||||
public bool DeleteEmptyFolders { get; set; }
|
public bool DeleteEmptyFolders { get; set; }
|
||||||
|
|
||||||
|
public bool CopyOriginalFile { get; set; }
|
||||||
|
|
||||||
public TvFileOrganizationOptions()
|
public TvFileOrganizationOptions()
|
||||||
{
|
{
|
||||||
MinFileSizeMb = 50;
|
MinFileSizeMb = 50;
|
||||||
|
@ -31,6 +33,8 @@ namespace MediaBrowser.Model.Configuration
|
||||||
MultiEpisodeNamePattern = "%sn - %sx%0e-x%0ed - %en.%ext";
|
MultiEpisodeNamePattern = "%sn - %sx%0e-x%0ed - %en.%ext";
|
||||||
SeasonFolderPattern = "Season %s";
|
SeasonFolderPattern = "Season %s";
|
||||||
SeasonZeroFolderName = "Season 0";
|
SeasonZeroFolderName = "Season 0";
|
||||||
|
|
||||||
|
CopyOriginalFile = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -218,6 +218,18 @@ namespace MediaBrowser.Model.Querying
|
||||||
/// <value>The name starts with or greater.</value>
|
/// <value>The name starts with or greater.</value>
|
||||||
public string NameStartsWithOrGreater { get; set; }
|
public string NameStartsWithOrGreater { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the name starts with.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The name starts with or greater.</value>
|
||||||
|
public string NameStartsWith { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the name starts with.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The name lessthan.</value>
|
||||||
|
public string NameLessThan { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the album artist starts with or greater.
|
/// Gets or sets the album artist starts with or greater.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -86,6 +86,10 @@ namespace MediaBrowser.Model.Querying
|
||||||
public string NameStartsWithOrGreater { get; set; }
|
public string NameStartsWithOrGreater { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// Gets or sets the name starts with
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The name starts with or greater.</value>
|
||||||
|
public string NameStartsWith { get; set; }
|
||||||
/// Gets or sets the name less than.
|
/// Gets or sets the name less than.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The name less than.</value>
|
/// <value>The name less than.</value>
|
||||||
|
|
|
@ -171,7 +171,9 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
|
||||||
var fileExists = File.Exists(result.TargetPath);
|
var fileExists = File.Exists(result.TargetPath);
|
||||||
var otherDuplicatePaths = GetOtherDuplicatePaths(result.TargetPath, series, seasonNumber, episodeNumber, endingEpiosdeNumber);
|
var otherDuplicatePaths = GetOtherDuplicatePaths(result.TargetPath, series, seasonNumber, episodeNumber, endingEpiosdeNumber);
|
||||||
|
|
||||||
if (!overwriteExisting && (fileExists || otherDuplicatePaths.Count > 0))
|
if (!overwriteExisting)
|
||||||
|
{
|
||||||
|
if (fileExists || otherDuplicatePaths.Count > 0)
|
||||||
{
|
{
|
||||||
result.Status = FileSortingStatus.SkippedExisting;
|
result.Status = FileSortingStatus.SkippedExisting;
|
||||||
result.StatusMessage = string.Empty;
|
result.StatusMessage = string.Empty;
|
||||||
|
@ -179,6 +181,17 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (options.CopyOriginalFile && fileExists && IsSameEpisode(sourcePath, newPath))
|
||||||
|
{
|
||||||
|
_logger.Info("File {0} already copied to new path {1}, stopping organization", sourcePath, newPath);
|
||||||
|
result.Status = FileSortingStatus.SkippedExisting;
|
||||||
|
result.StatusMessage = string.Empty;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PerformFileSorting(options, result);
|
PerformFileSorting(options, result);
|
||||||
|
|
||||||
if (overwriteExisting)
|
if (overwriteExisting)
|
||||||
|
@ -266,7 +279,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (copy)
|
if (copy || options.CopyOriginalFile)
|
||||||
{
|
{
|
||||||
File.Copy(result.OriginalPath, result.TargetPath, true);
|
File.Copy(result.OriginalPath, result.TargetPath, true);
|
||||||
}
|
}
|
||||||
|
@ -293,7 +306,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
|
||||||
_libraryMonitor.ReportFileSystemChangeComplete(result.TargetPath, true);
|
_libraryMonitor.ReportFileSystemChangeComplete(result.TargetPath, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (copy)
|
if (copy && !options.CopyOriginalFile)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -439,5 +452,27 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
|
||||||
.Replace("%0e", episodeNumber.ToString("00", _usCulture))
|
.Replace("%0e", episodeNumber.ToString("00", _usCulture))
|
||||||
.Replace("%00e", episodeNumber.ToString("000", _usCulture));
|
.Replace("%00e", episodeNumber.ToString("000", _usCulture));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsSameEpisode(string sourcePath, string newPath)
|
||||||
|
{
|
||||||
|
|
||||||
|
FileInfo sourceFileInfo = new FileInfo(sourcePath);
|
||||||
|
FileInfo destinationFileInfo = new FileInfo(newPath);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (sourceFileInfo.Length == destinationFileInfo.Length)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (FileNotFoundException)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
|
||||||
var organizer = new EpisodeFileOrganizer(_organizationService, _config, _fileSystem, _logger, _libraryManager,
|
var organizer = new EpisodeFileOrganizer(_organizationService, _config, _fileSystem, _logger, _libraryManager,
|
||||||
_libraryMonitor, _providerManager);
|
_libraryMonitor, _providerManager);
|
||||||
|
|
||||||
var result = await organizer.OrganizeEpisodeFile(file.FullName, options, false, cancellationToken).ConfigureAwait(false);
|
var result = await organizer.OrganizeEpisodeFile(file.FullName, options, options.OverwriteExistingEpisodes, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
if (result.Status == FileSortingStatus.Success)
|
if (result.Status == FileSortingStatus.Success)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue