From 7d23dea414c57a8dff6bdd31176c381bf2bac25f Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 30 Jan 2014 00:20:18 -0500 Subject: fixes #672 - Support path mapping --- .../Dto/DtoService.cs | 45 +++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index b427b0c45..84033f9ad 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; @@ -8,6 +9,7 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Session; +using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; @@ -31,8 +33,9 @@ namespace MediaBrowser.Server.Implementations.Dto private readonly IItemRepository _itemRepo; private readonly IImageProcessor _imageProcessor; + private readonly IServerConfigurationManager _config; - public DtoService(ILogger logger, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataRepository, IItemRepository itemRepo, IImageProcessor imageProcessor) + public DtoService(ILogger logger, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataRepository, IItemRepository itemRepo, IImageProcessor imageProcessor, IServerConfigurationManager config) { _logger = logger; _libraryManager = libraryManager; @@ -40,6 +43,7 @@ namespace MediaBrowser.Server.Implementations.Dto _userDataRepository = userDataRepository; _itemRepo = itemRepo; _imageProcessor = imageProcessor; + _config = config; } /// @@ -891,6 +895,7 @@ namespace MediaBrowser.Server.Implementations.Dto if (fields.Contains(ItemFields.Path)) { dto.Path = item.Path; + dto.MappedPaths = GetMappedPaths(item); } dto.PremiereDate = item.PremiereDate; @@ -1142,6 +1147,44 @@ namespace MediaBrowser.Server.Implementations.Dto } } + private List GetMappedPaths(BaseItem item) + { + var list = new List(); + + var locationType = item.LocationType; + + if (locationType == LocationType.FileSystem || locationType == LocationType.Offline) + { + var path = item.Path; + var mappedPaths = _config.Configuration.PathSubstitutions + .Select(p => GetMappedPath(path, p)) + .Where(p => !string.Equals(p, path, StringComparison.OrdinalIgnoreCase)) + .Distinct(StringComparer.OrdinalIgnoreCase); + + list.AddRange(mappedPaths); + } + + return list; + } + + private string GetMappedPath(string path, PathSubstitution map) + { + var toValue = map.To ?? string.Empty; + + path = path.Replace(map.From, toValue, StringComparison.OrdinalIgnoreCase); + + if (toValue.IndexOf('/') != -1) + { + path = path.Replace('\\', '/'); + } + else + { + path = path.Replace('/', '\\'); + } + + return path; + } + private void SetProductionLocations(BaseItem item, BaseItemDto dto) { var hasProductionLocations = item as IHasProductionLocations; -- cgit v1.2.3