using System; using System.Collections.Generic; using System.IO; using System.Linq; using MediaBrowser.Model.IO; namespace MediaBrowser.Controller.MediaEncoding { /// <summary> /// Class MediaEncoderHelpers. /// </summary> public static class MediaEncoderHelpers { /// <summary> /// Gets the input argument. /// </summary> /// <param name="fileSystem">The file system.</param> /// <param name="videoPath">The video path.</param> /// <param name="isoMount">The iso mount.</param> /// <param name="playableStreamFileNames">The playable stream file names.</param> /// <returns>string[].</returns> public static string[] GetInputArgument(IFileSystem fileSystem, string videoPath, IIsoMount isoMount, IReadOnlyCollection<string> playableStreamFileNames) { if (playableStreamFileNames.Count > 0) { if (isoMount == null) { return GetPlayableStreamFiles(fileSystem, videoPath, playableStreamFileNames); } return GetPlayableStreamFiles(fileSystem, isoMount.MountedPath, playableStreamFileNames); } return new[] { videoPath }; } private static string[] GetPlayableStreamFiles(IFileSystem fileSystem, string rootPath, IEnumerable<string> filenames) { var allFiles = fileSystem .GetFilePaths(rootPath, true) .ToArray(); return filenames.Select(name => allFiles.FirstOrDefault(f => string.Equals(Path.GetFileName(f), name, StringComparison.OrdinalIgnoreCase))) .Where(f => !string.IsNullOrEmpty(f)) .ToArray(); } } }