فهرست منبع

update image processing

Luke Pulverenti 10 سال پیش
والد
کامیت
8f75454d76

+ 2 - 2
Emby.Drawing/ImageMagick/StripCollageBuilder.cs

@@ -285,14 +285,14 @@ namespace Emby.Drawing.ImageMagick
 
         private MagickWand BuildThumbCollageWand(List<string> paths, int width, int height)
         {
-            var inputPaths = ImageHelpers.ProjectPaths(paths, 8);
+            var inputPaths = ImageHelpers.ProjectPaths(paths, 4);
             using (var wandImages = new MagickWand(inputPaths.ToArray()))
             {
                 var wand = new MagickWand(width, height);
                 wand.OpenImage("gradient:#111111-#111111");
                 using (var draw = new DrawingWand())
                 {
-                    var iSlice = Convert.ToInt32(width * .1166666667);
+                    var iSlice = Convert.ToInt32(width * .1166666667 * 2);
                     int iTrans = Convert.ToInt32(height * .25);
                     int iHeight = Convert.ToInt32(height * .62);
                     var horizontalImagePadding = Convert.ToInt32(width * 0.0125);

+ 0 - 1
MediaBrowser.Api/UserLibrary/ItemsService.cs

@@ -2,7 +2,6 @@
 using MediaBrowser.Controller.Dto;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
-using MediaBrowser.Controller.Entities.Movies;
 using MediaBrowser.Controller.Entities.TV;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Localization;

+ 1 - 1
MediaBrowser.Api/UserLibrary/UserViewsService.cs

@@ -89,7 +89,7 @@ namespace MediaBrowser.Api.UserLibrary
             var views = user.RootFolder
                 .GetChildren(user, true)
                 .OfType<ICollectionFolder>()
-                .Where(i => IsEligibleForSpecialView(i))
+                .Where(IsEligibleForSpecialView)
                 .ToList();
 
             var list = views

+ 14 - 0
MediaBrowser.Controller/Entities/ICollectionFolder.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Linq;
 
 namespace MediaBrowser.Controller.Entities
 {
@@ -14,4 +15,17 @@ namespace MediaBrowser.Controller.Entities
         Guid Id { get; }
         IEnumerable<string> PhysicalLocations { get; }
     }
+
+    public static class CollectionFolderExtensions
+    {
+        public static string GetViewType(this ICollectionFolder folder, User user)
+        {
+            if (user.Configuration.PlainFolderViews.Contains(folder.Id.ToString("N"), StringComparer.OrdinalIgnoreCase))
+            {
+                return null;
+            }
+
+            return folder.CollectionType;
+        }
+    }
 }

+ 1 - 4
MediaBrowser.Controller/Entities/UserViewBuilder.cs

@@ -264,10 +264,7 @@ namespace MediaBrowser.Controller.Entities
 
         private async Task<QueryResult<BaseItem>> FindPlaylists(Folder parent, User user, InternalItemsQuery query)
         {
-            var collectionFolders = user.RootFolder.GetChildren(user, true).Select(i => i.Id).ToList();
-
-            var list = _playlistManager.GetPlaylists(user.Id.ToString("N"))
-                .Where(i => i.GetChildren(user, true).Any(media => _libraryManager.GetCollectionFolders(media).Select(c => c.Id).Any(collectionFolders.Contains)));
+            var list = _playlistManager.GetPlaylists(user.Id.ToString("N"));
 
             return GetResult(list, parent, query);
         }

+ 1 - 1
MediaBrowser.Server.Implementations/Channels/ChannelManager.cs

@@ -476,7 +476,7 @@ namespace MediaBrowser.Server.Implementations.Channels
 
         public Channel GetChannel(string id)
         {
-            return (Channel)_libraryManager.GetItemById(new Guid(id));
+            return _libraryManager.GetItemById(new Guid(id)) as Channel;
         }
 
         public IEnumerable<ChannelFeatures> GetAllChannelFeatures()

+ 0 - 1
MediaBrowser.Server.Implementations/Collections/ManualCollectionsFolder.cs

@@ -1,5 +1,4 @@
 using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Movies;
 using System.Linq;
 
 namespace MediaBrowser.Server.Implementations.Collections

+ 8 - 6
MediaBrowser.Server.Implementations/Dto/DtoService.cs

@@ -351,6 +351,14 @@ namespace MediaBrowser.Server.Implementations.Dto
 
             AttachBasicFields(dto, item, owner, options);
 
+            var collectionFolder = item as ICollectionFolder;
+            if (collectionFolder != null)
+            {
+                dto.CollectionType = user == null ?
+                    collectionFolder.CollectionType :
+                    collectionFolder.GetViewType(user);
+            }
+
             var playlist = item as Playlist;
             if (playlist != null)
             {
@@ -1066,12 +1074,6 @@ namespace MediaBrowser.Server.Implementations.Dto
                 dto.DisplayOrder = hasDisplayOrder.DisplayOrder;
             }
 
-            var collectionFolder = item as ICollectionFolder;
-            if (collectionFolder != null)
-            {
-                dto.CollectionType = collectionFolder.CollectionType;
-            }
-
             var userView = item as UserView;
             if (userView != null)
             {

+ 1 - 1
MediaBrowser.Server.Implementations/Library/LibraryManager.cs

@@ -1615,7 +1615,7 @@ namespace MediaBrowser.Server.Implementations.Library
                 .FirstOrDefault(i => !string.IsNullOrWhiteSpace(i));
         }
 
-        private readonly TimeSpan _viewRefreshInterval = TimeSpan.FromHours(.01);
+        private readonly TimeSpan _viewRefreshInterval = TimeSpan.FromHours(24);
 
         public async Task<UserView> GetNamedView(User user,
             string name,

+ 9 - 10
MediaBrowser.Server.Implementations/Library/UserViewManager.cs

@@ -91,7 +91,7 @@ namespace MediaBrowser.Server.Implementations.Library
                 list.AddRange(standaloneFolders);
             }
 
-            var parents = foldersWithViewTypes.Where(i => string.Equals(i.CollectionType, CollectionType.TvShows, StringComparison.OrdinalIgnoreCase) || string.IsNullOrWhiteSpace(i.CollectionType))
+            var parents = foldersWithViewTypes.Where(i => string.Equals(i.GetViewType(user), CollectionType.TvShows, StringComparison.OrdinalIgnoreCase) || string.IsNullOrWhiteSpace(i.GetViewType(user)))
                 .ToList();
 
             if (parents.Count > 0)
@@ -99,7 +99,7 @@ namespace MediaBrowser.Server.Implementations.Library
                 list.Add(await GetUserView(parents, list, CollectionType.TvShows, string.Empty, user, cancellationToken).ConfigureAwait(false));
             }
 
-            parents = foldersWithViewTypes.Where(i => string.Equals(i.CollectionType, CollectionType.Music, StringComparison.OrdinalIgnoreCase) || string.IsNullOrWhiteSpace(i.CollectionType))
+            parents = foldersWithViewTypes.Where(i => string.Equals(i.GetViewType(user), CollectionType.Music, StringComparison.OrdinalIgnoreCase) || string.IsNullOrWhiteSpace(i.GetViewType(user)))
                 .ToList();
 
             if (parents.Count > 0)
@@ -107,7 +107,7 @@ namespace MediaBrowser.Server.Implementations.Library
                 list.Add(await GetUserView(parents, list, CollectionType.Music, string.Empty, user, cancellationToken).ConfigureAwait(false));
             }
 
