diff --git a/Emby.Common.Implementations/Networking/NetworkManager.cs b/Emby.Common.Implementations/Networking/NetworkManager.cs
index e336973377..a4f8f7ced0 100644
--- a/Emby.Common.Implementations/Networking/NetworkManager.cs
+++ b/Emby.Common.Implementations/Networking/NetworkManager.cs
@@ -489,7 +489,7 @@ namespace Emby.Common.Implementations.Networking
///
/// The path.
/// IEnumerable{NetworkShare}.
- public IEnumerable GetNetworkShares(string path)
+ public virtual IEnumerable GetNetworkShares(string path)
{
return new List();
}
@@ -498,7 +498,7 @@ namespace Emby.Common.Implementations.Networking
/// Gets available devices within the domain
///
/// PC's in the Domain
- public IEnumerable GetNetworkDevices()
+ public virtual IEnumerable GetNetworkDevices()
{
return new List();
}
diff --git a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
index 0c1cdf53e7..11063ca29f 100644
--- a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
+++ b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
@@ -254,7 +254,7 @@ namespace MediaBrowser.Api.Playback.Hls
"hls/" + Path.GetFileNameWithoutExtension(outputPath));
}
- var args = string.Format("{0} {1} {2} -map_metadata -1 -threads {3} {4} {5} -avoid_negative_ts make_zero -fflags +genpts -sc_threshold 0 {6} -hls_time {7} -start_number {8} -hls_list_size {9}{10} -y \"{11}\"",
+ var args = string.Format("{0} {1} {2} -map_metadata -1 -threads {3} {4} {5} -sc_threshold 0 {6} -hls_time {7} -start_number {8} -hls_list_size {9}{10} -y \"{11}\"",
itsOffset,
inputModifier,
GetInputArgument(state),
diff --git a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs
index 8a2047de4e..67edd3f003 100644
--- a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs
+++ b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs
@@ -89,7 +89,7 @@ namespace MediaBrowser.Api.Playback.Hls
{
args += " -bsf:v h264_mp4toannexb";
}
- args += " -flags +global_header";
+ args += " -flags -global_header";
return args;
}
@@ -112,7 +112,7 @@ namespace MediaBrowser.Api.Playback.Hls
args += GetGraphicalSubtitleParam(state, codec);
}
- args += " -flags +global_header";
+ args += " -flags -global_header";
return args;
}
diff --git a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs
index c93b6c2fd6..fe56bc752c 100644
--- a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs
+++ b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs
@@ -30,7 +30,7 @@ namespace MediaBrowser.Providers.TV
private readonly IFileSystem _fileSystem;
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
- private static readonly SemaphoreSlim _resourceLock = new SemaphoreSlim(1, 1);
+ private static readonly SemaphoreSlim ResourceLock = new SemaphoreSlim(1, 1);
public static bool IsRunning = false;
private readonly IXmlReaderSettingsFactory _xmlSettings;
@@ -46,7 +46,7 @@ namespace MediaBrowser.Providers.TV
public async Task Run(List> series, bool addNewItems, CancellationToken cancellationToken)
{
- await _resourceLock.WaitAsync(cancellationToken).ConfigureAwait(false);
+ await ResourceLock.WaitAsync(cancellationToken).ConfigureAwait(false);
IsRunning = true;
foreach (var seriesGroup in series)
@@ -59,9 +59,10 @@ namespace MediaBrowser.Providers.TV
{
break;
}
- catch (IOException)
+ catch (IOException ex)
{
//_logger.Warn("Series files missing for series id {0}", seriesGroup.Key);
+ _logger.ErrorException("Error in missing episode provider for series id {0}", ex, seriesGroup.Key);
}
catch (Exception ex)
{
@@ -70,12 +71,15 @@ namespace MediaBrowser.Providers.TV
}
IsRunning = false;
- _resourceLock.Release();
+ ResourceLock.Release();
}
private async Task Run(IGrouping group, bool addNewItems, CancellationToken cancellationToken)
{
- var tvdbId = group.Key;
+ var seriesList = group.ToList();
+ var tvdbId = seriesList
+ .Select(i => i.GetProviderId(MetadataProviders.Tvdb))
+ .FirstOrDefault(i => !string.IsNullOrWhiteSpace(i));
// Todo: Support series by imdb id
var seriesProviderIds = new Dictionary(StringComparer.OrdinalIgnoreCase);
@@ -114,30 +118,30 @@ namespace MediaBrowser.Providers.TV
.Where(i => i.Item1 != -1 && i.Item2 != -1)
.ToList();
- var hasBadData = HasInvalidContent(group);
+ var hasBadData = HasInvalidContent(seriesList);
- var anySeasonsRemoved = await RemoveObsoleteOrMissingSeasons(group, episodeLookup)
+ var anySeasonsRemoved = await RemoveObsoleteOrMissingSeasons(seriesList, episodeLookup)
.ConfigureAwait(false);
- var anyEpisodesRemoved = await RemoveObsoleteOrMissingEpisodes(group, episodeLookup)
+ var anyEpisodesRemoved = await RemoveObsoleteOrMissingEpisodes(seriesList, episodeLookup)
.ConfigureAwait(false);
var hasNewEpisodes = false;
- if (addNewItems && !group.Any(i => !i.IsInternetMetadataEnabled()))
+ if (addNewItems && seriesList.All(i => i.IsInternetMetadataEnabled()))
{
var seriesConfig = _config.Configuration.MetadataOptions.FirstOrDefault(i => string.Equals(i.ItemType, typeof(Series).Name, StringComparison.OrdinalIgnoreCase));
if (seriesConfig == null || !seriesConfig.DisabledMetadataFetchers.Contains(TvdbSeriesProvider.Current.Name, StringComparer.OrdinalIgnoreCase))
{
- hasNewEpisodes = await AddMissingEpisodes(group.ToList(), hasBadData, seriesDataPath, episodeLookup, cancellationToken)
+ hasNewEpisodes = await AddMissingEpisodes(seriesList, hasBadData, seriesDataPath, episodeLookup, cancellationToken)
.ConfigureAwait(false);
}
}
if (hasNewEpisodes || anySeasonsRemoved || anyEpisodesRemoved)
{
- foreach (var series in group)
+ foreach (var series in seriesList)
{
var directoryService = new DirectoryService(_logger, _fileSystem);
diff --git a/MediaBrowser.ServerApplication/Networking/NetworkManager.cs b/MediaBrowser.ServerApplication/Networking/NetworkManager.cs
index ed99dcc061..6d3d96e19a 100644
--- a/MediaBrowser.ServerApplication/Networking/NetworkManager.cs
+++ b/MediaBrowser.ServerApplication/Networking/NetworkManager.cs
@@ -25,7 +25,7 @@ namespace MediaBrowser.ServerApplication.Networking
///
/// The path.
/// IEnumerable{NetworkShare}.
- public IEnumerable GetNetworkShares(string path)
+ public override IEnumerable GetNetworkShares(string path)
{
Logger.Info("Getting network shares from {0}", path);
return new ShareCollection(path).OfType().Select(ToNetworkShare);
@@ -148,7 +148,7 @@ namespace MediaBrowser.ServerApplication.Networking
/// Gets available devices within the domain
///
/// PC's in the Domain
- public IEnumerable GetNetworkDevices()
+ public override IEnumerable GetNetworkDevices()
{
return GetNetworkDevicesInternal().Select(c => new FileSystemEntryInfo
{