diff --git a/MediaBrowser.Api/ItemLookupService.cs b/MediaBrowser.Api/ItemLookupService.cs index ff11ad47c4..e68aa73f6a 100644 --- a/MediaBrowser.Api/ItemLookupService.cs +++ b/MediaBrowser.Api/ItemLookupService.cs @@ -216,7 +216,8 @@ namespace MediaBrowser.Api { MetadataRefreshMode = MetadataRefreshMode.FullRefresh, ImageRefreshMode = ImageRefreshMode.FullRefresh, - ReplaceAllMetadata = true + ReplaceAllMetadata = true, + ReplaceAllImages = true }, CancellationToken.None); diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 8cf6474f28..a19a247ed8 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -491,6 +491,7 @@ namespace MediaBrowser.Api.Playback assSubtitleParam = GetTextSubtitleParam(state, cancellationToken); copyTsParam = " -copyts"; } + //copyTsParam = " -copyts"; // If fixed dimensions were supplied if (request.Width.HasValue && request.Height.HasValue) diff --git a/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs b/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs index 35e86fb87c..692d6db909 100644 --- a/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs +++ b/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using MediaBrowser.Model.Entities; namespace MediaBrowser.Controller.Providers { @@ -23,9 +25,20 @@ namespace MediaBrowser.Controller.Providers public ImageRefreshMode ImageRefreshMode { get; set; } public IDirectoryService DirectoryService { get; set; } + public bool ReplaceAllImages { get; set; } + + public List ReplaceImages { get; set; } + public ImageRefreshOptions() { ImageRefreshMode = ImageRefreshMode.Default; + + ReplaceImages = new List(); + } + + public bool IsReplacingImage(ImageType type) + { + return ReplaceAllImages || ReplaceImages.Contains(type); } } diff --git a/MediaBrowser.MediaEncoding/Subtitles/SrtParser.cs b/MediaBrowser.MediaEncoding/Subtitles/SrtParser.cs index 0f1f17bc03..f94fae9e92 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/SrtParser.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/SrtParser.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Globalization; using System.IO; -using System.Text; using System.Text.RegularExpressions; using System.Threading; @@ -54,7 +53,6 @@ namespace MediaBrowser.MediaEncoding.Subtitles subEvent.Text = Regex.Replace(subEvent.Text, "<", "<", RegexOptions.IgnoreCase); subEvent.Text = Regex.Replace(subEvent.Text, ">", ">", RegexOptions.IgnoreCase); subEvent.Text = Regex.Replace(subEvent.Text, "<(\\/?(font|b|u|i|s))((\\s+(\\w|\\w[\\w\\-]*\\w)(\\s*=\\s*(?:\\\".*?\\\"|'.*?'|[^'\\\">\\s]+))?)+\\s*|\\s*)(\\/?)>", "<$1$3$7>", RegexOptions.IgnoreCase); - subEvent.Text = Regex.Replace(subEvent.Text, @"\\N", "
",RegexOptions.IgnoreCase); trackInfo.TrackEvents.Add(subEvent); } } diff --git a/MediaBrowser.MediaEncoding/Subtitles/SsaParser.cs b/MediaBrowser.MediaEncoding/Subtitles/SsaParser.cs index 72c8076e7c..e21804f6cc 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/SsaParser.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/SsaParser.cs @@ -43,7 +43,6 @@ namespace MediaBrowser.MediaEncoding.Subtitles subEvent.EndPositionTicks = GetTicks(sections[headers["End"]]); subEvent.Text = string.Join(",", sections.Skip(headers["Text"])); subEvent.Text = Regex.Replace(subEvent.Text, @"\{(\\[\w]+\(?([\w\d]+,?)+\)?)+\}", string.Empty, RegexOptions.IgnoreCase); - subEvent.Text = Regex.Replace(subEvent.Text, @"\\N", "
", RegexOptions.IgnoreCase); trackInfo.TrackEvents.Add(subEvent); } diff --git a/MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs b/MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs index 4768b9632f..d570bec1c4 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Text.RegularExpressions; using System.Threading; namespace MediaBrowser.MediaEncoding.Subtitles @@ -19,7 +20,10 @@ namespace MediaBrowser.MediaEncoding.Subtitles cancellationToken.ThrowIfCancellationRequested(); writer.WriteLine(@"{0:hh\:mm\:ss\.fff} --> {1:hh\:mm\:ss\.fff}", TimeSpan.FromTicks(trackEvent.StartPositionTicks), TimeSpan.FromTicks(trackEvent.EndPositionTicks)); - writer.WriteLine(trackEvent.Text); + + var text = Regex.Replace(trackEvent.Text, @"\\N", "
", RegexOptions.IgnoreCase); + + writer.WriteLine(text); writer.WriteLine(string.Empty); } } diff --git a/MediaBrowser.Providers/Manager/ItemImageProvider.cs b/MediaBrowser.Providers/Manager/ItemImageProvider.cs index ca02953ad8..cbcb0caf29 100644 --- a/MediaBrowser.Providers/Manager/ItemImageProvider.cs +++ b/MediaBrowser.Providers/Manager/ItemImageProvider.cs @@ -78,7 +78,7 @@ namespace MediaBrowser.Providers.Manager if (dynamicImageProvider != null) { - await RefreshFromProvider(item, dynamicImageProvider, savedOptions, result, cancellationToken).ConfigureAwait(false); + await RefreshFromProvider(item, dynamicImageProvider, refreshOptions, savedOptions, result, cancellationToken).ConfigureAwait(false); providerIds.Add(provider.GetType().FullName.GetMD5()); } } @@ -93,11 +93,17 @@ namespace MediaBrowser.Providers.Manager /// /// The item. /// The provider. + /// The refresh options. /// The saved options. /// The result. /// The cancellation token. /// Task. - private async Task RefreshFromProvider(IHasImages item, IDynamicImageProvider provider, MetadataOptions savedOptions, RefreshResult result, CancellationToken cancellationToken) + private async Task RefreshFromProvider(IHasImages item, + IDynamicImageProvider provider, + ImageRefreshOptions refreshOptions, + MetadataOptions savedOptions, + RefreshResult result, + CancellationToken cancellationToken) { try { @@ -105,7 +111,8 @@ namespace MediaBrowser.Providers.Manager foreach (var imageType in images) { - if (!item.HasImage(imageType) && savedOptions.IsEnabled(imageType)) + if (savedOptions.IsEnabled(imageType) && + (!item.HasImage(imageType) || refreshOptions.IsReplacingImage(imageType))) { _logger.Debug("Running {0} for {1}", provider.GetType().Name, item.Path ?? item.Name); diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs index 0d8cce6f14..6f888097b5 100644 --- a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs +++ b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs @@ -240,11 +240,18 @@ namespace MediaBrowser.Providers.MediaInfo if (options.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || options.MetadataRefreshMode == MetadataRefreshMode.EnsureMetadata) { - var remoteChapters = await DownloadChapters(video, chapters, cancellationToken).ConfigureAwait(false); + try + { + var remoteChapters = await DownloadChapters(video, chapters, cancellationToken).ConfigureAwait(false); - if (remoteChapters.Count > 0) + if (remoteChapters.Count > 0) + { + chapters = remoteChapters; + } + } + catch (Exception ex) { - chapters = remoteChapters; + _logger.ErrorException("Error downloading chapters", ex); } if (chapters.Count == 0 && mediaStreams.Any(i => i.Type == MediaStreamType.Video)) diff --git a/MediaBrowser.Server.Implementations/Localization/Server/server.json b/MediaBrowser.Server.Implementations/Localization/Server/server.json index 2eec7432ce..af191ca9a1 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/server.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/server.json @@ -733,7 +733,7 @@ "OptionReportByteRangeSeekingWhenTranscodingHelp": "This is required for some devices that don't time seek very well.", "HeaderSubtitleDownloadingHelp": "When Media Browser scans your video files it can search for missing subtitles, and download them using a subtitle provider such as OpenSubtitles.org.", "HeaderDownloadSubtitlesFor": "Download subtitles for:", - "MessageNoChapterProviders": "Install a chapter provider plugin such as ChapterDb or tagChimp to enable additional chapter options.", + "MessageNoChapterProviders": "Install a chapter provider plugin such as ChapterDb to enable additional chapter options.", "LabelSkipIfGraphicalSubsPresent": "Skip if the video already contains graphical subtitles", "LabelSkipIfGraphicalSubsPresentHelp": "Keeping text versions of subtitles will result in more efficient delivery to mobile clients.", "TabSubtitles": "Subtitles", @@ -741,7 +741,7 @@ "HeaderDownloadChaptersFor": "Download chapter names for:", "LabelOpenSubtitlesUsername": "Open Subtitles username:", "LabelOpenSubtitlesPassword": "Open Subtitles password:", - "HeaderChapterDownloadingHelp": "When Media Browser scans your video files it can download friendly chapter names from the internet using chapter plugins such as ChapterDb and tagChimp.", + "HeaderChapterDownloadingHelp": "When Media Browser scans your video files it can download friendly chapter names from the internet using chapter plugins such as ChapterDb.", "LabelPlayDefaultAudioTrack": "Play default audio track regardless of language", "LabelSubtitlePlaybackMode": "Subtitle mode:", "LabelDownloadLanguages": "Download languages:",