From 5e07bdf93c227bc98874ad333de4a6025fc53d6e Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 26 Mar 2015 19:10:34 -0400 Subject: [PATCH] sync fixes --- MediaBrowser.Api/Playback/MediaInfoService.cs | 16 ++++----- MediaBrowser.Model/Dlna/StreamInfoSorter.cs | 19 +++++++---- .../Library/LibraryManager.cs | 8 +++-- .../Photos/BaseDynamicImageProvider.cs | 6 ++-- .../Sync/MediaSync.cs | 33 ++++++++++++++++--- .../UserViews/StripCollageBuilder.cs | 2 +- 6 files changed, 59 insertions(+), 25 deletions(-) diff --git a/MediaBrowser.Api/Playback/MediaInfoService.cs b/MediaBrowser.Api/Playback/MediaInfoService.cs index ce140365bb..e219f41869 100644 --- a/MediaBrowser.Api/Playback/MediaInfoService.cs +++ b/MediaBrowser.Api/Playback/MediaInfoService.cs @@ -86,14 +86,14 @@ namespace MediaBrowser.Api.Playback var authInfo = AuthorizationContext.GetAuthorizationInfo(Request); var profile = request.DeviceProfile; - //if (profile == null) - //{ - // var caps = _deviceManager.GetCapabilities(authInfo.DeviceId); - // if (caps != null) - // { - // profile = caps.DeviceProfile; - // } - //} + if (profile == null) + { + var caps = _deviceManager.GetCapabilities(authInfo.DeviceId); + if (caps != null) + { + profile = caps.DeviceProfile; + } + } if (profile != null) { diff --git a/MediaBrowser.Model/Dlna/StreamInfoSorter.cs b/MediaBrowser.Model/Dlna/StreamInfoSorter.cs index 80eca193f5..87c6615480 100644 --- a/MediaBrowser.Model/Dlna/StreamInfoSorter.cs +++ b/MediaBrowser.Model/Dlna/StreamInfoSorter.cs @@ -1,6 +1,5 @@ using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.Session; -using System; using System.Collections.Generic; using System.Linq; @@ -11,17 +10,25 @@ namespace MediaBrowser.Model.Dlna public static List SortMediaSources(List streams) { return streams.OrderBy(i => + { + // Nothing beats direct playing a file + if (i.PlayMethod == PlayMethod.DirectPlay && i.MediaSource.Protocol == MediaProtocol.File) + { + return 0; + } + + return 1; + + }).ThenBy(i => { switch (i.PlayMethod) { + // Let's assume direct streaming a file is just as desirable as direct playing a remote url + case PlayMethod.DirectStream: case PlayMethod.DirectPlay: return 0; - case PlayMethod.DirectStream: - return 1; - case PlayMethod.Transcode: - return 2; default: - throw new ArgumentException("Unrecognized PlayMethod"); + return 2; } }).ThenBy(i => diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 64e5d20c99..f9fa1aae35 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -1713,11 +1713,15 @@ namespace MediaBrowser.Server.Implementations.Library isNew = true; } - var refresh = isNew || (DateTime.UtcNow - item.DateLastSaved).TotalHours >= 6; + var refresh = isNew || (DateTime.UtcNow - item.DateLastSaved).TotalHours >= 12; if (refresh) { - _providerManagerFactory().QueueRefresh(item.Id, new MetadataRefreshOptions()); + _providerManagerFactory().QueueRefresh(item.Id, new MetadataRefreshOptions + { + // Need to force save to increment DateLastSaved + ForceSave = true + }); } return item; diff --git a/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs b/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs index eac0cd96d9..1063fde530 100644 --- a/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs +++ b/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs @@ -125,7 +125,7 @@ namespace MediaBrowser.Server.Implementations.Photos protected abstract Task> GetItemsWithImages(IHasImages item); - private const string Version = "4"; + private const string Version = "5"; protected string GetConfigurationCacheKey(List items, string itemName) { var parts = Version + "_" + (itemName ?? string.Empty) + "_" + @@ -223,8 +223,8 @@ namespace MediaBrowser.Server.Implementations.Photos protected virtual List GetFinalItems(List items, int limit) { - // Rotate the images once every 7 days - var random = DateTime.Now.DayOfYear % 7; + // Rotate the images once every x days + var random = DateTime.Now.DayOfYear % 4; return items .OrderBy(i => (random + "" + items.IndexOf(i)).GetMD5()) diff --git a/MediaBrowser.Server.Implementations/Sync/MediaSync.cs b/MediaBrowser.Server.Implementations/Sync/MediaSync.cs index 429b724898..815756f9b2 100644 --- a/MediaBrowser.Server.Implementations/Sync/MediaSync.cs +++ b/MediaBrowser.Server.Implementations/Sync/MediaSync.cs @@ -176,6 +176,8 @@ namespace MediaBrowser.Server.Implementations.Sync mediaSource.Path = sendFileResult.Path; mediaSource.Protocol = sendFileResult.Protocol; mediaSource.SupportsTranscoding = false; + + await SendSubtitles(localItem, mediaSource, provider, dataProvider, target, cancellationToken).ConfigureAwait(false); } } @@ -205,16 +207,37 @@ namespace MediaBrowser.Server.Implementations.Sync private async Task SendSubtitles(LocalItem localItem, MediaSourceInfo mediaSource, IServerSyncProvider provider, ISyncDataProvider dataProvider, SyncTarget target, CancellationToken cancellationToken) { + var failedSubtitles = new List(); + var requiresSave = false; + foreach (var mediaStream in mediaSource.MediaStreams .Where(i => i.Type == MediaStreamType.Subtitle && i.IsExternal) .ToList()) { - var sendFileResult = await SendFile(provider, mediaStream.Path, localItem, target, cancellationToken).ConfigureAwait(false); + try + { + var sendFileResult = await SendFile(provider, mediaStream.Path, localItem, target, cancellationToken).ConfigureAwait(false); - mediaStream.Path = sendFileResult.Path; - + mediaStream.Path = sendFileResult.Path; + requiresSave = true; + } + catch (Exception ex) + { + _logger.ErrorException("Error sending subtitle stream", ex); + failedSubtitles.Add(mediaStream); + } + } + + if (failedSubtitles.Count > 0) + { + mediaSource.MediaStreams = mediaSource.MediaStreams.Except(failedSubtitles).ToList(); + requiresSave = true; + } + + if (requiresSave) + { await dataProvider.AddOrUpdate(target, localItem).ConfigureAwait(false); - } + } } private async Task RemoveItem(IServerSyncProvider provider, @@ -374,7 +397,7 @@ namespace MediaBrowser.Server.Implementations.Sync var name = Path.GetFileNameWithoutExtension(item.LocalPath); - foreach (var file in list.Where(f => f.Name.Contains(name))) + foreach (var file in list.Where(f => f.Name.IndexOf(name, StringComparison.OrdinalIgnoreCase) != -1)) { var itemFile = new ItemFileInfo { diff --git a/MediaBrowser.Server.Implementations/UserViews/StripCollageBuilder.cs b/MediaBrowser.Server.Implementations/UserViews/StripCollageBuilder.cs index af2e014574..0bf4d8e4ac 100644 --- a/MediaBrowser.Server.Implementations/UserViews/StripCollageBuilder.cs +++ b/MediaBrowser.Server.Implementations/UserViews/StripCollageBuilder.cs @@ -162,7 +162,7 @@ namespace MediaBrowser.Server.Implementations.UserViews wandList.AddImage(mwr); int ex = (int)(wand.CurrentImage.Width - mwg.CurrentImage.Width) / 2; - wand.CurrentImage.CompositeImage(wandList.AppendImages(true), CompositeOperator.AtopCompositeOp, ex, Convert.ToInt32(height * .08)); + wand.CurrentImage.CompositeImage(wandList.AppendImages(true), CompositeOperator.AtopCompositeOp, ex, Convert.ToInt32(height * .085)); } } }