diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations')
71 files changed, 314 insertions, 175 deletions
diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelItemImageProvider.cs b/MediaBrowser.Server.Implementations/Channels/ChannelItemImageProvider.cs index 042beb7e56..55e6e0103f 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelItemImageProvider.cs +++ b/MediaBrowser.Server.Implementations/Channels/ChannelItemImageProvider.cs @@ -33,12 +33,12 @@ namespace MediaBrowser.Server.Implementations.Channels var imageResponse = new DynamicImageResponse(); - if (!string.IsNullOrEmpty(channelItem.OriginalImageUrl)) + if (!string.IsNullOrEmpty(channelItem.ExternalImagePath)) { var options = new HttpRequestOptions { CancellationToken = cancellationToken, - Url = channelItem.OriginalImageUrl + Url = channelItem.ExternalImagePath }; var response = await _httpClient.GetResponse(options).ConfigureAwait(false); @@ -74,7 +74,7 @@ namespace MediaBrowser.Server.Implementations.Channels if (channelItem != null) { - return !channelItem.HasImage(ImageType.Primary) && !string.IsNullOrWhiteSpace(channelItem.OriginalImageUrl); + return !channelItem.HasImage(ImageType.Primary) && !string.IsNullOrWhiteSpace(channelItem.ExternalImagePath); } return false; } diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs index 9b2f812172..eccce75d4c 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs +++ b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs @@ -25,6 +25,7 @@ using System.Linq; using System.Net; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.Channels { @@ -388,18 +389,15 @@ namespace MediaBrowser.Server.Implementations.Channels var path = Channel.GetInternalMetadataPath(_config.ApplicationPaths.InternalMetadataPath, id); - var fileInfo = new DirectoryInfo(path); - var isNew = false; - if (!fileInfo.Exists) + if (!_fileSystem.DirectoryExists(path)) { _logger.Debug("Creating directory {0}", path); _fileSystem.CreateDirectory(path); - fileInfo = new DirectoryInfo(path); - if (!fileInfo.Exists) + if (!_fileSystem.DirectoryExists(path)) { throw new IOException("Path not created: " + path); } @@ -415,8 +413,8 @@ namespace MediaBrowser.Server.Implementations.Channels { Name = channelInfo.Name, Id = id, - DateCreated = _fileSystem.GetCreationTimeUtc(fileInfo), - DateModified = _fileSystem.GetLastWriteTimeUtc(fileInfo), + DateCreated = _fileSystem.GetCreationTimeUtc(path), + DateModified = _fileSystem.GetLastWriteTimeUtc(path), Path = path, ChannelId = channelInfo.Name.GetMD5().ToString("N") }; @@ -1182,7 +1180,7 @@ namespace MediaBrowser.Server.Implementations.Channels _logger.ErrorException("Error retrieving channel item from database", ex); } - if (item == null || !string.Equals(item.DataVersion, channnelDataVersion, StringComparison.Ordinal)) + if (item == null || !string.Equals(item.ExternalEtag, channnelDataVersion, StringComparison.Ordinal)) { item = new T(); isNew = true; @@ -1192,7 +1190,7 @@ namespace MediaBrowser.Server.Implementations.Channels isNew = false; } - item.DataVersion = channnelDataVersion; + item.ExternalEtag = channnelDataVersion; item.Id = id; return item; } @@ -1231,17 +1229,19 @@ namespace MediaBrowser.Server.Implementations.Channels item.ProviderIds = info.ProviderIds; item.OfficialRating = info.OfficialRating; - item.DateCreated = info.DateCreated.HasValue ? - info.DateCreated.Value : - DateTime.UtcNow; + item.DateCreated = info.DateCreated ?? DateTime.UtcNow; } var channelItem = (IChannelItem)item; - channelItem.OriginalImageUrl = info.ImageUrl; - channelItem.ExternalId = info.Id; + channelItem.ExternalImagePath = info.ImageUrl; channelItem.ChannelId = internalChannelId.ToString("N"); - channelItem.ChannelItemType = info.Type; + + if (!string.Equals(channelItem.ExternalId, info.Id, StringComparison.OrdinalIgnoreCase)) + { + isNew = true; + } + channelItem.ExternalId = info.Id; if (isNew) { diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs b/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs index 976fa56153..0321af66b3 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs +++ b/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs @@ -143,7 +143,7 @@ namespace MediaBrowser.Server.Implementations.Channels private async Task CleanChannel(Guid id, CancellationToken cancellationToken) { - _logger.Debug("Cleaning channel {0} from database", id); + _logger.Info("Cleaning channel {0} from database", id); // Delete all channel items var allIds = _libraryManager.GetItemIds(new InternalItemsQuery diff --git a/MediaBrowser.Server.Implementations/Collections/CollectionImageProvider.cs b/MediaBrowser.Server.Implementations/Collections/CollectionImageProvider.cs index f5ddbdb785..b88e459809 100644 --- a/MediaBrowser.Server.Implementations/Collections/CollectionImageProvider.cs +++ b/MediaBrowser.Server.Implementations/Collections/CollectionImageProvider.cs @@ -12,6 +12,7 @@ using MoreLinq; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.Collections { diff --git a/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs b/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs index 430bae38e6..ac27a0ab4e 100644 --- a/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs +++ b/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs @@ -12,6 +12,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.Collections { diff --git a/MediaBrowser.Server.Implementations/Collections/CollectionsDynamicFolder.cs b/MediaBrowser.Server.Implementations/Collections/CollectionsDynamicFolder.cs index 0fc7fb3f63..85b143a409 100644 --- a/MediaBrowser.Server.Implementations/Collections/CollectionsDynamicFolder.cs +++ b/MediaBrowser.Server.Implementations/Collections/CollectionsDynamicFolder.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Controller.Entities; using System.IO; +using CommonIO; using MediaBrowser.Common.IO; namespace MediaBrowser.Server.Implementations.Collections diff --git a/MediaBrowser.Server.Implementations/Configuration/ServerConfigurationManager.cs b/MediaBrowser.Server.Implementations/Configuration/ServerConfigurationManager.cs index 050b79db78..968e4ef1da 100644 --- a/MediaBrowser.Server.Implementations/Configuration/ServerConfigurationManager.cs +++ b/MediaBrowser.Server.Implementations/Configuration/ServerConfigurationManager.cs @@ -15,6 +15,7 @@ using MediaBrowser.Model.Serialization; using System; using System.IO; using System.Linq; +using CommonIO; using MediaBrowser.Common.IO; namespace MediaBrowser.Server.Implementations.Configuration diff --git a/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs b/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs index a8900fa5b1..c7e4379318 100644 --- a/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs +++ b/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs @@ -10,6 +10,7 @@ using System.IO; using System.Net; using System.Text; using System.Threading; +using CommonIO; using MediaBrowser.Common.IO; namespace MediaBrowser.Server.Implementations.Connect diff --git a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs b/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs index f6e91528d5..4864462913 100644 --- a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs +++ b/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs @@ -23,6 +23,7 @@ using System.Net; using System.Text; using System.Threading; using System.Threading.Tasks; +using CommonIO; using MediaBrowser.Common.IO; namespace MediaBrowser.Server.Implementations.Connect diff --git a/MediaBrowser.Server.Implementations/Devices/CameraUploadsFolder.cs b/MediaBrowser.Server.Implementations/Devices/CameraUploadsFolder.cs index 15567703d9..6d7265972f 100644 --- a/MediaBrowser.Server.Implementations/Devices/CameraUploadsFolder.cs +++ b/MediaBrowser.Server.Implementations/Devices/CameraUploadsFolder.cs @@ -3,6 +3,7 @@ using MediaBrowser.Controller.Entities; using System; using System.IO; using System.Linq; +using CommonIO; using MediaBrowser.Common.IO; namespace MediaBrowser.Server.Implementations.Devices diff --git a/MediaBrowser.Server.Implementations/Devices/DeviceManager.cs b/MediaBrowser.Server.Implementations/Devices/DeviceManager.cs index 548a2222a9..3615146257 100644 --- a/MediaBrowser.Server.Implementations/Devices/DeviceManager.cs +++ b/MediaBrowser.Server.Implementations/Devices/DeviceManager.cs @@ -17,6 +17,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.Devices { diff --git a/MediaBrowser.Server.Implementations/Devices/DeviceRepository.cs b/MediaBrowser.Server.Implementations/Devices/DeviceRepository.cs index 853217826c..43b1e693cc 100644 --- a/MediaBrowser.Server.Implementations/Devices/DeviceRepository.cs +++ b/MediaBrowser.Server.Implementations/Devices/DeviceRepository.cs @@ -12,6 +12,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.Devices { diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index 07374a6c30..4c54a43625 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -26,6 +26,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using CommonIO; namespace MediaBrowser.Server.Implementations.Dto { @@ -1041,6 +1042,7 @@ namespace MediaBrowser.Server.Implementations.Dto dto.IsFolder = item.IsFolder; dto.MediaType = item.MediaType; dto.LocationType = item.LocationType; + dto.IsHD = item.IsHD; dto.PreferredMetadataCountryCode = item.PreferredMetadataCountryCode; dto.PreferredMetadataLanguage = item.PreferredMetadataLanguage; @@ -1307,7 +1309,6 @@ namespace MediaBrowser.Server.Implementations.Dto dto.VideoType = video.VideoType; dto.Video3DFormat = video.Video3DFormat; dto.IsoType = video.IsoType; - dto.IsHD = video.IsHD; if (video.AdditionalParts.Count != 0) { @@ -1577,7 +1578,7 @@ namespace MediaBrowser.Server.Implementations.Dto { foreach (var map in _config.Configuration.PathSubstitutions) { - path = _fileSystem.SubstitutePath(path, map.From, map.To); + path = _libraryManager.SubstitutePath(path, map.From, map.To); } } diff --git a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/RemoteNotifications.cs b/MediaBrowser.Server.Implementations/EntryPoints/Notifications/RemoteNotifications.cs index 932e94b2af..9a20505a54 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/RemoteNotifications.cs +++ b/MediaBrowser.Server.Implementations/EntryPoints/Notifications/RemoteNotifications.cs @@ -13,6 +13,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications { diff --git a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs b/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs index dc5b070220..e36813d11c 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs +++ b/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs @@ -17,6 +17,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.FileOrganization { diff --git a/MediaBrowser.Server.Implementations/FileOrganization/FileOrganizationService.cs b/MediaBrowser.Server.Implementations/FileOrganization/FileOrganizationService.cs index a6116ab096..839a85adb9 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/FileOrganizationService.cs +++ b/MediaBrowser.Server.Implementations/FileOrganization/FileOrganizationService.cs @@ -13,6 +13,7 @@ using System; using System.IO; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.FileOrganization { diff --git a/MediaBrowser.Server.Implementations/FileOrganization/OrganizerScheduledTask.cs b/MediaBrowser.Server.Implementations/FileOrganization/OrganizerScheduledTask.cs index f993e1fc33..f1fe5539f9 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/OrganizerScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/FileOrganization/OrganizerScheduledTask.cs @@ -10,6 +10,7 @@ using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.FileOrganization { diff --git a/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs b/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs index 12cf86c177..9a65ef6603 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs +++ b/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs @@ -11,6 +11,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.FileOrganization { @@ -35,15 +36,29 @@ namespace MediaBrowser.Server.Implementations.FileOrganization _providerManager = providerManager; } - public async Task Organize(TvFileOrganizationOptions options, CancellationToken cancellationToken, IProgress<double> progress) + private bool EnableOrganization(FileSystemMetadata fileInfo, TvFileOrganizationOptions options) { var minFileBytes = options.MinFileSizeMb * 1024 * 1024; + try + { + return _libraryManager.IsVideoFile(fileInfo.FullName) && fileInfo.Length >= minFileBytes; + } + catch (Exception ex) + { + _logger.ErrorException("Error organizing file {0}", ex, fileInfo.Name); + } + + return false; + } + + public async Task Organize(TvFileOrganizationOptions options, CancellationToken cancellationToken, IProgress<double> progress) + { var watchLocations = options.WatchLocations.ToList(); var eligibleFiles = watchLocations.SelectMany(GetFilesToOrganize) .OrderBy(_fileSystem.GetCreationTimeUtc) - .Where(i => _libraryManager.IsVideoFile(i.FullName) && i.Length >= minFileBytes) + .Where(i => EnableOrganization(i, options)) .ToList(); var processedFolders = new HashSet<string>(); @@ -113,7 +128,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization /// </summary> /// <param name="path">The path.</param> /// <returns>IEnumerable{FileInfo}.</returns> - private IEnumerable<FileInfo> GetFilesToOrganize(string path) + private IEnumerable<FileSystemMetadata> GetFilesToOrganize(string path) { try { @@ -124,7 +139,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization { _logger.ErrorException("Error getting files from {0}", ex, path); - return new List<FileInfo>(); + return new List<FileSystemMetadata>(); } } diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpResultFactory.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpResultFactory.cs index 9dc8d94e29..080441dda4 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/HttpResultFactory.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/HttpResultFactory.cs @@ -12,6 +12,7 @@ using System.IO; using System.Net; using System.Text; using System.Threading.Tasks; +using CommonIO; using MimeTypes = MediaBrowser.Model.Net.MimeTypes; namespace MediaBrowser.Server.Implementations.HttpServer diff --git a/MediaBrowser.Server.Implementations/HttpServer/LoggerUtils.cs b/MediaBrowser.Server.Implementations/HttpServer/LoggerUtils.cs index 5558c24d73..f038591aa7 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/LoggerUtils.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/LoggerUtils.cs @@ -27,7 +27,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer var msg = "HTTP Response " + statusCode + " to " + endPoint + responseTime; - logger.LogMultiline(msg, LogSeverity.Debug, log); + logger.LogMultiline(msg, LogSeverity.Info, log); } } } diff --git a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs b/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs index b4da407026..f6b14fcab3 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs @@ -220,7 +220,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security { if (string.IsNullOrWhiteSpace(token)) { - throw new SecurityException("Access token is invalid or expired."); + throw new SecurityException("Access token is required."); } var info = GetTokenInfo(request); diff --git a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthorizationContext.cs b/MediaBrowser.Server.Implementations/HttpServer/Security/AuthorizationContext.cs index ae5ce796ea..509a00ff9b 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthorizationContext.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/Security/AuthorizationContext.cs @@ -62,10 +62,14 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security auth.TryGetValue("Version", out version); } - var token = httpReq.Headers["X-MediaBrowser-Token"]; + var token = httpReq.Headers["X-Emby-Token"]; if (string.IsNullOrWhiteSpace(token)) { + token = httpReq.Headers["X-MediaBrowser-Token"]; + } + if (string.IsNullOrWhiteSpace(token)) + { token = httpReq.QueryString["api_key"]; } diff --git a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs index fdb27d40db..f8178c1155 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs @@ -191,7 +191,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp var type = request.IsWebSocketRequest ? "Web Socket" : "HTTP " + request.HttpMethod; - logger.LogMultiline(type + " " + request.Url, LogSeverity.Debug, log); + logger.LogMultiline(type + " " + request.Url, LogSeverity.Info, log); } private void HandleError(Exception ex, HttpListenerContext context) diff --git a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs index cb9d5a09fa..f4a3ba8df5 100644 --- a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs +++ b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs @@ -15,6 +15,8 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; +using MediaBrowser.Controller; namespace MediaBrowser.Server.Implementations.IO { @@ -113,11 +115,12 @@ namespace MediaBrowser.Server.Implementations.IO private IServerConfigurationManager ConfigurationManager { get; set; } private readonly IFileSystem _fileSystem; + private readonly IServerApplicationHost _appHost; /// <summary> /// Initializes a new instance of the <see cref="LibraryMonitor" /> class. /// </summary> - public LibraryMonitor(ILogManager logManager, ITaskManager taskManager, ILibraryManager libraryManager, IServerConfigurationManager configurationManager, IFileSystem fileSystem) + public LibraryMonitor(ILogManager logManager, ITaskManager taskManager, ILibraryManager libraryManager, IServerConfigurationManager configurationManager, IFileSystem fileSystem, IServerApplicationHost appHost) { if (taskManager == null) { @@ -129,6 +132,7 @@ namespace MediaBrowser.Server.Implementations.IO Logger = logManager.GetLogger(GetType().Name); ConfigurationManager = configurationManager; _fileSystem = fileSystem; + _appHost = appHost; SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged; } @@ -153,6 +157,11 @@ namespace MediaBrowser.Server.Implementations.IO { get { + if (!_appHost.SupportsLibraryMonitor) + { + return false; + } + switch (ConfigurationManager.Configuration.EnableLibraryMonitor) { case AutoOnOff.Auto: diff --git a/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs b/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs index ce3f0c66c9..3ead061ca0 100644 --- a/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs +++ b/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs @@ -15,6 +15,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; using MediaBrowser.Common.IO; namespace MediaBrowser.Server.Implementations.Intros diff --git a/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs b/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs index be8c1cfbd7..9035d6479f 100644 --- a/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs +++ b/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs @@ -7,6 +7,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using CommonIO; namespace MediaBrowser.Server.Implementations.Library { diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 0be871b0e1..93e660fd36 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -34,6 +34,8 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; +using MediaBrowser.Model.Extensions; using MoreLinq; using SortOrder = MediaBrowser.Model.Entities.SortOrder; @@ -549,13 +551,13 @@ namespace MediaBrowser.Server.Implementations.Library return item; } - public BaseItem ResolvePath(FileSystemInfo fileInfo, + public BaseItem ResolvePath(FileSystemMetadata fileInfo, Folder parent = null) { return ResolvePath(fileInfo, new DirectoryService(_logger, _fileSystem), parent); } - private BaseItem ResolvePath(FileSystemInfo fileInfo, IDirectoryService directoryService, Folder parent = null, string collectionType = null) + private BaseItem ResolvePath(FileSystemMetadata fileInfo, IDirectoryService directoryService, Folder parent = null, string collectionType = null) { if (fileInfo == null) { @@ -599,7 +601,7 @@ namespace MediaBrowser.Server.Implementations.Library { var paths = NormalizeRootPathList(fileSystemDictionary.Keys); - fileSystemDictionary = paths.Select(i => (FileSystemInfo)new DirectoryInfo(i)).ToDictionary(i => i.FullName); + fileSystemDictionary = paths.Select(_fileSystem.GetDirectoryInfo).ToDictionary(i => i.FullName); } args.FileSystemDictionary = fileSystemDictionary; @@ -642,7 +644,7 @@ namespace MediaBrowser.Server.Implementations.Library return !args.ContainsFileSystemEntryByName(".ignore"); } - public IEnumerable<BaseItem> ResolvePaths(IEnumerable<FileSystemInfo> files, IDirectoryService directoryService, Folder parent, string collectionType) + public IEnumerable<BaseItem> ResolvePaths(IEnumerable<FileSystemMetadata> files, IDirectoryService directoryService, Folder parent, string collectionType) { var fileList = files.ToList(); @@ -670,7 +672,7 @@ namespace MediaBrowser.Server.Implementations.Library return ResolveFileList(fileList, directoryService, parent, collectionType); } - private IEnumerable<BaseItem> ResolveFileList(IEnumerable<FileSystemInfo> fileList, IDirectoryService directoryService, Folder parent, string collectionType) + private IEnumerable<BaseItem> ResolveFileList(IEnumerable<FileSystemMetadata> fileList, IDirectoryService directoryService, Folder parent, string collectionType) { return fileList.Select(f => { @@ -697,7 +699,7 @@ namespace MediaBrowser.Server.Implementations.Library _fileSystem.CreateDirectory(rootFolderPath); - var rootFolder = GetItemById(GetNewItemId(rootFolderPath, typeof(AggregateFolder))) as AggregateFolder ?? (AggregateFolder)ResolvePath(new DirectoryInfo(rootFolderPath)); + var rootFolder = GetItemById(GetNewItemId(rootFolderPath, typeof(AggregateFolder))) as AggregateFolder ?? (AggregateFolder)ResolvePath(_fileSystem.GetDirectoryInfo(rootFolderPath)); // Add in the plug-in folders foreach (var child in PluginFolderCreators) @@ -752,7 +754,7 @@ namespace MediaBrowser.Server.Implementations.Library if (tmpItem == null) { - tmpItem = (UserRootFolder)ResolvePath(new DirectoryInfo(userRootPath)); + tmpItem = (UserRootFolder)ResolvePath(_fileSystem.GetDirectoryInfo(userRootPath)); } _userRootFolder = tmpItem; @@ -1185,7 +1187,8 @@ namespace MediaBrowser.Server.Implementations.Library private string GetCollectionType(string path) { - return new DirectoryInfo(path).EnumerateFiles("*.collection", SearchOption.TopDirectoryOnly) + return _fileSystem.GetFiles(path, false) + .Where(i => string.Equals(i.Extension, ".collection", StringComparison.OrdinalIgnoreCase)) .Select(i => _fileSystem.GetFileNameWithoutExtension(i)) .FirstOrDefault(); } @@ -2050,11 +2053,11 @@ namespace MediaBrowser.Server.Implementations.Library }; } - public IEnumerable<Video> FindTrailers(BaseItem owner, List<FileSystemInfo> fileSystemChildren, IDirectoryService directoryService) + public IEnumerable<Video> FindTrailers(BaseItem owner, List<FileSystemMetadata> fileSystemChildren, IDirectoryService directoryService) { - var files = fileSystemChildren.OfType<DirectoryInfo>() + var files = fileSystemChildren.Where(i => i.IsDirectory) .Where(i => string.Equals(i.Name, BaseItem.TrailerFolderName, StringComparison.OrdinalIgnoreCase)) - .SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly)) + .SelectMany(i => _fileSystem.GetFiles(i.FullName, false)) .ToList(); var videoListResolver = new VideoListResolver(GetNamingOptions(), new PatternsLogger()); @@ -2070,7 +2073,7 @@ namespace MediaBrowser.Server.Implementations.Library if (currentVideo != null) { - files.AddRange(currentVideo.Extras.Where(i => string.Equals(i.ExtraType, "trailer", StringComparison.OrdinalIgnoreCase)).Select(i => new FileInfo(i.Path))); + files.AddRange(currentVideo.Extras.Where(i => string.Equals(i.ExtraType, "trailer", StringComparison.OrdinalIgnoreCase)).Select(i => _fileSystem.GetFileInfo(i.Path))); } return ResolvePaths(files, directoryService, null, null) @@ -2093,11 +2096,11 @@ namespace MediaBrowser.Server.Implementations.Library }).OrderBy(i => i.Path).ToList(); } - public IEnumerable<Video> FindExtras(BaseItem owner, List<FileSystemInfo> fileSystemChildren, IDirectoryService directoryService) + public IEnumerable<Video> FindExtras(BaseItem owner, List<FileSystemMetadata> fileSystemChildren, IDirectoryService directoryService) { - var files = fileSystemChildren.OfType<DirectoryInfo>() + var files = fileSystemChildren.Where(i => i.IsDirectory) .Where(i => string.Equals(i.Name, "extras", StringComparison.OrdinalIgnoreCase) || string.Equals(i.Name, "specials", StringComparison.OrdinalIgnoreCase)) - .SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly)) + .SelectMany(i => _fileSystem.GetFiles(i.FullName, false)) .ToList(); var videoListResolver = new VideoListResolver(GetNamingOptions(), new PatternsLogger()); @@ -2113,7 +2116,7 @@ namespace MediaBrowser.Server.Implementations.Library if (currentVideo != null) { - files.AddRange(currentVideo.Extras.Where(i => !string.Equals(i.ExtraType, "trailer", StringComparison.OrdinalIgnoreCase)).Select(i => new FileInfo(i.Path))); + files.AddRange(currentVideo.Extras.Where(i => !string.Equals(i.ExtraType, "trailer", StringComparison.OrdinalIgnoreCase)).Select(i => _fileSystem.GetFileInfo(i.Path))); } return ResolvePaths(files, directoryService, null, null) @@ -2136,6 +2139,38 @@ namespace MediaBrowser.Server.Implementations.Library }).OrderBy(i => i.Path).ToList(); } + public string SubstitutePath(string path, string from, string to) + { + if (string.IsNullOrWhiteSpace(path)) + { + throw new ArgumentNullException("path"); + } + if (string.IsNullOrWhiteSpace(from)) + { + throw new ArgumentNullException("from"); + } + if (string.IsNullOrWhiteSpace(to)) + { + throw new ArgumentNullException("to"); + } + + var newPath = path.Replace(from, to, StringComparison.OrdinalIgnoreCase); + + if (!string.Equals(newPath, path)) + { + if (to.IndexOf('/') != -1) + { + newPath = newPath.Replace('\\', '/'); + } + else + { + newPath = newPath.Replace('/', '\\'); + } + } + + return newPath; + } + private void SetExtraTypeFromFilename(Video item) { var resolver = new ExtraResolver(GetNamingOptions(), new PatternsLogger(), new RegexProvider()); diff --git a/MediaBrowser.Server.Implementations/Library/MediaSourceManager.cs b/MediaBrowser.Server.Implementations/Library/MediaSourceManager.cs index b72da4d102..2f23aad1b4 100644 --- a/MediaBrowser.Server.Implementations/Library/MediaSourceManager.cs +++ b/MediaBrowser.Server.Implementations/Library/MediaSourceManager.cs @@ -15,6 +15,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; using MediaBrowser.Common.IO; namespace MediaBrowser.Server.Implementations.Library diff --git a/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs b/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs index dac6580951..100241d90e 100644 --- a/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs +++ b/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs @@ -6,6 +6,7 @@ using System; using System.IO; using System.Linq; using System.Text.RegularExpressions; +using CommonIO; namespace MediaBrowser.Server.Implementations.Library { @@ -88,7 +89,7 @@ namespace MediaBrowser.Server.Implementations.Library /// </summary> /// <param name="item">The item.</param> /// <param name="fileInfo">The file information.</param> - private static void EnsureName(BaseItem item, FileSystemInfo fileInfo) + private static void EnsureName(BaseItem item, FileSystemMetadata fileInfo) { // If the subclass didn't supply a name, add it here if (string.IsNullOrEmpty(item.Name) && !string.IsNullOrEmpty(item.Path)) @@ -179,7 +180,7 @@ namespace MediaBrowser.Server.Implementations.Library } } - private static void SetDateCreated(BaseItem item, IFileSystem fileSystem, FileSystemInfo info) + private static void SetDateCreated(BaseItem item, IFileSystem fileSystem, FileSystemMetadata info) { var config = BaseItem.ConfigurationManager.GetMetadataConfiguration(); diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs index 0abdc4296f..26e767c205 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs @@ -10,6 +10,7 @@ using MediaBrowser.Server.Implementations.Logging; using System; using System.Collections.Generic; using System.IO; +using CommonIO; namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio { @@ -107,7 +108,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio /// <param name="fileSystem">The file system.</param> /// <param name="libraryManager">The library manager.</param> /// <returns><c>true</c> if the specified list contains music; otherwise, <c>false</c>.</returns> - private bool ContainsMusic(IEnumerable<FileSystemInfo> list, + private bool ContainsMusic(IEnumerable<FileSystemMetadata> list, bool allowSubfolders, IDirectoryService directoryService, ILogger logger, diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs index 9f3f248653..97a31990ee 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs @@ -9,6 +9,7 @@ using MediaBrowser.Model.Logging; using System; using System.IO; using System.Linq; +using CommonIO; namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio { diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs index ff38e057b0..121567e015 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs @@ -13,6 +13,8 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using CommonIO; +using MediaBrowser.Common.IO; namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies { @@ -43,7 +45,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies } public MultiItemResolverResult ResolveMultiple(Folder parent, - List<FileSystemInfo> files, + List<FileSystemMetadata> files, string collectionType, IDirectoryService directoryService) { @@ -61,7 +63,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies } private MultiItemResolverResult ResolveMultipleInternal(Folder parent, - List<FileSystemInfo> files, + List<FileSystemMetadata> files, string collectionType, IDirectoryService directoryService) { @@ -109,12 +111,12 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies return null; } - private MultiItemResolverResult ResolveVideos<T>(Folder parent, IEnumerable<FileSystemInfo> fileSystemEntries, IDirectoryService directoryService, string collectionType, bool suppportMultiEditions) + private MultiItemResolverResult ResolveVideos<T>(Folder parent, IEnumerable<FileSystemMetadata> fileSystemEntries, IDirectoryService directoryService, string collectionType, bool suppportMultiEditions) where T : Video, new() { - var files = new List<FileSystemInfo>(); + var files = new List<FileSystemMetadata>(); var videos = new List<BaseItem>(); - var leftOver = new List<FileSystemInfo>(); + var leftOver = new List<FileSystemMetadata>(); // Loop through each child file/folder and see if we find a video foreach (var child in fileSystemEntries) @@ -343,10 +345,10 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies /// <param name="directoryService">The directory service.</param> /// <param name="collectionType">Type of the collection.</param> /// <returns>Movie.</returns> - private T FindMovie<T>(string path, Folder parent, List<FileSystemInfo> fileSystemEntries, IDirectoryService directoryService, string collectionType) + private T FindMovie<T>(string path, Folder parent, List<FileSystemMetadata> fileSystemEntries, IDirectoryService directoryService, string collectionType) where T : Video, new() { - var multiDiscFolders = new List<FileSystemInfo>(); + var multiDiscFolders = new List<FileSystemMetadata>(); // Search for a folder rip foreach (var child in fileSystemEntries) @@ -419,7 +421,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies /// <param name="multiDiscFolders">The folders.</param> /// <param name="directoryService">The directory service.</param> /// <returns>``0.</returns> - private T GetMultiDiscMovie<T>(List<FileSystemInfo> multiDiscFolders, IDirectoryService directoryService) + private T GetMultiDiscMovie<T>(List<FileSystemMetadata> multiDiscFolders, IDirectoryService directoryService) where T : Video, new() { var videoTypes = new List<VideoType>(); @@ -492,7 +494,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies }; } - private bool IsInvalid(Folder parent, string collectionType, IEnumerable<FileSystemInfo> files) + private bool IsInvalid(Folder parent, string collectionType, IEnumerable<FileSystemMetadata> files) { if (parent != null) { diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/SpecialFolderResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/SpecialFolderResolver.cs index 31b2d8b0f9..cde44122e6 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/SpecialFolderResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/SpecialFolderResolver.cs @@ -6,6 +6,7 @@ using MediaBrowser.Controller.Resolvers; using System; using System.IO; using System.Linq; +using CommonIO; namespace MediaBrowser.Server.Implementations.Library.Resolvers { diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs index c5565eb536..19bd4a1a31 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs @@ -12,6 +12,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using CommonIO; namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV { @@ -99,7 +100,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV } public static bool IsSeriesFolder(string path, - IEnumerable<FileSystemInfo> fileSystemChildren, + IEnumerable<FileSystemMetadata> fileSystemChildren, IDirectoryService directoryService, IFileSystem fileSystem, ILogger logger, diff --git a/MediaBrowser.Server.Implementations/Library/UserManager.cs b/MediaBrowser.Server.Implementations/Library/UserManager.cs index a8fc7b4aa4..3ef625db67 100644 --- a/MediaBrowser.Server.Implementations/Library/UserManager.cs +++ b/MediaBrowser.Server.Implementations/Library/UserManager.cs @@ -30,6 +30,7 @@ using System.Security.Cryptography; using System.Text; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.Library { diff --git a/MediaBrowser.Server.Implementations/Library/UserViewManager.cs b/MediaBrowser.Server.Implementations/Library/UserViewManager.cs index fe9e093186..c2518f2b76 100644 --- a/MediaBrowser.Server.Implementations/Library/UserViewManager.cs +++ b/MediaBrowser.Server.Implementations/Library/UserViewManager.cs @@ -27,19 +27,15 @@ namespace MediaBrowser.Server.Implementations.Library private readonly IChannelManager _channelManager; private readonly ILiveTvManager _liveTvManager; - private readonly IPlaylistManager _playlists; - private readonly ICollectionManager _collectionManager; private readonly IServerConfigurationManager _config; - public UserViewManager(ILibraryManager libraryManager, ILocalizationManager localizationManager, IUserManager userManager, IChannelManager channelManager, ILiveTvManager liveTvManager, IPlaylistManager playlists, ICollectionManager collectionManager, IServerConfigurationManager config) + public UserViewManager(ILibraryManager libraryManager, ILocalizationManager localizationManager, IUserManager userManager, IChannelManager channelManager, ILiveTvManager liveTvManager, IServerConfigurationManager config) { _libraryManager = libraryManager; _localizationManager = localizationManager; _userManager = userManager; _channelManager = channelManager; _liveTvManager = liveTvManager; - _playlists = playlists; - _collectionManager = collectionManager; _config = config; } @@ -227,22 +223,7 @@ namespace MediaBrowser.Server.Implementations.Library var enableRichView = !user.Configuration.PlainFolderViews.Contains(parentId.ToString("N"), StringComparer.OrdinalIgnoreCase); - if (!enableRichView || currentViews.OfType<UserView>().Any(i => string.Equals(i.ViewType, viewType, StringComparison.OrdinalIgnoreCase) || string.Equals(i.Name, name, StringComparison.OrdinalIgnoreCase))) - { - return await GetUserView(parentId, name, viewType, enableRichView, sortName, user, cancellationToken).ConfigureAwait(false); - } - - if (!enableUserViews) - { - var view = await _libraryManager.GetNamedView(user, name, viewType, sortName, cancellationToken).ConfigureAwait(false); - - if (view.ParentId != parentId) - { - view.ParentId = parentId; - await view.UpdateToRepository(ItemUpdateType.MetadataEdit, cancellationToken).ConfigureAwait(false); - } - return view; - } + return await GetUserView(parentId, name, viewType, enableRichView, string.Empty, cancellationToken).ConfigureAwait(false); } return await _libraryManager.GetNamedView(user, name, viewType, sortName, cancellationToken).ConfigureAwait(false); diff --git a/MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs index c6b294e838..fb36b59479 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs +++ b/MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs @@ -11,6 +11,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; using MediaBrowser.Common.IO; namespace MediaBrowser.Server.Implementations.Library.Validators diff --git a/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs b/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs index f205da70db..2204535a22 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs @@ -39,38 +39,39 @@ namespace MediaBrowser.Server.Implementations.LiveTv var imageResponse = new DynamicImageResponse(); - if (!string.IsNullOrEmpty(liveTvItem.ProviderImagePath)) + if (!string.IsNullOrEmpty(liveTvItem.ExternalImagePath)) { - imageResponse.Path = liveTvItem.ProviderImagePath; - imageResponse.HasImage = true; - } - else if (!string.IsNullOrEmpty(liveTvItem.ProviderImageUrl)) - { - var options = new HttpRequestOptions + if (liveTvItem.ExternalImagePath.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { - CancellationToken = cancellationToken, - Url = liveTvItem.ProviderImageUrl, - - // Some image hosts require a user agent to be specified. - UserAgent = "Emby Server/" + _appHost.ApplicationVersion - }; + var options = new HttpRequestOptions + { + CancellationToken = cancellationToken, + Url = liveTvItem.ExternalImagePath, - var response = await _httpClient.GetResponse(options).ConfigureAwait(false); + // Some image hosts require a user agent to be specified. + UserAgent = "Emby Server/" + _appHost.ApplicationVersion + }; - var contentType = response.ContentType; + var response = await _httpClient.GetResponse(options).ConfigureAwait(false); - if (contentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase)) - { - imageResponse.HasImage = true; - imageResponse.Stream = response.Content; - imageResponse.SetFormatFromMimeType(contentType); + if (response.ContentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase)) + { + imageResponse.HasImage = true; + imageResponse.Stream = response.Content; + imageResponse.SetFormatFromMimeType(response.ContentType); + } + else + { + _logger.Error("Provider did not return an image content type."); + } } else { - _logger.Error("Provider did not return an image content type."); + imageResponse.Path = liveTvItem.ExternalImagePath; + imageResponse.HasImage = true; } } - else if (liveTvItem.HasProviderImage ?? true) + else { var service = _liveTvManager.Services.FirstOrDefault(i => string.Equals(i.Name, liveTvItem.ServiceName, StringComparison.OrdinalIgnoreCase)); diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs index f913d03614..ca5cd5499d 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs @@ -26,6 +26,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; using MediaBrowser.Common.Extensions; namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/ItemDataProvider.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/ItemDataProvider.cs index 2c8917ab4f..d89c1c0cb6 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/ItemDataProvider.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/ItemDataProvider.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using CommonIO; using MediaBrowser.Common.IO; namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/SeriesTimerManager.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/SeriesTimerManager.cs index 5636588858..6d88c7c0a5 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/SeriesTimerManager.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/SeriesTimerManager.cs @@ -2,6 +2,7 @@ using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; using System; +using CommonIO; using MediaBrowser.Common.IO; namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/TimerManager.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/TimerManager.cs index 64a5b73392..94ad5e5cec 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/TimerManager.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/TimerManager.cs @@ -7,6 +7,7 @@ using System; using System.Collections.Concurrent; using System.Linq; using System.Threading; +using CommonIO; using MediaBrowser.Common.IO; namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs index 8eb70a6380..769c4757a9 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs @@ -29,6 +29,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.LiveTv { @@ -571,9 +572,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv // replaceImages.Add(ImageType.Primary); //} - item.ProviderImageUrl = channelInfo.ImageUrl; - item.HasProviderImage = channelInfo.HasImage; - item.ProviderImagePath = channelInfo.ImagePath; + item.ExternalImagePath = string.IsNullOrWhiteSpace(channelInfo.ImageUrl) ? channelInfo.ImagePath : channelInfo.ImageUrl; if (string.IsNullOrEmpty(item.Name)) { @@ -606,7 +605,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv Id = id, DateCreated = DateTime.UtcNow, DateModified = DateTime.UtcNow, - Etag = info.Etag + ExternalEtag = info.Etag }; } @@ -620,7 +619,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv item.EpisodeTitle = info.EpisodeTitle; item.ExternalId = info.Id; item.Genres = info.Genres; - item.HasProviderImage = info.HasImage; item.IsHD = info.IsHD; item.IsKids = info.IsKids; item.IsLive = info.IsLive; @@ -633,8 +631,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv item.Name = info.Name; item.OfficialRating = item.OfficialRating ?? info.OfficialRating; item.Overview = item.Overview ?? info.Overview; - item.ProviderImagePath = info.ImagePath; - item.ProviderImageUrl = info.ImageUrl; + item.ExternalImagePath = string.IsNullOrWhiteSpace(info.ImagePath) ? info.ImageUrl : info.ImagePath; item.RunTimeTicks = (info.EndDate - info.StartDate).Ticks; item.StartDate = info.StartDate; item.HomePageUrl = info.HomePageUrl; @@ -656,11 +653,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv else { // Increment this whenver some internal change deems it necessary - var etag = info.Etag + "2"; + var etag = info.Etag + "4"; - if (!string.Equals(etag, item.Etag, StringComparison.OrdinalIgnoreCase)) + if (!string.Equals(etag, item.ExternalEtag, StringComparison.OrdinalIgnoreCase)) { - item.Etag = etag; + item.ExternalEtag = etag; await _libraryManager.UpdateItem(item, ItemUpdateType.MetadataImport, cancellationToken).ConfigureAwait(false); } } @@ -717,13 +714,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv recording.ExternalId = info.Id; - recording.ProgramId = _tvDtoService.GetInternalProgramId(serviceName, info.ProgramId).ToString("N"); recording.Audio = info.Audio; - recording.ChannelType = info.ChannelType; recording.EndDate = info.EndDate; recording.EpisodeTitle = info.EpisodeTitle; - recording.ProviderImagePath = info.ImagePath; - recording.ProviderImageUrl = info.ImageUrl; + recording.ExternalImagePath = string.IsNullOrWhiteSpace(info.ImagePath) ? info.ImageUrl : info.ImagePath; recording.IsHD = info.IsHD; recording.IsKids = info.IsKids; recording.IsLive = info.IsLive; @@ -744,7 +738,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv if (!string.IsNullOrEmpty(info.Path)) { item.Path = info.Path; - var fileInfo = new FileInfo(info.Path); + var fileInfo = _fileSystem.GetFileInfo(info.Path); recording.DateCreated = _fileSystem.GetCreationTimeUtc(fileInfo); recording.DateModified = _fileSystem.GetLastWriteTimeUtc(fileInfo); @@ -1466,7 +1460,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv dto.RecordingStatus = info.Status; dto.IsRepeat = info.IsRepeat; dto.EpisodeTitle = info.EpisodeTitle; - dto.ChannelType = info.ChannelType; dto.Audio = info.Audio; dto.IsHD = info.IsHD; dto.IsMovie = info.IsMovie; @@ -1503,8 +1496,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv dto.CompletionPercentage = pct; } - dto.ProgramId = info.ProgramId; - if (channel != null) { dto.ChannelName = channel.Name; @@ -1791,7 +1782,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv EndDate = program.EndDate ?? DateTime.MinValue, EpisodeTitle = program.EpisodeTitle, Genres = program.Genres, - HasImage = program.HasProviderImage, Id = program.ExternalId, IsHD = program.IsHD, IsKids = program.IsKids, @@ -1805,8 +1795,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv OriginalAirDate = program.PremiereDate, Overview = program.Overview, StartDate = program.StartDate, - ImagePath = program.ProviderImagePath, - ImageUrl = program.ProviderImageUrl, + ImagePath = program.ExternalImagePath, Name = program.Name, OfficialRating = program.OfficialRating }; diff --git a/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs b/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs index 134e24ef0e..ba9ce0db52 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs @@ -36,33 +36,36 @@ namespace MediaBrowser.Server.Implementations.LiveTv var imageResponse = new DynamicImageResponse(); - if (!string.IsNullOrEmpty(liveTvItem.ProviderImagePath)) + if (!string.IsNullOrEmpty(liveTvItem.ExternalImagePath)) { - imageResponse.Path = liveTvItem.ProviderImagePath; - imageResponse.HasImage = true; - } - else if (!string.IsNullOrEmpty(liveTvItem.ProviderImageUrl)) - { - var options = new HttpRequestOptions + if (liveTvItem.ExternalImagePath.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { - CancellationToken = cancellationToken, - Url = liveTvItem.ProviderImageUrl - }; + var options = new HttpRequestOptions + { + CancellationToken = cancellationToken, + Url = liveTvItem.ExternalImagePath + }; - var response = await _httpClient.GetResponse(options).ConfigureAwait(false); + var response = await _httpClient.GetResponse(options).ConfigureAwait(false); - if (response.ContentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase)) - { - imageResponse.HasImage = true; - imageResponse.Stream = response.Content; - imageResponse.SetFormatFromMimeType(response.ContentType); + if (response.ContentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase)) + { + imageResponse.HasImage = true; + imageResponse.Stream = response.Content; + imageResponse.SetFormatFromMimeType(response.ContentType); + } + else + { + _logger.Error("Provider did not return an image content type."); + } } else { - _logger.Error("Provider did not return an image content type."); + imageResponse.Path = liveTvItem.ExternalImagePath; + imageResponse.HasImage = true; } } - else if (liveTvItem.HasProviderImage ?? true) + else { var service = _liveTvManager.Services.FirstOrDefault(i => string.Equals(i.Name, liveTvItem.ServiceName, StringComparison.OrdinalIgnoreCase)); @@ -115,7 +118,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv if (liveTvItem != null) { - return !liveTvItem.HasImage(ImageType.Primary) && (liveTvItem.HasProviderImage ?? true); + return !liveTvItem.HasImage(ImageType.Primary); } return false; } diff --git a/MediaBrowser.Server.Implementations/LiveTv/RecordingImageProvider.cs b/MediaBrowser.Server.Implementations/LiveTv/RecordingImageProvider.cs index adf1e75169..d8f22e3514 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/RecordingImageProvider.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/RecordingImageProvider.cs @@ -36,30 +36,33 @@ namespace MediaBrowser.Server.Implementations.LiveTv var imageResponse = new DynamicImageResponse(); - if (!string.IsNullOrEmpty(liveTvItem.ProviderImagePath)) + if (!string.IsNullOrEmpty(liveTvItem.ExternalImagePath)) { - imageResponse.Path = liveTvItem.ProviderImagePath; - imageResponse.HasImage = true; - } - else if (!string.IsNullOrEmpty(liveTvItem.ProviderImageUrl)) - { - var options = new HttpRequestOptions + if (liveTvItem.ExternalImagePath.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { - CancellationToken = cancellationToken, - Url = liveTvItem.ProviderImageUrl - }; + var options = new HttpRequestOptions + { + CancellationToken = cancellationToken, + Url = liveTvItem.ExternalImagePath + }; - var response = await _httpClient.GetResponse(options).ConfigureAwait(false); + var response = await _httpClient.GetResponse(options).ConfigureAwait(false); - if (response.ContentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase)) - { - imageResponse.HasImage = true; - imageResponse.Stream = response.Content; - imageResponse.SetFormatFromMimeType(response.ContentType); + if (response.ContentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase)) + { + imageResponse.HasImage = true; + imageResponse.Stream = response.Content; + imageResponse.SetFormatFromMimeType(response.ContentType); + } + else + { + _logger.Error("Provider did not return an image content type."); + } } else { - _logger.Error("Provider did not return an image content type."); + imageResponse.Path = liveTvItem.ExternalImagePath; + imageResponse.HasImage = true; } } else @@ -109,7 +112,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv if (liveTvItem != null) { - return !liveTvItem.HasImage(ImageType.Primary) && (!string.IsNullOrWhiteSpace(liveTvItem.ProviderImagePath) || !string.IsNullOrWhiteSpace(liveTvItem.ProviderImageUrl)); + return !liveTvItem.HasImage(ImageType.Primary); } return false; } diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunDiscovery.cs b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunDiscovery.cs index c742201371..92a33993a9 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunDiscovery.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunDiscovery.cs @@ -9,6 +9,7 @@ using MediaBrowser.Model.Logging; using System; using System.Linq; using System.Threading; +using MediaBrowser.Common.Net; namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun { @@ -19,13 +20,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun private readonly ILogger _logger; private readonly ILiveTvManager _liveTvManager; private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1); + private readonly IHttpClient _httpClient; - public HdHomerunDiscovery(IDeviceDiscovery deviceDiscovery, IServerConfigurationManager config, ILogger logger, ILiveTvManager liveTvManager) + public HdHomerunDiscovery(IDeviceDiscovery deviceDiscovery, IServerConfigurationManager config, ILogger logger, ILiveTvManager liveTvManager, IHttpClient httpClient) { _deviceDiscovery = deviceDiscovery; _config = config; _logger = logger; _liveTvManager = liveTvManager; + _httpClient = httpClient; } public void Run() @@ -75,6 +78,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun // Strip off the port url = new Uri(url).GetComponents(UriComponents.AbsoluteUri & ~UriComponents.Port, UriFormat.UriEscaped).TrimEnd('/'); + // Test it by pulling down the lineup + using (await _httpClient.Get(new HttpRequestOptions + { + Url = string.Format("{0}/lineup.json", url), + CancellationToken = CancellationToken.None + })) + { + } + await _liveTvManager.SaveTunerHost(new TunerHostInfo { Type = HdHomerunHost.DeviceType, diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs index a26ed7a2af..7fe3950b9d 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs @@ -12,6 +12,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; using MediaBrowser.Model.Serialization; diff --git a/MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs b/MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs index e776f43114..cf6eb8f9d7 100644 --- a/MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs +++ b/MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs @@ -12,6 +12,7 @@ using System.Globalization; using System.IO; using System.Linq; using System.Reflection; +using CommonIO; namespace MediaBrowser.Server.Implementations.Localization { diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 186db6792f..ee78bdaf5d 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -12,7 +12,6 @@ <FileAlignment>512</FileAlignment> <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> - <RestorePackages>true</RestorePackages> <ReleaseVersion> </ReleaseVersion> </PropertyGroup> @@ -42,6 +41,10 @@ <WarningLevel>4</WarningLevel> </PropertyGroup> <ItemGroup> + <Reference Include="CommonIO, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\CommonIO.1.0.0.4\lib\net45\CommonIO.dll</HintPath> + </Reference> <Reference Include="Interfaces.IO"> <HintPath>..\packages\Interfaces.IO.1.0.0.5\lib\portable-net45+sl4+wp71+win8+wpa81\Interfaces.IO.dll</HintPath> </Reference> @@ -55,9 +58,9 @@ <Reference Include="ServiceStack.Api.Swagger"> <HintPath>..\ThirdParty\ServiceStack\ServiceStack.Api.Swagger.dll</HintPath> </Reference> - <Reference Include="SocketHttpListener, Version=1.0.5749.18620, Culture=neutral, processorArchitecture=MSIL"> + <Reference Include="SocketHttpListener, Version=1.0.5754.42244, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\SocketHttpListener.1.0.0.9\lib\net45\SocketHttpListener.dll</HintPath> + <HintPath>..\packages\SocketHttpListener.1.0.0.10\lib\net45\SocketHttpListener.dll</HintPath> </Reference> <Reference Include="System" /> <Reference Include="System.Core" /> diff --git a/MediaBrowser.Server.Implementations/MediaEncoder/EncodingManager.cs b/MediaBrowser.Server.Implementations/MediaEncoder/EncodingManager.cs index 550d76f449..bd634ed739 100644 --- a/MediaBrowser.Server.Implementations/MediaEncoder/EncodingManager.cs +++ b/MediaBrowser.Server.Implementations/MediaEncoder/EncodingManager.cs @@ -14,6 +14,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.MediaEncoder { diff --git a/MediaBrowser.Server.Implementations/News/NewsEntryPoint.cs b/MediaBrowser.Server.Implementations/News/NewsEntryPoint.cs index 65698ec997..e8f910f81b 100644 --- a/MediaBrowser.Server.Implementations/News/NewsEntryPoint.cs +++ b/MediaBrowser.Server.Implementations/News/NewsEntryPoint.cs @@ -16,6 +16,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using System.Xml; +using CommonIO; namespace MediaBrowser.Server.Implementations.News { diff --git a/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs b/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs index 709ed5ec9a..6259c61af7 100644 --- a/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs @@ -12,6 +12,7 @@ using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using CommonIO; using MediaBrowser.Controller.Entities.Audio; namespace MediaBrowser.Server.Implementations.Persistence @@ -223,7 +224,7 @@ namespace MediaBrowser.Server.Implementations.Persistence { return new ITaskTrigger[] { - new IntervalTrigger{ Interval = TimeSpan.FromHours(6)} + new IntervalTrigger{ Interval = TimeSpan.FromHours(24)} }; } } diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs index 8ce121db3f..00c10f0a12 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs @@ -18,6 +18,7 @@ using System.Linq; using System.Runtime.Serialization; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Controller.Channels; namespace MediaBrowser.Server.Implementations.Persistence { @@ -72,7 +73,7 @@ namespace MediaBrowser.Server.Implementations.Persistence private IDbCommand _deletePeopleCommand; private IDbCommand _savePersonCommand; - private const int LatestSchemaVersion = 11; + private const int LatestSchemaVersion = 13; /// <summary> /// Initializes a new instance of the <see cref="SqliteItemRepository"/> class. @@ -187,7 +188,10 @@ namespace MediaBrowser.Server.Implementations.Persistence _connection.AddColumn(_logger, "TypedBaseItems", "PreferredMetadataLanguage", "Text"); _connection.AddColumn(_logger, "TypedBaseItems", "PreferredMetadataCountryCode", "Text"); - + _connection.AddColumn(_logger, "TypedBaseItems", "IsHD", "BIT"); + _connection.AddColumn(_logger, "TypedBaseItems", "ExternalEtag", "Text"); + _connection.AddColumn(_logger, "TypedBaseItems", "ExternalImagePath", "Text"); + PrepareStatements(); _mediaStreamsRepository.Initialize(); @@ -221,7 +225,10 @@ namespace MediaBrowser.Server.Implementations.Persistence "IndexNumber", "IsLocked", "PreferredMetadataLanguage", - "PreferredMetadataCountryCode" + "PreferredMetadataCountryCode", + "IsHD", + "ExternalEtag", + "ExternalImagePath" }; /// <summary> @@ -274,7 +281,10 @@ namespace MediaBrowser.Server.Implementations.Persistence "IsOffline", "LocationType", "PreferredMetadataLanguage", - "PreferredMetadataCountryCode" + "PreferredMetadataCountryCode", + "IsHD", + "ExternalEtag", + "ExternalImagePath" }; _saveItemCommand = _connection.CreateCommand(); _saveItemCommand.CommandText = "replace into TypedBaseItems (" + string.Join(",", saveColumns.ToArray()) + ") values ("; @@ -460,7 +470,10 @@ namespace MediaBrowser.Server.Implementations.Persistence _saveItemCommand.GetParameter(index++).Value = item.PreferredMetadataLanguage; _saveItemCommand.GetParameter(index++).Value = item.PreferredMetadataCountryCode; - + _saveItemCommand.GetParameter(index++).Value = item.IsHD; + _saveItemCommand.GetParameter(index++).Value = item.ExternalEtag; + _saveItemCommand.GetParameter(index++).Value = item.ExternalImagePath; + _saveItemCommand.Transaction = transaction; _saveItemCommand.ExecuteNonQuery(); @@ -667,6 +680,21 @@ namespace MediaBrowser.Server.Implementations.Persistence item.PreferredMetadataCountryCode = reader.GetString(20); } + if (!reader.IsDBNull(21)) + { + item.IsHD = reader.GetBoolean(21); + } + + if (!reader.IsDBNull(22)) + { + item.ExternalEtag = reader.GetString(22); + } + + if (!reader.IsDBNull(23)) + { + item.ExternalImagePath = reader.GetString(23); + } + return item; } @@ -1394,7 +1422,8 @@ namespace MediaBrowser.Server.Implementations.Persistence typeof(UserRootFolder), typeof(UserView), typeof(Video), - typeof(Year) + typeof(Year), + typeof(Channel) }; private static Dictionary<string, string[]> GetTypeMapDictionary() diff --git a/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs b/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs index bd5c571fe1..cc0140d689 100644 --- a/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs +++ b/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs @@ -13,6 +13,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.Photos { diff --git a/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs b/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs index b55c76b8f8..71f68e8577 100644 --- a/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs +++ b/MediaBrowser.Server.Implementations/Photos/PhotoAlbumImageProvider.cs @@ -6,6 +6,7 @@ using MediaBrowser.Controller.Providers; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.Photos { diff --git a/MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs b/MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs index 0daef052df..4d3e091b1d 100644 --- a/MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs +++ b/MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs @@ -4,6 +4,7 @@ using MediaBrowser.Controller.Playlists; using System.Collections.Generic; using System.IO; using System.Linq; +using CommonIO; using MediaBrowser.Common.IO; namespace MediaBrowser.Server.Implementations.Playlists diff --git a/MediaBrowser.Server.Implementations/Playlists/PlaylistImageProvider.cs b/MediaBrowser.Server.Implementations/Playlists/PlaylistImageProvider.cs index dcd9d21ea0..d9e9fac2a8 100644 --- a/MediaBrowser.Server.Implementations/Playlists/PlaylistImageProvider.cs +++ b/MediaBrowser.Server.Implementations/Playlists/PlaylistImageProvider.cs @@ -12,6 +12,7 @@ using MoreLinq; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.Playlists { diff --git a/MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs b/MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs index 53f2211d36..a0d80598a7 100644 --- a/MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs +++ b/MediaBrowser.Server.Implementations/Playlists/PlaylistManager.cs @@ -13,6 +13,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.Playlists { diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs index f8dc08e269..355603fae8 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs +++ b/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs @@ -11,6 +11,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; using MediaBrowser.Common.IO; namespace MediaBrowser.Server.Implementations.ScheduledTasks diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/RefreshIntrosTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/RefreshIntrosTask.cs index a65b46f640..90682d5b02 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/RefreshIntrosTask.cs +++ b/MediaBrowser.Server.Implementations/ScheduledTasks/RefreshIntrosTask.cs @@ -5,6 +5,7 @@ using System; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.ScheduledTasks { diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index d164874dc9..8d32734217 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -1324,7 +1324,7 @@ namespace MediaBrowser.Server.Implementations.Session if (existing.Items.Length > 0) { var token = existing.Items[0].AccessToken; - _logger.Debug("Reissuing access token: " + token); + _logger.Info("Reissuing access token: " + token); return token; } @@ -1340,7 +1340,7 @@ namespace MediaBrowser.Server.Implementations.Session AccessToken = Guid.NewGuid().ToString("N") }; - _logger.Debug("Creating new access token for user {0}", userId); + _logger.Info("Creating new access token for user {0}", userId); await _authRepo.Create(newToken, CancellationToken.None).ConfigureAwait(false); return newToken.AccessToken; @@ -1353,6 +1353,8 @@ namespace MediaBrowser.Server.Implementations.Session throw new ArgumentNullException("accessToken"); } + _logger.Info("Logging out access token {0}", accessToken); + var existing = _authRepo.Get(new AuthenticationInfoQuery { Limit = 1, diff --git a/MediaBrowser.Server.Implementations/Sync/MediaSync.cs b/MediaBrowser.Server.Implementations/Sync/MediaSync.cs index 83dd13c05d..d4cb701415 100644 --- a/MediaBrowser.Server.Implementations/Sync/MediaSync.cs +++ b/MediaBrowser.Server.Implementations/Sync/MediaSync.cs @@ -18,6 +18,7 @@ using System.Security.Cryptography; using System.Text; using System.Threading; using System.Threading.Tasks; +using CommonIO; using Interfaces.IO; namespace MediaBrowser.Server.Implementations.Sync diff --git a/MediaBrowser.Server.Implementations/Sync/MultiProviderSync.cs b/MediaBrowser.Server.Implementations/Sync/MultiProviderSync.cs index 6f09e96f0f..dca831f73f 100644 --- a/MediaBrowser.Server.Implementations/Sync/MultiProviderSync.cs +++ b/MediaBrowser.Server.Implementations/Sync/MultiProviderSync.cs @@ -10,6 +10,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.Sync { diff --git a/MediaBrowser.Server.Implementations/Sync/ServerSyncScheduledTask.cs b/MediaBrowser.Server.Implementations/Sync/ServerSyncScheduledTask.cs index 9477a23f19..52c9f9ceef 100644 --- a/MediaBrowser.Server.Implementations/Sync/ServerSyncScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/Sync/ServerSyncScheduledTask.cs @@ -9,6 +9,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.Sync { diff --git a/MediaBrowser.Server.Implementations/Sync/SyncConvertScheduledTask.cs b/MediaBrowser.Server.Implementations/Sync/SyncConvertScheduledTask.cs index 5347e1d83b..2efed79927 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncConvertScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncConvertScheduledTask.cs @@ -10,6 +10,7 @@ using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.Sync { diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs index 0507b032b4..95934908da 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs @@ -23,6 +23,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.Sync { @@ -864,7 +865,7 @@ namespace MediaBrowser.Server.Implementations.Sync private async Task<MediaSourceInfo> GetEncodedMediaSource(string path, User user, bool isVideo) { - var item = _libraryManager.ResolvePath(new FileInfo(path)); + var item = _libraryManager.ResolvePath(_fileSystem.GetFileSystemInfo(path)); await item.RefreshMetadata(CancellationToken.None).ConfigureAwait(false); diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 15d1968777..fb843b5f71 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -32,6 +32,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.Sync { diff --git a/MediaBrowser.Server.Implementations/Sync/TargetDataProvider.cs b/MediaBrowser.Server.Implementations/Sync/TargetDataProvider.cs index 676adad342..41d56d9596 100644 --- a/MediaBrowser.Server.Implementations/Sync/TargetDataProvider.cs +++ b/MediaBrowser.Server.Implementations/Sync/TargetDataProvider.cs @@ -11,6 +11,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CommonIO; using Interfaces.IO; namespace MediaBrowser.Server.Implementations.Sync diff --git a/MediaBrowser.Server.Implementations/UserViews/CollectionFolderImageProvider.cs b/MediaBrowser.Server.Implementations/UserViews/CollectionFolderImageProvider.cs index 7054515b6f..a699bfabfc 100644 --- a/MediaBrowser.Server.Implementations/UserViews/CollectionFolderImageProvider.cs +++ b/MediaBrowser.Server.Implementations/UserViews/CollectionFolderImageProvider.cs @@ -12,6 +12,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.UserViews { diff --git a/MediaBrowser.Server.Implementations/UserViews/DynamicImageProvider.cs b/MediaBrowser.Server.Implementations/UserViews/DynamicImageProvider.cs index 2f5702983b..2b18218a8c 100644 --- a/MediaBrowser.Server.Implementations/UserViews/DynamicImageProvider.cs +++ b/MediaBrowser.Server.Implementations/UserViews/DynamicImageProvider.cs @@ -13,6 +13,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using CommonIO; namespace MediaBrowser.Server.Implementations.UserViews { diff --git a/MediaBrowser.Server.Implementations/packages.config b/MediaBrowser.Server.Implementations/packages.config index ac32c1f7cd..3d2fdb743e 100644 --- a/MediaBrowser.Server.Implementations/packages.config +++ b/MediaBrowser.Server.Implementations/packages.config @@ -1,9 +1,10 @@ <?xml version="1.0" encoding="utf-8"?>
<packages>
+ <package id="CommonIO" version="1.0.0.4" targetFramework="net45" />
<package id="Interfaces.IO" version="1.0.0.5" targetFramework="net45" />
<package id="MediaBrowser.Naming" version="1.0.0.38" targetFramework="net45" />
<package id="Mono.Nat" version="1.2.24.0" targetFramework="net45" />
<package id="morelinq" version="1.1.1" targetFramework="net45" />
<package id="Patterns.Logging" version="1.0.0.2" targetFramework="net45" />
- <package id="SocketHttpListener" version="1.0.0.9" targetFramework="net45" />
+ <package id="SocketHttpListener" version="1.0.0.10" targetFramework="net45" />
</packages>
\ No newline at end of file |
