mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-10 01:38:49 +01:00
Merge pull request #16855 from Shadowghost/fix-local-plugin-images
Fix integrated provider images
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -19,6 +19,7 @@ local.properties
|
||||
.classpath
|
||||
.settings/
|
||||
.loadpath
|
||||
*.lscache
|
||||
|
||||
# External tool builders
|
||||
.externalToolBuilders/
|
||||
|
||||
@@ -564,7 +564,8 @@ namespace Emby.Server.Implementations.Plugins
|
||||
Id = instance.Id,
|
||||
Status = PluginStatus.Active,
|
||||
Name = instance.Name,
|
||||
Version = instance.Version.ToString()
|
||||
Version = instance.Version.ToString(),
|
||||
ImageResourceName = (instance as IHasEmbeddedImage)?.ImageResourceName
|
||||
})
|
||||
{
|
||||
Instance = instance
|
||||
|
||||
@@ -226,16 +226,32 @@ public class PluginsController : BaseJellyfinApiController
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
var imagePath = Path.Combine(plugin.Path, plugin.Manifest.ImagePath ?? string.Empty);
|
||||
if (plugin.Manifest.ImagePath is null || !System.IO.File.Exists(imagePath))
|
||||
if (!string.IsNullOrEmpty(plugin.Manifest.ImagePath))
|
||||
{
|
||||
return NotFound();
|
||||
var imagePath = Path.Combine(plugin.Path, plugin.Manifest.ImagePath);
|
||||
if (!System.IO.File.Exists(imagePath))
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
Response.Headers.ContentDisposition = "attachment";
|
||||
return PhysicalFile(imagePath, MimeTypes.GetMimeType(imagePath));
|
||||
}
|
||||
|
||||
Response.Headers.ContentDisposition = "attachment";
|
||||
var resourceName = plugin.Manifest.ImageResourceName;
|
||||
if (!string.IsNullOrEmpty(resourceName) && plugin.Instance is not null)
|
||||
{
|
||||
var stream = plugin.Instance.GetType().Assembly.GetManifestResourceStream(resourceName);
|
||||
if (stream is null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
imagePath = Path.Combine(plugin.Path, plugin.Manifest.ImagePath);
|
||||
return PhysicalFile(imagePath, MimeTypes.GetMimeType(imagePath));
|
||||
Response.Headers.ContentDisposition = "attachment";
|
||||
return File(stream, MimeTypes.GetMimeType(resourceName));
|
||||
}
|
||||
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -109,7 +109,7 @@ namespace MediaBrowser.Common.Plugins
|
||||
{
|
||||
var inst = Instance?.GetPluginInfo() ?? new PluginInfo(Manifest.Name, Version, Manifest.Description, Manifest.Id, true);
|
||||
inst.Status = Manifest.Status;
|
||||
inst.HasImage = !string.IsNullOrEmpty(Manifest.ImagePath);
|
||||
inst.HasImage = !string.IsNullOrEmpty(Manifest.ImagePath) || !string.IsNullOrEmpty(Manifest.ImageResourceName);
|
||||
return inst;
|
||||
}
|
||||
|
||||
|
||||
@@ -107,6 +107,15 @@ namespace MediaBrowser.Common.Plugins
|
||||
[JsonPropertyName("imagePath")]
|
||||
public string? ImagePath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the name of an embedded resource in the plugin's assembly
|
||||
/// that should be served as the plugin image.
|
||||
/// Used by bundled/integrated plugins whose images are shipped inside the assembly
|
||||
/// rather than on disk. Ignored when <see cref="ImagePath"/> is set.
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public string? ImageResourceName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the collection of assemblies that should be loaded.
|
||||
/// Paths are considered relative to the plugin folder.
|
||||
|
||||
17
MediaBrowser.Controller/Plugins/IHasEmbeddedImage.cs
Normal file
17
MediaBrowser.Controller/Plugins/IHasEmbeddedImage.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
namespace MediaBrowser.Controller.Plugins;
|
||||
|
||||
/// <summary>
|
||||
/// Marker interface for integrated/bundled plugins that ship their plugin image as an embedded
|
||||
/// resource inside the plugin assembly rather than as a file on disk.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This interface is intended for plugins compiled into the server. External plugins should
|
||||
/// continue to declare their image via the <c>imagePath</c> field in <c>meta.json</c>.
|
||||
/// </remarks>
|
||||
public interface IHasEmbeddedImage
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the name of the embedded resource in this plugin's assembly to serve as the plugin image.
|
||||
/// </summary>
|
||||
string ImageResourceName { get; }
|
||||
}
|
||||
@@ -3,7 +3,7 @@ using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Providers;
|
||||
|
||||
namespace MediaBrowser.Providers.Plugins.ComicVine
|
||||
namespace MediaBrowser.Providers.Books.ComicVine
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public class ComicVineExternalId : IExternalId
|
||||
@@ -3,7 +3,7 @@ using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Model.Entities;
|
||||
|
||||
namespace MediaBrowser.Providers.Plugins.ComicVine;
|
||||
namespace MediaBrowser.Providers.Books.ComicVine;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public class ComicVineExternalUrlProvider : IExternalUrlProvider
|
||||
@@ -3,7 +3,7 @@ using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Providers;
|
||||
|
||||
namespace MediaBrowser.Providers.Plugins.ComicVine
|
||||
namespace MediaBrowser.Providers.Books.ComicVine
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public class ComicVinePersonExternalId : IExternalId
|
||||
@@ -3,7 +3,7 @@ using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Providers;
|
||||
|
||||
namespace MediaBrowser.Providers.Plugins.GoogleBooks
|
||||
namespace MediaBrowser.Providers.Books.GoogleBooks
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public class GoogleBooksExternalId : IExternalId
|
||||
@@ -3,7 +3,7 @@ using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Model.Entities;
|
||||
|
||||
namespace MediaBrowser.Providers.Plugins.GoogleBooks;
|
||||
namespace MediaBrowser.Providers.Books.GoogleBooks;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public class GoogleBooksExternalUrlProvider : IExternalUrlProvider
|
||||
@@ -47,22 +47,53 @@
|
||||
<PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- AudioDb -->
|
||||
<ItemGroup>
|
||||
<None Remove="Plugins\AudioDb\Configuration\config.html" />
|
||||
<EmbeddedResource Include="Plugins\AudioDb\Configuration\config.html" />
|
||||
<None Remove="Plugins\Omdb\Configuration\config.html" />
|
||||
<EmbeddedResource Include="Plugins\Omdb\Configuration\config.html" />
|
||||
<None Remove="Plugins\AudioDb\jellyfin-plugin-tadb.svg" />
|
||||
<EmbeddedResource Include="Plugins\AudioDb\jellyfin-plugin-tadb.svg" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- ListenBrainz -->
|
||||
<ItemGroup>
|
||||
<None Remove="Plugins\ListenBrainz\Configuration\config.html" />
|
||||
<EmbeddedResource Include="Plugins\ListenBrainz\Configuration\config.html" />
|
||||
<None Remove="Plugins\ListenBrainz\Configuration\ListenBrainz_logo.svg" />
|
||||
<EmbeddedResource Include="Plugins\ListenBrainz\Configuration\ListenBrainz_logo.svg" />
|
||||
<None Remove="Plugins\ListenBrainz\Configuration\NOTICE.md" />
|
||||
<EmbeddedResource Include="Plugins\ListenBrainz\Configuration\NOTICE.md" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- MusicBrainz -->
|
||||
<ItemGroup>
|
||||
<None Remove="Plugins\MusicBrainz\Configuration\config.html" />
|
||||
<EmbeddedResource Include="Plugins\MusicBrainz\Configuration\config.html" />
|
||||
<None Remove="Plugins\MusicBrainz\jellyfin-plugin-musicbrainz.svg" />
|
||||
<EmbeddedResource Include="Plugins\MusicBrainz\jellyfin-plugin-musicbrainz.svg" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Omdb -->
|
||||
<ItemGroup>
|
||||
<None Remove="Plugins\Omdb\Configuration\config.html" />
|
||||
<EmbeddedResource Include="Plugins\Omdb\Configuration\config.html" />
|
||||
<None Remove="Plugins\Omdb\jellyfin-plugin-omdb.png" />
|
||||
<EmbeddedResource Include="Plugins\Omdb\jellyfin-plugin-omdb.png" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- StudioImages -->
|
||||
<ItemGroup>
|
||||
<None Remove="Plugins\StudioImages\Configuration\config.html" />
|
||||
<EmbeddedResource Include="Plugins\StudioImages\Configuration\config.html" />
|
||||
<None Remove="Plugins\StudioImages\jellyfin-plugin-studioimages.svg" />
|
||||
<EmbeddedResource Include="Plugins\StudioImages\jellyfin-plugin-studioimages.svg" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Tmdb -->
|
||||
<ItemGroup>
|
||||
<None Remove="Plugins\Tmdb\Configuration\config.html" />
|
||||
<EmbeddedResource Include="Plugins\Tmdb\Configuration\config.html" />
|
||||
<None Remove="Plugins\Tmdb\jellyfin-plugin-tmdb.svg" />
|
||||
<EmbeddedResource Include="Plugins\Tmdb\jellyfin-plugin-tmdb.svg" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -5,12 +5,13 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Plugins;
|
||||
using MediaBrowser.Controller.Plugins;
|
||||
using MediaBrowser.Model.Plugins;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
|
||||
namespace MediaBrowser.Providers.Plugins.AudioDb
|
||||
{
|
||||
public class Plugin : BasePlugin<PluginConfiguration>, IHasWebPages
|
||||
public class Plugin : BasePlugin<PluginConfiguration>, IHasWebPages, IHasEmbeddedImage
|
||||
{
|
||||
public Plugin(IApplicationPaths applicationPaths, IXmlSerializer xmlSerializer)
|
||||
: base(applicationPaths, xmlSerializer)
|
||||
@@ -29,6 +30,8 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
|
||||
// TODO remove when plugin removed from server.
|
||||
public override string ConfigurationFileName => "Jellyfin.Plugin.AudioDb.xml";
|
||||
|
||||
public string ImageResourceName => GetType().Namespace + ".jellyfin-plugin-tadb.svg";
|
||||
|
||||
public IEnumerable<PluginPageInfo> GetPages()
|
||||
{
|
||||
yield return new PluginPageInfo
|
||||
|
||||
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 191 KiB |
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Plugins;
|
||||
using MediaBrowser.Controller.Plugins;
|
||||
using MediaBrowser.Model.Plugins;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using MediaBrowser.Providers.Plugins.ListenBrainz.Configuration;
|
||||
@@ -11,7 +12,7 @@ namespace MediaBrowser.Providers.Plugins.ListenBrainz;
|
||||
/// <summary>
|
||||
/// ListenBrainz plugin instance.
|
||||
/// </summary>
|
||||
public class ListenBrainzPlugin : BasePlugin<PluginConfiguration>, IHasWebPages
|
||||
public class ListenBrainzPlugin : BasePlugin<PluginConfiguration>, IHasWebPages, IHasEmbeddedImage
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ListenBrainzPlugin"/> class.
|
||||
@@ -41,6 +42,9 @@ public class ListenBrainzPlugin : BasePlugin<PluginConfiguration>, IHasWebPages
|
||||
/// <inheritdoc />
|
||||
public override string ConfigurationFileName => "Jellyfin.Plugin.ListenBrainz.xml";
|
||||
|
||||
/// <inheritdoc />
|
||||
public string ImageResourceName => GetType().Namespace + ".Configuration.ListenBrainz_logo.svg";
|
||||
|
||||
/// <inheritdoc />
|
||||
public IEnumerable<PluginPageInfo> GetPages()
|
||||
{
|
||||
@@ -51,11 +55,6 @@ public class ListenBrainzPlugin : BasePlugin<PluginConfiguration>, IHasWebPages
|
||||
EmbeddedResourcePath = resourcePrefix + "config.html"
|
||||
};
|
||||
yield return new PluginPageInfo
|
||||
{
|
||||
Name = Name + "Logo",
|
||||
EmbeddedResourcePath = resourcePrefix + "ListenBrainz_logo.svg"
|
||||
};
|
||||
yield return new PluginPageInfo
|
||||
{
|
||||
Name = Name + "Notice",
|
||||
EmbeddedResourcePath = resourcePrefix + "NOTICE.md"
|
||||
|
||||
@@ -6,6 +6,7 @@ using System.Threading;
|
||||
using MediaBrowser.Common;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Plugins;
|
||||
using MediaBrowser.Controller.Plugins;
|
||||
using MediaBrowser.Model.Plugins;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using MediaBrowser.Providers.Plugins.MusicBrainz.Configuration;
|
||||
@@ -17,7 +18,7 @@ namespace MediaBrowser.Providers.Plugins.MusicBrainz;
|
||||
/// <summary>
|
||||
/// Plugin instance.
|
||||
/// </summary>
|
||||
public class Plugin : BasePlugin<PluginConfiguration>, IHasWebPages, IDisposable
|
||||
public class Plugin : BasePlugin<PluginConfiguration>, IHasWebPages, IHasEmbeddedImage, IDisposable
|
||||
{
|
||||
private readonly ILogger<Plugin> _logger;
|
||||
private readonly Lock _queryLock = new();
|
||||
@@ -66,6 +67,9 @@ public class Plugin : BasePlugin<PluginConfiguration>, IHasWebPages, IDisposable
|
||||
// TODO remove when plugin removed from server.
|
||||
public override string ConfigurationFileName => "Jellyfin.Plugin.MusicBrainz.xml";
|
||||
|
||||
/// <inheritdoc />
|
||||
public string ImageResourceName => GetType().Namespace + ".jellyfin-plugin-musicbrainz.svg";
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current MusicBrainz query client.
|
||||
/// </summary>
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1920" height="1080" viewBox="0 0 508 285.75" version="1.1" id="svg8">
|
||||
<defs id="defs2">
|
||||
<linearGradient id="linearGradient851">
|
||||
<stop style="stop-color:#fffedb;stop-opacity:1" offset="0" id="stop847"/>
|
||||
<stop style="stop-color:#ffeec2;stop-opacity:1" offset="1" id="stop849"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear-gradient" y1="40.76" x2="190.24" y2="40.76" gradientUnits="userSpaceOnUse" gradientTransform="translate(95.25 74.882) scale(1.66894)">
|
||||
<stop offset="0" stop-color="#90cea1" id="stop916"/>
|
||||
<stop offset=".56" stop-color="#3cbec9" id="stop918"/>
|
||||
<stop offset="1" stop-color="#00b3e5" id="stop920"/>
|
||||
</linearGradient>
|
||||
<style id="style914"/>
|
||||
<style id="style1359">
|
||||
.a{fill:#ba478f}.b{fill:#eb743b}
|
||||
</style>
|
||||
<radialGradient xlink:href="#linearGradient851" id="radialGradient853" cx="125.255" cy="16.735" fx="125.255" fy="16.735" r="254" gradientTransform="matrix(0 1.06475 -1.74952 0 154.532 -61.444)" gradientUnits="userSpaceOnUse"/>
|
||||
</defs>
|
||||
<g id="layer1">
|
||||
<path style="opacity:.98;fill:url(#radialGradient853);stroke-width:2.64583;fill-opacity:1" id="rect845" d="M0 0h508v285.75H0z"/>
|
||||
<g id="g1409" transform="translate(95.25 119.153) scale(1.69442)">
|
||||
<path class="a" id="polygon1363" d="M0 7v14l12 7V0z"/>
|
||||
<path class="b" id="polygon1365" d="M25 7v14l-12 7V0z"/>
|
||||
<path class="a" d="m40.2 5.52 4.44 13.85 4.43-13.85h6.32v19.91h-4.82v-4.65l.43-9.51-4.77 14.16h-3.18l-4.82-14.18.46 9.53v4.65h-4.8V5.52h6.3z" transform="translate(-2 -1)" id="path1367"/>
|
||||
<path class="a" d="M67 23.83a4.9 4.9 0 0 1-1.68 1.38 5 5 0 0 1-2.27.49 6.22 6.22 0 0 1-2-.31 3.89 3.89 0 0 1-1.56-1 4.51 4.51 0 0 1-1-1.71 7.7 7.7 0 0 1-.36-2.51v-9.53h4.61v9.6a2 2 0 0 0 .47 1.45 1.88 1.88 0 0 0 1.37.46 2.87 2.87 0 0 0 1.4-.3 2.24 2.24 0 0 0 .88-.85V10.64h4.63v14.79h-4.32z" transform="translate(-2 -1)" id="path1369"/>
|
||||
<path class="a" d="M81.76 21.27a1 1 0 0 0-.13-.51 1.3 1.3 0 0 0-.46-.42 4.21 4.21 0 0 0-.89-.34q-.56-.18-1.42-.37a12.89 12.89 0 0 1-2-.61 6.57 6.57 0 0 1-1.65-.93 4.14 4.14 0 0 1-1.11-1.31 3.59 3.59 0 0 1-.4-1.72 4.12 4.12 0 0 1 .4-1.79 4.34 4.34 0 0 1 1.18-1.49 5.88 5.88 0 0 1 1.91-1 8.2 8.2 0 0 1 2.58-.38 9.48 9.48 0 0 1 2.69.36 6.34 6.34 0 0 1 2 1 4.41 4.41 0 0 1 1.29 1.52 4.21 4.21 0 0 1 .45 1.95h-4.59a1.88 1.88 0 0 0-.42-1.31 1.89 1.89 0 0 0-1.45-.46 2.08 2.08 0 0 0-.66.1 1.75 1.75 0 0 0-.54.29 1.38 1.38 0 0 0-.37.44 1.22 1.22 0 0 0-.14.57 1.14 1.14 0 0 0 .58 1 5.41 5.41 0 0 0 1.88.63 18.45 18.45 0 0 1 2.15.53 6.79 6.79 0 0 1 1.83.86 4.15 4.15 0 0 1 1.26 1.35 3.87 3.87 0 0 1 .47 2 3.76 3.76 0 0 1-.45 1.77 4.31 4.31 0 0 1-1.29 1.44 6.61 6.61 0 0 1-2 1 9.52 9.52 0 0 1-2.68.35 8.14 8.14 0 0 1-2.82-.45 6.56 6.56 0 0 1-2.05-1.17 4.92 4.92 0 0 1-1.25-1.61 4.14 4.14 0 0 1-.42-1.78h4.31a1.78 1.78 0 0 0 .68 1.5 2.81 2.81 0 0 0 1.68.47 2.21 2.21 0 0 0 1.42-.38 1.22 1.22 0 0 0 .43-1.1z" transform="translate(-2 -1)" id="path1371"/>
|
||||
<path class="a" d="M88.32 6.82a2.17 2.17 0 0 1 .18-.9 2.07 2.07 0 0 1 .5-.71 2.44 2.44 0 0 1 .81-.46 3.37 3.37 0 0 1 2.08 0 2.44 2.44 0 0 1 .81.46 2.07 2.07 0 0 1 .53.71 2.3 2.3 0 0 1 0 1.8 2.07 2.07 0 0 1-.53.71 2.44 2.44 0 0 1-.81.46 3.37 3.37 0 0 1-2.08 0 2.44 2.44 0 0 1-.81-.45 2.07 2.07 0 0 1-.53-.71 2.17 2.17 0 0 1-.15-.91zm4.89 18.61H88.6V10.64h4.62v14.79z" transform="translate(-2 -1)" id="path1373"/>
|
||||
<path class="a" d="M102.31 22.15a2.05 2.05 0 0 0 1.5-.53 1.93 1.93 0 0 0 .52-1.47h4.32a5.35 5.35 0 0 1-.47 2.28 5.22 5.22 0 0 1-1.31 1.75 5.88 5.88 0 0 1-2 1.13 8.13 8.13 0 0 1-5.51-.18 6 6 0 0 1-2.17-1.58 6.7 6.7 0 0 1-1.31-2.38 9.74 9.74 0 0 1-.44-3v-.29a9.81 9.81 0 0 1 .44-3 6.75 6.75 0 0 1 1.3-2.39 6 6 0 0 1 2.15-1.58 7.37 7.37 0 0 1 3-.57 7.81 7.81 0 0 1 2.55.4 5.57 5.57 0 0 1 2 1.16 5.18 5.18 0 0 1 1.29 1.87 6.53 6.53 0 0 1 .46 2.52h-4.32a3.62 3.62 0 0 0-.12-.93 2 2 0 0 0-.38-.76 1.83 1.83 0 0 0-.65-.51 2.14 2.14 0 0 0-.92-.18 1.87 1.87 0 0 0-1.14.32 2.07 2.07 0 0 0-.66.86 4.3 4.3 0 0 0-.31 1.26 14.81 14.81 0 0 0-.08 1.52v.33a14.89 14.89 0 0 0 .08 1.54 4.3 4.3 0 0 0 .31 1.26 1.93 1.93 0 0 0 .68.85 2 2 0 0 0 1.19.3z" transform="translate(-2 -1)" id="path1375"/>
|
||||
<path class="b" d="M110.81 25.43V5.52H118a14.77 14.77 0 0 1 3.3.33 7.29 7.29 0 0 1 2.47 1 4.6 4.6 0 0 1 1.54 1.72 5.22 5.22 0 0 1 .53 2.43 5.69 5.69 0 0 1-.15 1.32 4.21 4.21 0 0 1-.49 1.2 3.92 3.92 0 0 1-.87 1 4.45 4.45 0 0 1-1.3.73 4.56 4.56 0 0 1 1.5.67 3.89 3.89 0 0 1 1 1 4 4 0 0 1 .55 1.24 5.36 5.36 0 0 1 .17 1.35 5.26 5.26 0 0 1-1.9 4.49 9 9 0 0 1-5.59 1.47h-7.94zm4.8-11.61h2.5a3.56 3.56 0 0 0 2.24-.57 2 2 0 0 0 .67-1.65 2.14 2.14 0 0 0-.72-1.81 3.89 3.89 0 0 0-2.3-.56h-2.35v4.59zm0 3.14v4.77h3.14a3.8 3.8 0 0 0 1.24-.18 2.25 2.25 0 0 0 .83-.49 1.88 1.88 0 0 0 .47-.72 2.55 2.55 0 0 0 .15-.89 3.69 3.69 0 0 0-.14-1 1.92 1.92 0 0 0-.44-.79 2 2 0 0 0-.78-.5 3.36 3.36 0 0 0-1.16-.18h-3.32z" transform="translate(-2 -1)" id="path1377"/>
|
||||
<path class="b" d="M137.61 14.81h-1.52a4.09 4.09 0 0 0-1.79.33 2.06 2.06 0 0 0-1 1v9.37h-4.6V10.64h4.3l.15 1.9a4.51 4.51 0 0 1 1.36-1.6 3.18 3.18 0 0 1 1.88-.57 5.57 5.57 0 0 1 .68 0 3.68 3.68 0 0 1 .61.12z" transform="translate(-2 -1)" id="path1379"/>
|
||||
<path class="b" d="M147.19 25.43a3.19 3.19 0 0 1-.25-.61q-.1-.34-.18-.72a4.24 4.24 0 0 1-3.55 1.6 5.66 5.66 0 0 1-1.93-.33 5.11 5.11 0 0 1-1.59-.91 4.31 4.31 0 0 1-1.09-1.4 4 4 0 0 1-.4-1.8 4.83 4.83 0 0 1 .42-2.05 3.89 3.89 0 0 1 1.27-1.52 6.3 6.3 0 0 1 2.16-1 12.56 12.56 0 0 1 3.1-.33h1.42v-.75a2.43 2.43 0 0 0-.41-1.49 1.58 1.58 0 0 0-1.35-.55 1.71 1.71 0 0 0-1.22.4 1.59 1.59 0 0 0-.42 1.22h-4.61a4.11 4.11 0 0 1 .46-1.91 4.49 4.49 0 0 1 1.31-1.53 6.54 6.54 0 0 1 2-1 9 9 0 0 1 2.67-.37 8.76 8.76 0 0 1 2.45.33 5.5 5.5 0 0 1 1.95 1 4.61 4.61 0 0 1 1.29 1.65 5.38 5.38 0 0 1 .46 2.3v7.3a7.71 7.71 0 0 0 .12.94 5 5 0 0 0 .2.72 4.26 4.26 0 0 0 .27.59v.23h-4.61zm-2.88-3a2.57 2.57 0 0 0 1.43-.37 2.32 2.32 0 0 0 .81-.83v-2.38h-1.45a2.94 2.94 0 0 0-1.1.15 1.85 1.85 0 0 0-.71.48 1.8 1.8 0 0 0-.38.69 2.84 2.84 0 0 0-.12.81 1.32 1.32 0 0 0 .42 1 1.53 1.53 0 0 0 1.1.44z" transform="translate(-2 -1)" id="path1381"/>
|
||||
<path class="b" d="M153.69 6.82a2.17 2.17 0 0 1 .18-.9 2.07 2.07 0 0 1 .53-.71 2.44 2.44 0 0 1 .81-.46 3.37 3.37 0 0 1 2.08 0 2.44 2.44 0 0 1 .81.46 2.07 2.07 0 0 1 .53.71 2.3 2.3 0 0 1 0 1.8 2.07 2.07 0 0 1-.53.71 2.44 2.44 0 0 1-.81.46 3.37 3.37 0 0 1-2.08 0 2.44 2.44 0 0 1-.81-.46 2.07 2.07 0 0 1-.53-.71 2.17 2.17 0 0 1-.18-.9zm4.89 18.61H154V10.64h4.62v14.79z" transform="translate(-2 -1)" id="path1383"/>
|
||||
<path class="b" d="m165.65 10.64.15 1.74a5 5 0 0 1 1.83-1.5 5.5 5.5 0 0 1 2.4-.51 5.74 5.74 0 0 1 1.88.29 3.5 3.5 0 0 1 1.47 1 4.59 4.59 0 0 1 1 1.78 9.43 9.43 0 0 1 .33 2.71v9.31H170v-9.35a3.48 3.48 0 0 0-.1-1.11 1.58 1.58 0 0 0-.41-.67 1.41 1.41 0 0 0-.66-.33 4 4 0 0 0-.88-.09 2.37 2.37 0 0 0-1.22.29 2.26 2.26 0 0 0-.79.78v10.45h-4.61V10.64z" transform="translate(-2 -1)" id="path1385"/>
|
||||
<path class="b" d="M182.64 21.88h6.74v3.55h-12.56v-2.57l6.56-8.67h-6.28v-3.55h12.13v2.49z" transform="translate(-2 -1)" id="path1387"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.2 KiB |
@@ -5,12 +5,13 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Plugins;
|
||||
using MediaBrowser.Controller.Plugins;
|
||||
using MediaBrowser.Model.Plugins;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
|
||||
namespace MediaBrowser.Providers.Plugins.Omdb
|
||||
{
|
||||
public class Plugin : BasePlugin<PluginConfiguration>, IHasWebPages
|
||||
public class Plugin : BasePlugin<PluginConfiguration>, IHasWebPages, IHasEmbeddedImage
|
||||
{
|
||||
public Plugin(IApplicationPaths applicationPaths, IXmlSerializer xmlSerializer)
|
||||
: base(applicationPaths, xmlSerializer)
|
||||
@@ -29,6 +30,8 @@ namespace MediaBrowser.Providers.Plugins.Omdb
|
||||
// TODO remove when plugin removed from server.
|
||||
public override string ConfigurationFileName => "Jellyfin.Plugin.Omdb.xml";
|
||||
|
||||
public string ImageResourceName => GetType().Namespace + ".jellyfin-plugin-omdb.png";
|
||||
|
||||
public IEnumerable<PluginPageInfo> GetPages()
|
||||
{
|
||||
yield return new PluginPageInfo
|
||||
|
||||
BIN
MediaBrowser.Providers/Plugins/Omdb/jellyfin-plugin-omdb.png
Normal file
BIN
MediaBrowser.Providers/Plugins/Omdb/jellyfin-plugin-omdb.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 66 KiB |
@@ -4,6 +4,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Plugins;
|
||||
using MediaBrowser.Controller.Plugins;
|
||||
using MediaBrowser.Model.Plugins;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using MediaBrowser.Providers.Plugins.StudioImages.Configuration;
|
||||
@@ -13,7 +14,7 @@ namespace MediaBrowser.Providers.Plugins.StudioImages
|
||||
/// <summary>
|
||||
/// Artwork Plugin class.
|
||||
/// </summary>
|
||||
public class Plugin : BasePlugin<PluginConfiguration>, IHasWebPages
|
||||
public class Plugin : BasePlugin<PluginConfiguration>, IHasWebPages, IHasEmbeddedImage
|
||||
{
|
||||
/// <summary>
|
||||
/// Artwork repository URL.
|
||||
@@ -50,6 +51,9 @@ namespace MediaBrowser.Providers.Plugins.StudioImages
|
||||
/// <inheritdoc/>
|
||||
public override string ConfigurationFileName => "Jellyfin.Plugin.StudioImages.xml";
|
||||
|
||||
/// <inheritdoc/>
|
||||
public string ImageResourceName => GetType().Namespace + ".jellyfin-plugin-studioimages.svg";
|
||||
|
||||
/// <inheritdoc/>
|
||||
public IEnumerable<PluginPageInfo> GetPages()
|
||||
{
|
||||
|
||||
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 9.8 KiB |
@@ -4,6 +4,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Plugins;
|
||||
using MediaBrowser.Controller.Plugins;
|
||||
using MediaBrowser.Model.Plugins;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
|
||||
@@ -12,7 +13,7 @@ namespace MediaBrowser.Providers.Plugins.Tmdb
|
||||
/// <summary>
|
||||
/// Plugin class for the TMDb library.
|
||||
/// </summary>
|
||||
public class Plugin : BasePlugin<PluginConfiguration>, IHasWebPages
|
||||
public class Plugin : BasePlugin<PluginConfiguration>, IHasWebPages, IHasEmbeddedImage
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Plugin"/> class.
|
||||
@@ -44,6 +45,9 @@ namespace MediaBrowser.Providers.Plugins.Tmdb
|
||||
/// <inheritdoc/>
|
||||
public override string ConfigurationFileName => "Jellyfin.Plugin.Tmdb.xml";
|
||||
|
||||
/// <inheritdoc/>
|
||||
public string ImageResourceName => GetType().Namespace + ".jellyfin-plugin-tmdb.svg";
|
||||
|
||||
/// <summary>
|
||||
/// Return the plugin configuration page.
|
||||
/// </summary>
|
||||
|
||||
16
MediaBrowser.Providers/Plugins/Tmdb/jellyfin-plugin-tmdb.svg
Normal file
16
MediaBrowser.Providers/Plugins/Tmdb/jellyfin-plugin-tmdb.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1920" height="1080" viewBox="0 0 508 285.75">
|
||||
<defs>
|
||||
<linearGradient id="a">
|
||||
<stop style="stop-color:#20464c;stop-opacity:1" offset="0"/>
|
||||
<stop style="stop-color:#0d253f;stop-opacity:.999722" offset="1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="c" y1="40.76" x2="190.24" y2="40.76" gradientUnits="userSpaceOnUse" gradientTransform="translate(95.25 74.882) scale(1.66894)">
|
||||
<stop offset="0" stop-color="#90cea1"/>
|
||||
<stop offset=".56" stop-color="#3cbec9"/>
|
||||
<stop offset="1" stop-color="#00b3e5"/>
|
||||
</linearGradient>
|
||||
<radialGradient xlink:href="#a" id="b" cx="125.255" cy="16.735" fx="125.255" fy="16.735" r="254" gradientTransform="matrix(0 1.06475 -1.74952 0 154.532 -61.444)" gradientUnits="userSpaceOnUse"/>
|
||||
</defs>
|
||||
<path style="opacity:.98;fill:url(#b);stroke-width:2.64583;fill-opacity:1" d="M0 0h508v285.75H0z"/>
|
||||
<path d="M271.607 135.064H383.26a29.49 29.49 0 0 0 29.49-29.473 29.49 29.49 0 0 0-29.49-29.49H271.607a29.49 29.49 0 0 0-29.49 29.49 29.49 29.49 0 0 0 29.49 29.473zM124.74 210.167h128.342a29.49 29.49 0 0 0 29.49-29.474 29.49 29.49 0 0 0-29.49-29.49H124.74a29.49 29.49 0 0 0-29.49 29.49 29.49 29.49 0 0 0 29.49 29.474zm-12.116-76.17h13.017V86.43h16.857V74.882h-46.73v11.516h16.856zm46.897 0h13.018V88.65h.167l15.02 45.312h10.014l15.52-45.312h.167v45.312h13.018v-59.08h-19.777l-13.686 38.552h-.167l-13.601-38.553H159.52zm190.126 33.795a25.151 25.151 0 0 0-7.543-9.212 30.992 30.992 0 0 0-11.149-5.14 55.976 55.976 0 0 0-13.468-1.67H297.96v59.081h21.279a41.023 41.023 0 0 0 12.6-1.92 32.277 32.277 0 0 0 10.598-5.54 27.154 27.154 0 0 0 7.294-9.18 28.222 28.222 0 0 0 2.72-12.65 30.875 30.875 0 0 0-2.804-13.769zm-12.4 21.58a14.687 14.687 0 0 1-4.406 5.674 17.858 17.858 0 0 1-6.676 3.038 36 36 0 0 1-8.345.918h-6.759v-35.048h7.677a28.372 28.372 0 0 1 7.794 1.051 19.46 19.46 0 0 1 6.476 3.121 15.254 15.254 0 0 1 4.239 5.224 16.472 16.472 0 0 1 1.669 7.544 19.844 19.844 0 0 1-1.67 8.478zm74.485-.217a13.352 13.352 0 0 0-2.637-4.373 13.986 13.986 0 0 0-4.039-3.087 17.207 17.207 0 0 0-5.29-1.67v-.166a15.388 15.388 0 0 0 7.376-4.707 12.4 12.4 0 0 0 2.804-8.344 14.053 14.053 0 0 0-1.92-7.761 13.502 13.502 0 0 0-5.006-4.54 20.962 20.962 0 0 0-6.976-2.17 54.808 54.808 0 0 0-7.71-.55h-22.03v59.08h24.199a37.401 37.401 0 0 0 7.877-.834 22.58 22.58 0 0 0 7.143-2.754 15.721 15.721 0 0 0 5.174-5.006 14.22 14.22 0 0 0 2.003-7.811 15.671 15.671 0 0 0-.918-5.307zm-32.411-26.286h8.845a16.69 16.69 0 0 1 3.088.3 10.314 10.314 0 0 1 2.837.952 5.658 5.658 0 0 1 2.036 1.885 5.374 5.374 0 0 1 .801 3.038 6.058 6.058 0 0 1-.717 3.004 5.674 5.674 0 0 1-1.87 2.003 8.211 8.211 0 0 1-2.636 1.085 12.534 12.534 0 0 1-2.954.333h-9.43zm19.56 33.379a6.509 6.509 0 0 1-2.036 2.17 7.744 7.744 0 0 1-2.804 1.168 13.652 13.652 0 0 1-3.037.333H379.32v-13.351h9.847a25.618 25.618 0 0 1 3.338.25 14.136 14.136 0 0 1 3.421.918 6.676 6.676 0 0 1 2.62 1.97 5.19 5.19 0 0 1 1.052 3.338 6.192 6.192 0 0 1-.718 3.204z" style="fill:url(#c);stroke-width:1.66894"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -1,7 +1,7 @@
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Providers.Plugins.ComicVine;
|
||||
using MediaBrowser.Providers.Books.ComicVine;
|
||||
using Xunit;
|
||||
|
||||
namespace Jellyfin.Providers.Tests.ExternalId
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Providers.Plugins.GoogleBooks;
|
||||
using MediaBrowser.Providers.Books.GoogleBooks;
|
||||
using Xunit;
|
||||
|
||||
namespace Jellyfin.Providers.Tests.ExternalId
|
||||
|
||||
Reference in New Issue
Block a user