Fix integrated provider images
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
@@ -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; }
|
||||
}
|
||||
@@ -47,22 +47,65 @@
|
||||
<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>
|
||||
|
||||
<!-- ComicVine -->
|
||||
<ItemGroup>
|
||||
<None Remove="Plugins\ComicVine\jellyfin-plugin-comicvine.svg" />
|
||||
<EmbeddedResource Include="Plugins\ComicVine\jellyfin-plugin-comicvine.svg" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- GoogleBooks -->
|
||||
<ItemGroup>
|
||||
<None Remove="Plugins\GoogleBooks\jellyfin-plugin-googlebooks.svg" />
|
||||
<EmbeddedResource Include="Plugins\GoogleBooks\jellyfin-plugin-googlebooks.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
|
||||
|
||||
|
After Width: | Height: | Size: 191 KiB |
@@ -0,0 +1,10 @@
|
||||
using MediaBrowser.Model.Plugins;
|
||||
|
||||
namespace MediaBrowser.Providers.Plugins.ComicVine;
|
||||
|
||||
/// <summary>
|
||||
/// Plugin configuration for the Comic Vine provider.
|
||||
/// </summary>
|
||||
public class PluginConfiguration : BasePluginConfiguration
|
||||
{
|
||||
}
|
||||
45
MediaBrowser.Providers/Plugins/ComicVine/Plugin.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Plugins;
|
||||
using MediaBrowser.Controller.Plugins;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
|
||||
namespace MediaBrowser.Providers.Plugins.ComicVine;
|
||||
|
||||
/// <summary>
|
||||
/// ComicVine plugin instance.
|
||||
/// </summary>
|
||||
public class Plugin : BasePlugin<PluginConfiguration>, IHasEmbeddedImage
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Plugin"/> class.
|
||||
/// </summary>
|
||||
/// <param name="applicationPaths">Instance of the <see cref="IApplicationPaths"/> interface.</param>
|
||||
/// <param name="xmlSerializer">Instance of the <see cref="IXmlSerializer"/> interface.</param>
|
||||
public Plugin(IApplicationPaths applicationPaths, IXmlSerializer xmlSerializer)
|
||||
: base(applicationPaths, xmlSerializer)
|
||||
{
|
||||
Instance = this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current plugin instance.
|
||||
/// </summary>
|
||||
public static Plugin? Instance { get; private set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Guid Id => new("3ade6fd1-c76c-4560-b2df-f6bca4c2332f");
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string Name => "Comic Vine";
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string Description => "Get external links for comic books from Comic Vine.";
|
||||
|
||||
/// <inheritdoc />
|
||||
// TODO remove when plugin removed from server.
|
||||
public override string ConfigurationFileName => "Jellyfin.Plugin.ComicVine.xml";
|
||||
|
||||
/// <inheritdoc />
|
||||
public string ImageResourceName => GetType().Namespace + ".jellyfin-plugin-comicvine.svg";
|
||||
}
|
||||
@@ -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>
|
||||
<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"/>
|
||||
<linearGradient id="a">
|
||||
<stop style="stop-color:#2c3345;stop-opacity:1" offset="0"/>
|
||||
<stop style="stop-color:#21252e;stop-opacity:1" offset="1"/>
|
||||
</linearGradient>
|
||||
<style/>
|
||||
</defs>
|
||||
<path style="opacity:.98;fill:url(#b);stroke-width:2.64583;fill-opacity:1" d="M0 0h508v285.75H0z"/>
|
||||
<path d="m613.85 57.23-.3-.34.3.34c.07-7-3.57-14.41-7.29-18.78-12.55-14.65-35.11-24-66.81-25.72-7.16-.39-26.22-1.48-26.22-1.47q-15-.4-30-.52c-10.1-.08-22 .2-35.27 1 .06 0-15.19 1-15.18 1 .01 0-4.68.34-8.43.65L429.63 0c-61 2.27-69.37 8.85-70.79 9.52-7.38 3.48-13.84 9.81-22.11 16.87a158.82 158.82 0 0 0-13.15 12.71c-2.29-6.3-10.48-28.79-10.49-28.82q-10 2.72-19.9 5.63c-17 4.8-36.78 11-53.6 16.61 0 0-25.42-4.73-46.41-1.38-20.99 3.35-39.37 13.68-54.44 31.2l-.26.33c-14.43-11.32-34.65-14.83-59.87-9-20.67 4.84-38.54 17.09-52.83 36.9a112.31 112.31 0 0 0-17.56 36.67A107.76 107.76 0 0 0 0 166.57l.43 12.11v.61c1.8 20.09 8.24 35.09 19 44.34 12.6 10.73 28.55 11.94 47.78 4.49 21.82-8.45 39.68-23 53.3-43 0 0 1.75-2.59 3.14-4.61a37.91 37.91 0 0 0 3.92 4c12.31 10.44 28.34 12.2 48 6.19a112.78 112.78 0 0 0 10.75-3.89c17.74 41.62-3.32 138.68-3.32 138.72 10.5-6.74 171.69-82.35 361-110.53 1.46-2.77 60-95.9 68.32-109.06 0-.1-26.74.62-44.37 1.46 15.07-7.8 22.53-17.6 22.54-17.56.01.04-20.58-10.73-33.35-17.52 19.68-5.65 56.63-15.59 56.71-15.09zm-.56-.64zm.19.22-.13-.15z" style="fill:#231f20" transform="translate(95.25 58.689) scale(.51723)"/>
|
||||
<path d="M89.89 153c-5 7.07-10.78 11.65-17.75 14-6.22 2.06-11.33 1.31-15.67-2.38s-6.48-8.67-7-15.64c0-1.56 0-3.12.07-4.68v-.88c.66-9.82 3.59-18.49 8.75-25.69a38.17 38.17 0 0 1 21.61-15c8.41-2.3 14.43-.35 18.32 5.78l1.44 2.26q17-13.11 34.31-25.41L132.14 83c-10.77-13.23-28.52-17.56-52.38-11.69-15.83 3.93-29.63 13.57-40.83 29-10.89 15-16.53 31.47-17 48.35 0 0 .15 5 .25 8.14 0 1.44.08 2.5.08 2.5 1.27 15.24 6 26.56 14 33.51 8.86 7.62 20.39 8.68 34.47 3.65a84.14 84.14 0 0 0 41.68-32.35l2-3q-11.41-5.23-22.9-10.57z" style="fill:#29cc82" transform="translate(95.25 58.689) scale(.51723)"/>
|
||||
<path d="M243.43 79.93a24.43 24.43 0 0 0-.58-4.43 44.5 44.5 0 0 0-2.35-7.58c1.86-1.41 7-5.29 7-5.27l-1.5-1.89c-10.37-12.66-28.06-17.58-52.27-13.41-16.07 2.78-30.29 10.94-42.1 24.55-10.14 11.75-16.21 24.72-18.22 38.29-.27 1.79-.48 3.59-.6 5.4l-.05 9.82c.73 14.09 5.11 24.73 12.93 31.48 8.64 7.4 20.23 8.89 34.58 4.89a83.52 83.52 0 0 0 42.67-27.27A88.58 88.58 0 0 0 242.21 92a68.6 68.6 0 0 0 1.22-12.07zm-32.18 19.68a49 49 0 0 1-9.11 21.74c-5.24 7-11.59 11.37-19.45 13.36-6.33 1.6-11.45.68-15.69-2.92-4.08-3.45-6.21-8.28-6.49-14.7q.13-2.56.28-5.11A45.6 45.6 0 0 1 164 99.27a39.81 39.81 0 0 1 6.46-10.48 38 38 0 0 1 22.27-12.71c7.48-1.48 12.89.13 16.63 4.42-.9.62-5.49 3.88-5.49 3.88l2.25 1.3 1 .58c2.94 1.69 4.43 4.67 4.56 9.11z" style="fill:#2cc982;fill-opacity:1" transform="translate(95.25 58.689) scale(.51723)"/>
|
||||
<path d="M384.85 75.67Q387 69 389.09 62.44 396.9 39 404.93 16.17l-4.24.53s-7.61 1-7.63 1c-.02 0-11.91 2.49-11.91 2.51a103 103 0 0 1-10.93 2l-.68.06-.61.29a92.35 92.35 0 0 0-19.55 13.09 160 160 0 0 0-25.08 26.63c-3.26 4.35-6.34 8.84-9.18 13.5a108 108 0 0 0-2.89-12.84c-.65-2.28-1.35-4.6-2.18-7l-9.73-26.7-2.79.84q-15.69 4.57-31.28 9.61l3.93 9c1.61 3.4 1.86 4.94 1.87 5.57 0 0-.19.75-.24 1a367 367 0 0 0-8.46 15.49c-1 2-1.95 3.87-2.76 5.59a294.31 294.31 0 0 0-13.74 33c-3.95 11.86-7.47 23.72-10.46 35.22q-.6 2.29-1.2 4.6 17.29-8 34.75-15.46l.17-1.85c.73-8 3.25-16.95 7.54-26.58 0 0 3.6-8.13 6.45-14.4.1.49.18.82.28 1.39 2.75 14.41 4.14 26.16 4.2 35.1l-.46 7.1 3.82-1.23q14.89-6 29.9-11.64c.16-.47.33-.95.5-1.43 4.53-13.19 9.3-23.46 14.13-30.61 8-11.87 14.09-19.22 18.63-23.89.78-.8 1.52-1.53 2.21-2.19l-1.11 2.56c-1.26 3-2.34 5.62-3.19 7.87 0 0-7.94 20.82-7.92 20.87-5.27 13.39-9.17 24.22-11.66 32-.46 1.43-.92 2.86-1.37 4.31 8.54-3.42 17.11-6.68 25.7-9.88 5.16-1.92 10.32-3.84 15.49-5.67.12-.5.25-1 .37-1.5 1.63-6.77 3.55-13.73 5.69-20.66q2.77-8.93 5.54-17.7zM478 41.59q4.67-9.19 9.38-18.21h-4.26c-9.78 0-21.24.45-34 1.33q-16.39 1.22-32.74 2.83c-.2.5-.4 1-.61 1.5q-4.4 10.35-8.77 20.87s17.55-3 24.45-4c-2.44 3.58-5.57 8.24-5.57 8.25a243.51 243.51 0 0 0-15.46 27.39s-4.14 9.54-4.13 9.56c.01.02-1.34 3.21-2.16 5.22-2.36.38-6.52 1.09-6.52 1.09l-9.73 1.87Q383.43 111 379 122.88l4.54-1.13c20.28-5 33.52-7.63 39.19-8.57 3.48-.55 11.14-1.51 22.78-2.67l2.18-.21q4.89-10.61 9.84-21-8 .76-16 1.61l-4.26.52c1.54-3.73 4.6-11 4.6-11 5.51-12.1 9.92-20.75 13-25.92a96.5 96.5 0 0 1 6.13-9.4l1.2-1.56c6.36-.24 15.07-.47 15.07-.47zM539.6 81a37.74 37.74 0 0 1-19.6 6c-6.55.23-11.65-1.22-15.6-4.52a13.46 13.46 0 0 1-5.25-11.84c.24-1.24.49-2.49.74-3.73a26.53 26.53 0 0 1 11.88-15.58c6.49-4.06 14.22-5.93 23.6-5.77 8.76.16 14.61 2.67 17.84 7.52l1.18 1.78q18.7-5.27 37.53-9.69l-1.6-1.86c-9.32-10.92-26.73-17.59-51.46-18.63-16.42-.67-31.47 3-44.61 11.17-12.79 8-20.47 18.09-23 29.47l-.95 7.3c-.54 10.59 2.91 19.15 10.23 25.29 8.08 6.75 19.68 9.49 34.57 8.65 18.2-1 33.65-5.75 46-13.85l2.4-1.56q-10.95-5.63-22-11.39z" style="fill:#29cc82" transform="translate(95.25 58.689) scale(.51723)"/>
|
||||
<path d="M305 154.85q2.24-2.75 4.49-5.48-13.14 3.62-26.22 7.5l-2.94.94-1 .33-.74.81c-5.63 6.33-13.14 17.23-22.76 33.84-4.7 8.09-9 16-13 23.9 1.85-22.39 2.76-38 2.59-46.59-.09-4.42-.4-5.81-.67-6.53l-.81-2.17-2.66 1.21q-14.9 6.78-29.69 14l.72 2.43c.13.44.45 2.27.67 9.78.49 16.17.71 34 .68 53-.07 28.34-.64 33.65-.88 34.59l-1.29 5 4.66-2.68q13.66-8.29 27.44-16.15l.58-.81c4.68-6.68 10.56-16.81 17.53-29.91 0-.18 15.45-29.75 15.49-29.63 0-.12 13-24.64 13.05-24.56A155.79 155.79 0 0 1 305 154.85zm70.42 2.86q4.23-10.78 8.52-21.39l-4.11.7c-9.41 1.61-20.43 3.88-32.72 6.86l-4.43 1.12q-13.5 3.41-26.93 7.08l-.54 1.73q-3.9 11.94-7.73 24s16.21-5.76 23-8l.34-.12-.5 1c-2.15 4.11-4.61 8.88-4.61 8.88a324.05 324.05 0 0 0-14 32.18l-3.67 11s-1.18 3.7-1.91 6c-2.25.78-6.2 2.17-6.2 2.18 0 .01-9.26 3.49-9.26 3.51q-4 13.38-7.84 27l4.3-1.91c19.25-8.47 31.86-13.38 37.26-15.25 3.32-1.14 10.64-3.35 21.77-6.4l2.09-.57q4.39-12.32 8.83-24.43-7.68 2.07-15.35 4.23l-4.08 1.22c1.36-4.28 4.08-12.7 4.08-12.69q4.44-12.63 7.81-21c1.49-3.72 2.82-6.84 4-9.29 2.27-5 4.16-8.74 5.62-11.21l1.11-1.89c6.11-1.26 14.49-2.89 14.49-2.89.19-.5.42-1.07.66-1.65zm119.48-34.98q-12.66 1.79-25.29 3.82l-3 .53-1.54.28-.81 1.05c-11.87 15.58-19.51 27-22.92 33.17l-2.34 4.16a267.16 267.16 0 0 0-8.82-36.7l-.63-2-2.85.83q-15.44 4.54-30.79 9.53l3.49 8c1.45 3 1.63 4.35 1.62 4.91l-.27.87c-5 7.6-8.9 14.12-11.68 19.25-1.8 3.26-3.46 6.4-5 9.42-4 7.78-7.21 14.75-9.55 20.67a509.094 509.094 0 0 0-11.47 32l-1.33 4.19q17.11-8 34.38-15.35l.23-1.67c1-7.15 3.79-15.3 8.32-24.08 0 0 3.8-7.4 6.8-13.11.08.43.14.73.22 1.24 2.14 12.77 3.07 23.21 2.79 31.18l-.7 6.35 3.77-1.26q14.74-6 29.57-11.57 4.71-11.48 9.49-22.75c4.43-10.32 8-17.93 10.73-22.95.73-1.35 1.4-2.56 2-3.53A333.7 333.7 0 0 1 492 126.35zm87.1-4.62q-21.22 1.08-42.38 2.78-19.92 2-39.77 4.59l-.63 1.42q-4.51 9.68-9 19.54s9.55-1.81 13.93-2.58c-2.2 3-4.78 6.59-4.78 6.59-1.66 2.53-3.26 5.05-4.83 7.59-3.86 6.24-7.43 12.48-10.64 18.62-2.72 5.27-5.85 12.07-9.3 20.28-4.6 11.06-4.6 11.67-4.6 12.13 0 .84-.09 1.66-.13 2.49l3.38-.87c20.75-6.29 36.75-9.93 47.35-11.54q9-1.36 18.06-2.61 5.21-9.87 10.49-19.53c0-.1-32.31 4.94-38.88 6.21 2.45-5.56 4.74-10.4 6.8-14.35 3.63-.62 31.61-4.26 31.62-4.18 1.43-2.49 2.87-4.91 4.3-7.39 2-3.4 3.94-6.83 5.93-10.19 0-.06-25.21 2.62-32.05 3.53l1-1.44s6.59-9.71 6.95-10.2c8.1-.92 18.12-1.79 30-2.48q5.47-.32 11-.61 5.24-9.11 10.52-18z" style="fill:#f9e150" transform="translate(95.25 58.689) scale(.51723)"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.7 KiB |
@@ -0,0 +1,10 @@
|
||||
using MediaBrowser.Model.Plugins;
|
||||
|
||||
namespace MediaBrowser.Providers.Plugins.GoogleBooks;
|
||||
|
||||
/// <summary>
|
||||
/// Plugin configuration for the Google Books provider.
|
||||
/// </summary>
|
||||
public class PluginConfiguration : BasePluginConfiguration
|
||||
{
|
||||
}
|
||||
45
MediaBrowser.Providers/Plugins/GoogleBooks/Plugin.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Plugins;
|
||||
using MediaBrowser.Controller.Plugins;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
|
||||
namespace MediaBrowser.Providers.Plugins.GoogleBooks;
|
||||
|
||||
/// <summary>
|
||||
/// Google Books plugin instance.
|
||||
/// </summary>
|
||||
public class Plugin : BasePlugin<PluginConfiguration>, IHasEmbeddedImage
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Plugin"/> class.
|
||||
/// </summary>
|
||||
/// <param name="applicationPaths">Instance of the <see cref="IApplicationPaths"/> interface.</param>
|
||||
/// <param name="xmlSerializer">Instance of the <see cref="IXmlSerializer"/> interface.</param>
|
||||
public Plugin(IApplicationPaths applicationPaths, IXmlSerializer xmlSerializer)
|
||||
: base(applicationPaths, xmlSerializer)
|
||||
{
|
||||
Instance = this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current plugin instance.
|
||||
/// </summary>
|
||||
public static Plugin? Instance { get; private set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Guid Id => new("9f97232d-e7f4-432d-92d3-c709ce47e30b");
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string Name => "Google Books";
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string Description => "Get external links for books from Google Books.";
|
||||
|
||||
/// <inheritdoc />
|
||||
// TODO remove when plugin removed from server.
|
||||
public override string ConfigurationFileName => "Jellyfin.Plugin.GoogleBooks.xml";
|
||||
|
||||
/// <inheritdoc />
|
||||
public string ImageResourceName => GetType().Namespace + ".jellyfin-plugin-googlebooks.svg";
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<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>
|
||||
<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"/>
|
||||
<linearGradient id="a">
|
||||
<stop style="stop-color:#fff;stop-opacity:1" offset="0"/>
|
||||
<stop style="stop-color:#f4f4f4;stop-opacity:1" offset="1"/>
|
||||
</linearGradient>
|
||||
<style/>
|
||||
</defs>
|
||||
<path style="opacity:.98;fill:url(#b);stroke-width:2.64583;fill-opacity:1" d="M0 0h508v285.75H0z"/>
|
||||
<path d="M231.122 145.619c0 15.037-11.764 26.117-26.2 26.117s-26.199-11.08-26.199-26.117c0-15.143 11.763-26.117 26.2-26.117s26.199 10.974 26.199 26.117zm-11.47 0c0-9.396-6.817-15.826-14.73-15.826s-14.73 6.43-14.73 15.826c0 9.302 6.818 15.826 14.73 15.826s14.73-6.535 14.73-15.826z" fill="#ea4335"/>
|
||||
<path d="M287.642 145.619c0 15.037-11.764 26.117-26.2 26.117s-26.199-11.08-26.199-26.117c0-15.13 11.763-26.117 26.2-26.117s26.199 10.974 26.199 26.117zm-11.47 0c0-9.396-6.817-15.826-14.73-15.826s-14.73 6.43-14.73 15.826c0 9.302 6.818 15.826 14.73 15.826s14.73-6.535 14.73-15.826z" fill="#fbbc05"/>
|
||||
<path d="M341.807 121.08v46.888c0 19.287-11.375 27.165-24.822 27.165-12.658 0-20.277-8.466-23.15-15.39l9.986-4.157c1.778 4.251 6.134 9.267 13.152 9.267 8.608 0 13.942-5.31 13.942-15.307v-3.756h-.4c-2.567 3.167-7.513 5.934-13.754 5.934-13.058 0-25.022-11.374-25.022-26.01 0-14.743 11.964-26.212 25.022-26.212 6.23 0 11.175 2.767 13.753 5.84h.4v-4.25h10.893zm-10.08 24.633c0-9.196-6.134-15.92-13.941-15.92-7.913 0-14.542 6.724-14.542 15.92 0 9.102 6.629 15.732 14.542 15.732 7.807 0 13.941-6.63 13.941-15.732z" fill="#4285f4"/>
|
||||
<path d="M359.764 93.597v76.538h-11.187V93.597z" fill="#34a853"/>
|
||||
<path d="m403.355 154.215 8.902 5.934c-2.874 4.251-9.797 11.575-21.76 11.575-14.837 0-25.917-11.469-25.917-26.117 0-15.531 11.174-26.117 24.633-26.117 13.553 0 20.182 10.786 22.349 16.615l1.19 2.967-34.914 14.46c2.673 5.24 6.83 7.913 12.658 7.913 5.84 0 9.891-2.873 12.859-7.23zm-27.4-9.397 23.337-9.69c-1.283-3.262-5.145-5.535-9.69-5.535-5.83 0-13.942 5.146-13.648 15.225z" fill="#ea4335"/>
|
||||
<path d="M136.38 138.825v-11.08h37.339c.365 1.93.553 4.215.553 6.688 0 8.313-2.273 18.592-9.597 25.917-7.123 7.418-16.226 11.374-28.283 11.374-22.35 0-41.142-18.204-41.142-40.553 0-22.349 18.793-40.553 41.142-40.553 12.364 0 21.171 4.851 27.789 11.174l-7.819 7.82c-4.745-4.452-11.174-7.914-19.982-7.914-16.32 0-29.084 13.153-29.084 29.473s12.764 29.473 29.084 29.473c10.586 0 16.615-4.25 20.477-8.113 3.132-3.132 5.193-7.607 6.005-13.718z" fill="#4285f4"/>
|
||||
<path d="M350.508 193.734v-13.5h4.414q2.197 0 3.3.909 1.113.908 1.113 2.688 0 .946-.538 1.678-.537.724-1.465 1.122 1.095.306 1.725 1.168.64.854.64 2.041 0 1.817-1.178 2.855-1.178 1.039-3.329 1.039zm1.78-6.314v4.859h2.94q1.242 0 1.956-.64.723-.649.723-1.78 0-2.439-2.652-2.439zm0-1.428h2.69q1.167 0 1.863-.584.704-.584.704-1.585 0-1.113-.647-1.613-.65-.511-1.976-.511h-2.633zm9.324 2.633q0-1.474.575-2.652.584-1.177 1.613-1.817 1.039-.64 2.364-.64 2.05 0 3.31 1.419 1.271 1.418 1.271 3.773v.12q0 1.465-.565 2.633-.557 1.16-1.605 1.81-1.039.647-2.392.647-2.04 0-3.31-1.418-1.26-1.418-1.26-3.755zm1.725.204q0 1.67.77 2.68.779 1.01 2.076 1.01 1.307 0 2.077-1.02.77-1.029.77-2.873 0-1.652-.788-2.672-.779-1.029-2.078-1.029-1.27 0-2.048 1.012-.779 1.01-.779 2.892zm9.108-.204q0-1.474.575-2.652.584-1.177 1.613-1.817 1.039-.64 2.364-.64 2.05 0 3.31 1.419 1.271 1.418 1.271 3.773v.12q0 1.465-.565 2.633-.557 1.16-1.605 1.81-1.039.647-2.392.647-2.04 0-3.31-1.418-1.26-1.418-1.26-3.755zm1.725.204q0 1.67.77 2.68.779 1.01 2.076 1.01 1.307 0 2.077-1.02.77-1.029.77-2.873 0-1.652-.788-2.672-.779-1.029-2.078-1.029-1.27 0-2.048 1.012-.779 1.01-.779 2.892zm12.358.26-1.075 1.122v3.523h-1.716v-14.24h1.716v8.613l.919-1.104 3.123-3.3h2.086l-3.904 4.19 4.358 5.841h-2.012zm12.682 1.984q0-.695-.529-1.075-.518-.39-1.826-.668-1.298-.279-2.068-.667-.76-.39-1.13-.928-.363-.537-.363-1.28 0-1.232 1.039-2.086 1.048-.852 2.67-.852 1.706 0 2.763.88 1.066.881 1.066 2.253h-1.725q0-.704-.601-1.214-.594-.51-1.503-.51-.936 0-1.465.408-.528.407-.528 1.065 0 .622.49.938.493.314 1.772.603 1.289.287 2.086.685.797.399 1.178.965.388.556.388 1.363 0 1.343-1.075 2.16-1.075.806-2.79.806-1.205 0-2.132-.426-.928-.427-1.456-1.187-.52-.77-.52-1.66h1.716q.047.863.685 1.372.65.5 1.708.5.972 0 1.556-.388.594-.399.594-1.057z" fill="#4285f4" stroke-width=".34"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 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
|
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()
|
||||
{
|
||||
|
||||
|
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
@@ -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 |