From 1bf4447dcef2fb5bdfd1791b01f5c06cb5361d47 Mon Sep 17 00:00:00 2001 From: Tensre Date: Wed, 5 Mar 2014 20:44:29 -0800 Subject: Auto-Organize Copy/Move Option, Fix for Overwrite Existing File Addition of the option in Auto-Organize to copy or move files from watch folder. Fix to use the Overwrite Existing File option from the config rather than hardcoded value. --- .../FileOrganization/EpisodeFileOrganizer.cs | 49 ++++++++++++++++++---- .../FileOrganization/TvFolderOrganizer.cs | 2 +- 2 files changed, 43 insertions(+), 8 deletions(-) (limited to 'MediaBrowser.Server.Implementations') 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) { -- cgit v1.2.3 From 2349c8099d04c6c0631cd33e6c74b404381946ab Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 6 Mar 2014 00:17:13 -0500 Subject: start on manual collection creation --- MediaBrowser.Api/AlbumsService.cs | 115 ----------------- MediaBrowser.Api/InstantMixService.cs | 143 --------------------- MediaBrowser.Api/MediaBrowser.Api.csproj | 4 +- MediaBrowser.Api/Music/AlbumsService.cs | 115 +++++++++++++++++ MediaBrowser.Api/Music/InstantMixService.cs | 143 +++++++++++++++++++++ MediaBrowser.Api/TvShowsService.cs | 89 +++++++++++-- .../Collections/CollectionCreationOptions.cs | 13 ++ .../Collections/ICollectionManager.cs | 31 +++++ MediaBrowser.Controller/Entities/UserRootFolder.cs | 3 +- .../MediaBrowser.Controller.csproj | 2 + MediaBrowser.Providers/Music/MusicExternalIds.cs | 2 +- .../Collections/CollectionManager.cs | 79 ++++++++++++ .../EntryPoints/ExternalPortForwarding.cs | 2 + .../Library/Resolvers/Audio/MusicAlbumResolver.cs | 2 +- .../LiveTv/ChannelImageProvider.cs | 8 +- .../LiveTv/ProgramImageProvider.cs | 8 +- .../LiveTv/RecordingImageProvider.cs | 8 +- .../MediaBrowser.Server.Implementations.csproj | 6 +- .../packages.config | 2 +- 19 files changed, 495 insertions(+), 280 deletions(-) delete mode 100644 MediaBrowser.Api/AlbumsService.cs delete mode 100644 MediaBrowser.Api/InstantMixService.cs create mode 100644 MediaBrowser.Api/Music/AlbumsService.cs create mode 100644 MediaBrowser.Api/Music/InstantMixService.cs create mode 100644 MediaBrowser.Controller/Collections/CollectionCreationOptions.cs create mode 100644 MediaBrowser.Controller/Collections/ICollectionManager.cs create mode 100644 MediaBrowser.Server.Implementations/Collections/CollectionManager.cs (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Api/AlbumsService.cs b/MediaBrowser.Api/AlbumsService.cs deleted file mode 100644 index 5787ad180..000000000 --- a/MediaBrowser.Api/AlbumsService.cs +++ /dev/null @@ -1,115 +0,0 @@ -using MediaBrowser.Controller.Dto; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Persistence; -using ServiceStack; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace MediaBrowser.Api -{ - [Route("/Albums/{Id}/Similar", "GET")] - [Api(Description = "Finds albums similar to a given album.")] - public class GetSimilarAlbums : BaseGetSimilarItemsFromItem - { - } - - public class AlbumsService : BaseApiService - { - /// - /// The _user manager - /// - private readonly IUserManager _userManager; - - /// - /// The _user data repository - /// - private readonly IUserDataManager _userDataRepository; - /// - /// The _library manager - /// - private readonly ILibraryManager _libraryManager; - private readonly IItemRepository _itemRepo; - private readonly IDtoService _dtoService; - - public AlbumsService(IUserManager userManager, IUserDataManager userDataRepository, ILibraryManager libraryManager, IItemRepository itemRepo, IDtoService dtoService) - { - _userManager = userManager; - _userDataRepository = userDataRepository; - _libraryManager = libraryManager; - _itemRepo = itemRepo; - _dtoService = dtoService; - } - - /// - /// Gets the specified request. - /// - /// The request. - /// System.Object. - public object Get(GetSimilarAlbums request) - { - var result = SimilarItemsHelper.GetSimilarItemsResult(_userManager, - _itemRepo, - _libraryManager, - _userDataRepository, - _dtoService, - Logger, - request, item => item is MusicAlbum, - GetAlbumSimilarityScore); - - return ToOptimizedSerializedResultUsingCache(result); - } - - /// - /// Gets the album similarity score. - /// - /// The item1. - /// The item2. - /// System.Int32. - private int GetAlbumSimilarityScore(BaseItem item1, BaseItem item2) - { - var points = SimilarItemsHelper.GetSimiliarityScore(item1, item2); - - var album1 = (MusicAlbum)item1; - var album2 = (MusicAlbum)item2; - - var artists1 = album1.GetRecursiveChildren() - .OfType