Explorar o código

Merge pull request #2154 from dkanada/artist-collage

Add image provider for artists
dkanada %!s(int64=5) %!d(string=hai) anos
pai
achega
836741f2aa

+ 47 - 0
Emby.Server.Implementations/Images/ArtistImageProvider.cs

@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Emby.Server.Implementations.Images;
+using MediaBrowser.Common.Configuration;
+using MediaBrowser.Controller.Drawing;
+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.Playlists;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Querying;
+
+namespace Emby.Server.Implementations.Images
+{
+    public class ArtistImageProvider : BaseDynamicImageProvider<MusicArtist>
+    {
+        private readonly ILibraryManager _libraryManager;
+
+        public ArtistImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
+        {
+            _libraryManager = libraryManager;
+        }
+
+        protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
+        {
+            return Array.Empty<BaseItem>();
+
+            // TODO enable this when BaseDynamicImageProvider objects are configurable
+            // return _libraryManager.GetItemList(new InternalItemsQuery
+            // {
+            //    ArtistIds = new[] { item.Id },
+            //    IncludeItemTypes = new[] { typeof(MusicAlbum).Name },
+            //    OrderBy = new[] { (ItemSortBy.Random, SortOrder.Ascending) },
+            //    Limit = 4,
+            //    Recursive = true,
+            //    ImageTypes = new[] { ImageType.Primary },
+            //    DtoOptions = new DtoOptions(false)
+            // });
+        }
+    }
+}

+ 10 - 3
Emby.Server.Implementations/Images/BaseDynamicImageProvider.cs

@@ -194,7 +194,8 @@ namespace Emby.Server.Implementations.Images
             return outputPath;
             return outputPath;
         }
         }
 
 
