diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-01-18 23:24:50 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-01-18 23:24:50 -0500 |
| commit | 18a9720857ec9e6cdd580b3812bb72cf864d2f20 (patch) | |
| tree | 59d758d581a3c496fc3dae19071d52c5624e4ca7 | |
| parent | 3b4491b0b673f5264a6b593fb9bf1b2c26207dce (diff) | |
improve dvd vob file scan
| -rw-r--r-- | MediaBrowser.Providers/MediaInfo/FFProbeVideoInfoProvider.cs | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfoProvider.cs b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfoProvider.cs index 640dbd3fa..afbea7f8b 100644 --- a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfoProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfoProvider.cs @@ -145,7 +145,18 @@ namespace MediaBrowser.Providers.MediaInfo item.RunTimeTicks = dvd.Titles.Select(GetRuntime).Max(); - PopulateDvdStreamFiles(item, mount); + var primaryTitle = dvd.Titles.OrderByDescending(GetRuntime).FirstOrDefault(); + + uint? titleNumber = null; + + if (primaryTitle != null) + { + titleNumber = primaryTitle.TitleNumber; + } + + item.PlayableStreamFileNames = GetPrimaryPlaylistVobFiles(item, mount, titleNumber) + .Select(Path.GetFileName) + .ToList(); } private long GetRuntime(Title title) @@ -237,12 +248,7 @@ namespace MediaBrowser.Providers.MediaInfo return null; } - /// <summary> - /// Finds vob files and populates the dvd stream file properties - /// </summary> - /// <param name="video">The video.</param> - /// <param name="isoMount">The iso mount.</param> - private void PopulateDvdStreamFiles(Video video, IIsoMount isoMount) + private IEnumerable<string> GetPrimaryPlaylistVobFiles(Video video, IIsoMount isoMount, uint? titleNumber) { // min size 300 mb const long minPlayableSize = 314572800; @@ -259,7 +265,20 @@ namespace MediaBrowser.Providers.MediaInfo if (allVobs.Count == 0) { Logger.Error("No vobs found in dvd structure."); - return; + return new List<string>(); + } + + if (titleNumber.HasValue) + { + var prefix = string.Format("VTS_0{0}_", titleNumber.Value.ToString(UsCulture)); + var vobs = allVobs.Where(i => Path.GetFileName(i).StartsWith(prefix, StringComparison.OrdinalIgnoreCase)).ToList(); + + if (vobs.Count > 0) + { + return vobs; + } + + Logger.Debug("Could not determine vob file list for {0} using DvdLib. Will scan using file sizes.", video.Path); } var files = allVobs @@ -299,7 +318,7 @@ namespace MediaBrowser.Providers.MediaInfo } } - video.PlayableStreamFileNames = files.Select(Path.GetFileName).ToList(); + return files; } /// <summary> |