-            parents = foldersWithViewTypes.Where(i => string.Equals(i.CollectionType, CollectionType.Movies, StringComparison.OrdinalIgnoreCase) || string.IsNullOrWhiteSpace(i.CollectionType))
+            parents = foldersWithViewTypes.Where(i => string.Equals(i.GetViewType(user), CollectionType.Movies, StringComparison.OrdinalIgnoreCase) || string.IsNullOrWhiteSpace(i.GetViewType(user)))
                .ToList();
 
             if (parents.Count > 0)
@@ -115,7 +115,7 @@ namespace MediaBrowser.Server.Implementations.Library
                 list.Add(await GetUserView(parents, list, CollectionType.Movies, string.Empty, user, cancellationToken).ConfigureAwait(false));
             }
 
-            parents = foldersWithViewTypes.Where(i => string.Equals(i.CollectionType, CollectionType.Games, StringComparison.OrdinalIgnoreCase))
+            parents = foldersWithViewTypes.Where(i => string.Equals(i.GetViewType(user), CollectionType.Games, StringComparison.OrdinalIgnoreCase))
                .ToList();
 
             if (parents.Count > 0)
@@ -123,7 +123,7 @@ namespace MediaBrowser.Server.Implementations.Library
                 list.Add(await GetUserView(parents, list, CollectionType.Games, string.Empty, user, cancellationToken).ConfigureAwait(false));
             }
 
