aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-03-06 00:17:28 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-03-06 00:17:28 -0500
commitf69151fc425dfb4b31721c39eef4c8faf0a80e72 (patch)
tree031f52d1de316755fbf44b1be9deec04811df363
parent2349c8099d04c6c0631cd33e6c74b404381946ab (diff)
parentaea62df07f9bd70ff79c2fbced1a658b7b4667d8 (diff)
Merge branch 'master' of https://github.com/MediaBrowser/MediaBrowser
-rw-r--r--MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs7
-rw-r--r--MediaBrowser.Api/UserLibrary/ItemsService.cs15
-rw-r--r--MediaBrowser.Model/Configuration/AutoOrganize.cs4
-rw-r--r--MediaBrowser.Model/Querying/ItemQuery.cs12
-rw-r--r--MediaBrowser.Model/Querying/ItemsByNameQuery.cs4
-rw-r--r--MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs49
-rw-r--r--MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs2
7 files changed, 85 insertions, 8 deletions
diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
index 5c2c9967e..12b3fd015 100644
--- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
+++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
@@ -174,6 +174,10 @@ namespace MediaBrowser.Api.UserLibrary
{
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))
{
@@ -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")]
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")]
public string NameLessThan { get; set; }
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs
index 871c9aecb..b040d3dd8 100644
--- a/MediaBrowser.Api/UserLibrary/ItemsService.cs
+++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs
@@ -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")]
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")]
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);
}
+ 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))
{
diff --git a/MediaBrowser.Model/Configuration/AutoOrganize.cs b/MediaBrowser.Model/Configuration/AutoOrganize.cs
index a30aa36d8..fe32d4a80 100644
--- a/MediaBrowser.Model/Configuration/AutoOrganize.cs
+++ b/MediaBrowser.Model/Configuration/AutoOrganize.cs
@@ -19,6 +19,8 @@ namespace MediaBrowser.Model.Configuration
public bool DeleteEmptyFolders { get; set; }
+ public bool CopyOriginalFile { get; set; }
+
public TvFileOrganizationOptions()
{
MinFileSizeMb = 50;
@@ -31,6 +33,8 @@ namespace MediaBrowser.Model.Configuration
MultiEpisodeNamePattern = "%sn - %sx%0e-x%0ed - %en.%ext";
SeasonFolderPattern = "Season %s";
SeasonZeroFolderName = "Season 0";
+
+ CopyOriginalFile = false;
}
}
}
diff --git a/MediaBrowser.Model/Querying/ItemQuery.cs b/MediaBrowser.Model/Querying/ItemQuery.cs
index bc769b786..aee1ca947 100644
--- a/MediaBrowser.Model/Querying/ItemQuery.cs
+++ b/MediaBrowser.Model/Querying/ItemQuery.cs
@@ -219,6 +219,18 @@ namespace MediaBrowser.Model.Querying
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>
/// Gets or sets the album artist starts with or greater.
/// </summary>
/// <value>The album artist starts with or greater.</value>
diff --git a/MediaBrowser.Model/Querying/ItemsByNameQuery.cs b/MediaBrowser.Model/Querying/ItemsByNameQuery.cs
index eafc322ab..4227dc0c5 100644
--- a/MediaBrowser.Model/Querying/ItemsByNameQuery.cs
+++ b/MediaBrowser.Model/Querying/ItemsByNameQuery.cs
@@ -86,6 +86,10 @@ namespace MediaBrowser.Model.Querying
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; }
/// Gets or sets the name less than.
/// </summary>
/// <value>The name less than.</value>
diff --git a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs b/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs
index b91067dd7..e5ffd639b 100644
--- a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs
+++ b/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs
@@ -171,14 +171,27 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
var fileExists = File.Exists(result.TargetPath);
var otherDuplicatePaths = GetOtherDuplicatePaths(result.TargetPath, series, seasonNumber, episodeNumber, endingEpiosdeNumber);
- if (!overwriteExisting && (fileExists || otherDuplicatePaths.Count > 0))
+ if (!overwriteExisting)
{
- result.Status = FileSortingStatus.SkippedExisting;
- result.StatusMessage = string.Empty;
- result.DuplicatePaths = otherDuplicatePaths;
- return;
+ if (fileExists || otherDuplicatePaths.Count > 0)
+ {
+ result.Status = FileSortingStatus.SkippedExisting;
+ result.StatusMessage = string.Empty;
+ result.DuplicatePaths = otherDuplicatePaths;
+ 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);
if (overwriteExisting)
@@ -266,7 +279,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
try
{
- if (copy)
+ if (copy || options.CopyOriginalFile)
{
File.Copy(result.OriginalPath, result.TargetPath, true);
}
@@ -293,7 +306,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
_libraryMonitor.ReportFileSystemChangeComplete(result.TargetPath, true);
}
- if (copy)
+ if (copy && !options.CopyOriginalFile)
{
try
{
@@ -439,5 +452,27 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
.Replace("%0e", episodeNumber.ToString("00", _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;
+
+ }
}
}
diff --git a/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs b/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs
index 7edcf9739..82bb9862c 100644
--- a/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs
+++ b/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs
@@ -61,7 +61,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
var organizer = new EpisodeFileOrganizer(_organizationService, _config, _fileSystem, _logger, _libraryManager,
_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)
{