-        protected virtual string CreateImage(BaseItem item,
+        protected virtual string CreateImage(
+            BaseItem item,
             IReadOnlyCollection<BaseItem> itemsWithImages,
             IReadOnlyCollection<BaseItem> itemsWithImages,
             string outputPathWithoutExtension,
             string outputPathWithoutExtension,
             ImageType imageType,
             ImageType imageType,
@@ -214,7 +215,12 @@ namespace Emby.Server.Implementations.Images
 
 
             if (imageType == ImageType.Primary)
             if (imageType == ImageType.Primary)
             {
             {
-                if (item is UserView || item is Playlist || item is MusicGenre || item is Genre || item is PhotoAlbum)
+                if (item is UserView
+                    || item is Playlist
+                    || item is MusicGenre
+                    || item is Genre
+                    || item is PhotoAlbum
+                    || item is MusicArtist)
                 {
                 {
                     return CreateSquareCollage(item, itemsWithImages, outputPath);
                     return CreateSquareCollage(item, itemsWithImages, outputPath);
                 }
                 }
@@ -225,7 +231,7 @@ namespace Emby.Server.Implementations.Images
             throw new ArgumentException("Unexpected image type", nameof(imageType));
             throw new ArgumentException("Unexpected image type", nameof(imageType));
         }
         }
 
 
-        public bool HasChanged(BaseItem item, IDirectoryService directoryServicee)
+        public bool HasChanged(BaseItem item, IDirectoryService directoryService)
         {
         {
             if (!Supports(item))
             if (!Supports(item))
             {
             {
@@ -236,6 +242,7 @@ namespace Emby.Server.Implementations.Images
             {
             {
                 return true;
                 return true;
             }
             }
+
             if (SupportedImages.Contains(ImageType.Thumb) && HasChanged(item, ImageType.Thumb))
             if (SupportedImages.Contains(ImageType.Thumb) && HasChanged(item, ImageType.Thumb))
             {
             {
                 return true;
                 return true;

+ 1 - 1
Emby.Server.Implementations/UserViews/CollectionFolderImageProvider.cs → Emby.Server.Implementations/Images/CollectionFolderImageProvider.cs

@@ -13,7 +13,7 @@ using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.Querying;
 using MediaBrowser.Model.Querying;
 
 
-namespace Emby.Server.Implementations.UserViews
+namespace Emby.Server.Implementations.Images
 {
 {
     public class CollectionFolderImageProvider : BaseDynamicImageProvider<CollectionFolder>
     public class CollectionFolderImageProvider : BaseDynamicImageProvider<CollectionFolder>
     {
     {

+ 1 - 1
Emby.Server.Implementations/UserViews/DynamicImageProvider.cs → Emby.Server.Implementations/Images/DynamicImageProvider.cs

@@ -16,7 +16,7 @@ using MediaBrowser.Controller.Providers;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.IO;
 
 
-namespace Emby.Server.Implementations.UserViews
+namespace Emby.Server.Implementations.Images
 {
 {
     public class DynamicImageProvider : BaseDynamicImageProvider<UserView>
     public class DynamicImageProvider : BaseDynamicImageProvider<UserView>
     {
     {

+ 3 - 7
Emby.Server.Implementations/UserViews/FolderImageProvider.cs → Emby.Server.Implementations/Images/FolderImageProvider.cs

@@ -13,7 +13,7 @@ using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.Querying;
 using MediaBrowser.Model.Querying;
 
 
-namespace Emby.Server.Implementations.UserViews
+namespace Emby.Server.Implementations.Images
 {
 {
     public abstract class BaseFolderImageProvider<T> : BaseDynamicImageProvider<T>
     public abstract class BaseFolderImageProvider<T> : BaseDynamicImageProvider<T>
         where T : Folder, new()
         where T : Folder, new()
@@ -77,16 +77,12 @@ namespace Emby.Server.Implementations.UserViews
                 return false;
                 return false;
             }
             }
 
 
-            if (item is Folder folder)
+            if (item is Folder && item.IsTopParent)
             {
             {
-                if (folder.IsTopParent)
-                {
-                    return false;
-                }
+                return false;
             }
             }
 
 
             return true;
             return true;
-            //return item.SourceType == SourceType.Library;
         }
         }
     }
     }
 
 

+ 2 - 51
Emby.Server.Implementations/Playlists/PlaylistImageProvider.cs → Emby.Server.Implementations/Images/GenreImageProvider.cs

@@ -1,5 +1,4 @@
-#pragma warning disable CS1591
-
+using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Linq;
 using System.Linq;
 using Emby.Server.Implementations.Images;
 using Emby.Server.Implementations.Images;
@@ -17,56 +16,8 @@ using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.Querying;
 using MediaBrowser.Model.Querying;
 
 
-namespace Emby.Server.Implementations.Playlists
+namespace Emby.Server.Implementations.Images
 {
 {
-    public class PlaylistImageProvider : BaseDynamicImageProvider<Playlist>
-    {
-        public PlaylistImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
-        {
-        }
-
-        protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
-        {
-            var playlist = (Playlist)item;
-
-            return playlist.GetManageableItems()
-                .Select(i =>
-                {
-                    var subItem = i.Item2;
-
-                    if (subItem is Episode episode)
-                    {
-                        var series = episode.Series;
-                        if (series != null && series.HasImage(ImageType.Primary))
-                        {
-                            return series;
-                        }
-                    }
-
-                    if (subItem.HasImage(ImageType.Primary))
-                    {
-                        return subItem;
-                    }
-
-                    var parent = subItem.GetOwner() ?? subItem.GetParent();
-
-                    if (parent != null && parent.HasImage(ImageType.Primary))
-                    {
-                        if (parent is MusicAlbum)
-                        {
-                            return parent;
-                        }
-                    }
-
-                    return null;
-                })
-                .Where(i => i != null)
-                .GroupBy(x => x.Id)
-                .Select(x => x.First())
-                .ToList();
-        }
-    }
-
     public class MusicGenreImageProvider : BaseDynamicImageProvider<MusicGenre>
     public class MusicGenreImageProvider : BaseDynamicImageProvider<MusicGenre>
     {
     {
         private readonly ILibraryManager _libraryManager;
         private readonly ILibraryManager _libraryManager;

+ 66 - 0
Emby.Server.Implementations/Images/PlaylistImageProvider.cs

@@ -0,0 +1,66 @@
+#pragma warning disable CS1591
+
+using System.Collections.Generic;
+using System.Linq;
+using MediaBrowser.Common.Configuration;
+using MediaBrowser.Controller.Drawing;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
+using MediaBrowser.Controller.Entities.TV;
+using MediaBrowser.Controller.Playlists;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.IO;
+
+namespace Emby.Server.Implementations.Images
+{
+    public class PlaylistImageProvider : BaseDynamicImageProvider<Playlist>
+    {
+        public PlaylistImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
+        {
+        }
+
+        protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
+        {
+            var playlist = (Playlist)item;
+
+            return playlist.GetManageableItems()
+                .Select(i =>
+                {
+                    var subItem = i.Item2;
+
+                    var episode = subItem as Episode;
+
+                    if (episode != null)
+                    {
+                        var series = episode.Series;
+                        if (series != null && series.HasImage(ImageType.Primary))
+                        {
+                            return series;
+                        }
+                    }
+
+                    if (subItem.HasImage(ImageType.Primary))
+                    {
+                        return subItem;
+                    }
+
+                    var parent = subItem.GetOwner() ?? subItem.GetParent();
+
+                    if (parent != null && parent.HasImage(ImageType.Primary))
+                    {
+                        if (parent is MusicAlbum)
+                        {
+                            return parent;
+                        }
+                    }
+
+                    return null;
+                })
+                .Where(i => i != null)
+                .GroupBy(x => x.Id)
+                .Select(x => x.First())
+                .ToList();
+        }
+    }
+}

+ 3 - 7
Jellyfin.Drawing.Skia/SkiaEncoder.cs

@@ -53,9 +53,7 @@ namespace Jellyfin.Drawing.Skia
                 "jpeg",
                 "jpeg",
                 "jpg",
                 "jpg",
                 "png",
                 "png",
-
                 "dng",
                 "dng",
-
                 "webp",
                 "webp",
                 "gif",
                 "gif",
                 "bmp",
                 "bmp",
@@ -64,10 +62,8 @@ namespace Jellyfin.Drawing.Skia
                 "ktx",
                 "ktx",
                 "pkm",
                 "pkm",
                 "wbmp",
                 "wbmp",
-
-                // TODO
-                // Are all of these supported? https://github.com/google/skia/blob/master/infra/bots/recipes/test.py#L454
-
+                // TODO: check if these are supported on multiple platforms
+                // https://github.com/google/skia/blob/master/infra/bots/recipes/test.py#L454
                 // working on windows at least
                 // working on windows at least
                 "cr2",
                 "cr2",
                 "nef",
                 "nef",
@@ -272,7 +268,7 @@ namespace Jellyfin.Drawing.Skia
                 return path;
                 return path;
             }
             }
 
 
-            var tempPath = Path.Combine(_appPaths.TempDirectory, Guid.NewGuid() + Path.GetExtension(path) ?? string.Empty);
+            var tempPath = Path.Combine(_appPaths.TempDirectory, Guid.NewGuid() + Path.GetExtension(path));
 
 
             Directory.CreateDirectory(Path.GetDirectoryName(tempPath));
             Directory.CreateDirectory(Path.GetDirectoryName(tempPath));
             File.Copy(path, tempPath, true);
             File.Copy(path, tempPath, true);