-            parents = foldersWithViewTypes.Where(i => string.Equals(i.CollectionType, CollectionType.BoxSets, StringComparison.OrdinalIgnoreCase))
+            parents = foldersWithViewTypes.Where(i => string.Equals(i.GetViewType(user), CollectionType.BoxSets, StringComparison.OrdinalIgnoreCase))
                .ToList();
 
             if (parents.Count > 0)
@@ -131,7 +131,7 @@ namespace MediaBrowser.Server.Implementations.Library
                 list.Add(await GetUserView(parents, list, CollectionType.BoxSets, string.Empty, user, cancellationToken).ConfigureAwait(false));
             }
 
-            parents = foldersWithViewTypes.Where(i => string.Equals(i.CollectionType, CollectionType.Playlists, StringComparison.OrdinalIgnoreCase))
+            parents = foldersWithViewTypes.Where(i => string.Equals(i.GetViewType(user), CollectionType.Playlists, StringComparison.OrdinalIgnoreCase))
                .ToList();
 
             if (parents.Count > 0)
@@ -204,8 +204,9 @@ namespace MediaBrowser.Server.Implementations.Library
         public async Task<UserView> GetUserView(List<ICollectionFolder> parents, List<Folder> currentViews, string viewType, string sortName, User user, CancellationToken cancellationToken)
         {
             var name = _localizationManager.GetLocalizedString("ViewType" + viewType);
+            var enableUserSpecificViews = _config.Configuration.EnableUserSpecificUserViews;
 
-            if (parents.Count == 1 && parents.All(i => string.Equals(i.CollectionType, viewType, StringComparison.OrdinalIgnoreCase)))
+            if (parents.Count == 1 && parents.All(i => string.Equals((enableUserSpecificViews ? i.CollectionType : i.GetViewType(user)), viewType, StringComparison.OrdinalIgnoreCase)))
             {
                 if (!string.IsNullOrWhiteSpace(parents[0].Name))
                 {
@@ -221,7 +222,7 @@ namespace MediaBrowser.Server.Implementations.Library
                     return await GetUserView(parentId, name, viewType, enableRichView, sortName, user, cancellationToken).ConfigureAwait(false);
                 }
 
-                if (_config.Configuration.EnableUserSpecificUserViews)
+                if (enableUserSpecificViews)
                 {
                     viewType = enableRichView ? viewType : null;
                     var view = await _libraryManager.GetNamedView(user, name, viewType, sortName, cancellationToken).ConfigureAwait(false);
@@ -233,8 +234,6 @@ namespace MediaBrowser.Server.Implementations.Library
                     }
                     return view;
                 }
-
-                return await _libraryManager.GetNamedView(user, name, viewType, sortName, cancellationToken).ConfigureAwait(false);
             }
 
             return await _libraryManager.GetNamedView(user, name, viewType, sortName, cancellationToken).ConfigureAwait(false);

+ 9 - 6
MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs

@@ -1,4 +1,5 @@
-using MediaBrowser.Common;
+using System.Globalization;
+using MediaBrowser.Common;
 using MediaBrowser.Common.Configuration;
 using MediaBrowser.Common.Extensions;
 using MediaBrowser.Common.Net;
@@ -453,11 +454,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
             }
 
             var mediaStreamInfo = await GetChannelStream(timer.ChannelId, null, CancellationToken.None);
-            var duration = (timer.EndDate - DateTime.UtcNow).TotalSeconds + timer.PostPaddingSeconds;
+            var duration = (timer.EndDate - DateTime.UtcNow).Add(TimeSpan.FromSeconds(timer.PostPaddingSeconds));
 
             HttpRequestOptions httpRequestOptions = new HttpRequestOptions()
             {
-                Url = mediaStreamInfo.Path + "?duration=" + duration
+                Url = mediaStreamInfo.Path + "?duration=" + duration.TotalSeconds.ToString(CultureInfo.InvariantCulture)
             };
 
             var info = GetProgramInfoFromCache(timer.ChannelId, timer.ProgramId);
@@ -516,13 +517,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
             try
             {
                 httpRequestOptions.BufferContent = false;
-                httpRequestOptions.CancellationToken = cancellationToken;
+                var durationToken = new CancellationTokenSource(duration);
+                var linkedToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, durationToken.Token).Token;
+                httpRequestOptions.CancellationToken = linkedToken;
                 _logger.Info("Writing file to path: " + recordPath);
                 using (var response = await _httpClient.SendAsync(httpRequestOptions, "GET"))
                 {
                     using (var output = File.Open(recordPath, FileMode.Create, FileAccess.Write, FileShare.Read))
                     {
-                        await response.Content.CopyToAsync(output, 4096, cancellationToken);
+                        await response.Content.CopyToAsync(output, 4096, linkedToken);
                     }
                 }
 
@@ -530,7 +533,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
             }
             catch (OperationCanceledException)
             {
-                recording.Status = RecordingStatus.Cancelled;
+                recording.Status = RecordingStatus.Completed;
             }
             catch
             {

+ 10 - 3
MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs

@@ -1,4 +1,5 @@
-using MediaBrowser.Common.Net;
+using MediaBrowser.Common;
+using MediaBrowser.Common.Net;
 using MediaBrowser.Controller.LiveTv;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.LiveTv;
@@ -20,19 +21,25 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings
         private readonly ILogger _logger;
         private readonly IJsonSerializer _jsonSerializer;
         private readonly IHttpClient _httpClient;
-        private const string UserAgent = "EmbyTV";
         private readonly SemaphoreSlim _tokenSemaphore = new SemaphoreSlim(1, 1);
+        private readonly IApplicationHost _appHost;
 
         private const string ApiUrl = "https://json.schedulesdirect.org/20141201";
 
         private readonly ConcurrentDictionary<string, ScheduleDirect.Station> _channelPair =
             new ConcurrentDictionary<string, ScheduleDirect.Station>();
 
-        public SchedulesDirect(ILogger logger, IJsonSerializer jsonSerializer, IHttpClient httpClient)
+        public SchedulesDirect(ILogger logger, IJsonSerializer jsonSerializer, IHttpClient httpClient, IApplicationHost appHost)
         {
             _logger = logger;
             _jsonSerializer = jsonSerializer;
             _httpClient = httpClient;
+            _appHost = appHost;
+        }
+
+        private string UserAgent
+        {
+            get { return "Emby/" + _appHost.ApplicationVersion; }
         }
 
         private List<string> GetScheduleRequestDates(DateTime startDateUtc, DateTime endDateUtc)

+ 3 - 3
MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs

@@ -118,7 +118,7 @@ namespace MediaBrowser.Server.Implementations.Photos
 
         protected Task<bool> CreateThumbCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, bool drawText)
         {
-            return CreateCollage(primaryItem, items, outputPath, 960, 540, drawText, primaryItem.Name);
+            return CreateCollage(primaryItem, items, outputPath, 640, 360, drawText, primaryItem.Name);
         }
 
         protected virtual IEnumerable<string> GetStripCollageImagePaths(IHasImages primaryItem, IEnumerable<BaseItem> items)
@@ -130,12 +130,12 @@ namespace MediaBrowser.Server.Implementations.Photos
 
         protected Task<bool> CreatePosterCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath)
         {
-            return CreateCollage(primaryItem, items, outputPath, 600, 900, true, primaryItem.Name);
+            return CreateCollage(primaryItem, items, outputPath, 400, 600, true, primaryItem.Name);
         }
 
         protected Task<bool> CreateSquareCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, bool drawText)
         {
-            return CreateCollage(primaryItem, items, outputPath, 800, 800, drawText, primaryItem.Name);
+            return CreateCollage(primaryItem, items, outputPath, 600, 600, drawText, primaryItem.Name);
         }
 
         protected Task<bool> CreateThumbCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, int width, int height, bool drawText, string text)

+ 1 - 3
MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs

@@ -16,9 +16,7 @@ namespace MediaBrowser.Server.Implementations.Playlists
 
         public override bool IsVisible(User user)
         {
-            return base.IsVisible(user) && GetChildren(user, false)
-                .OfType<Playlist>()
-                .Any(i => i.IsVisible(user));
+            return base.IsVisible(user) && GetChildren(user, false).Any();
         }
 
         protected override IEnumerable<BaseItem> GetEligibleChildrenForRecursiveChildren(User user)