diff --git a/Emby.Server.Implementations/ConfigurationOptions.cs b/Emby.Server.Implementations/ConfigurationOptions.cs
index 4574a64fdb..20bdd18e70 100644
--- a/Emby.Server.Implementations/ConfigurationOptions.cs
+++ b/Emby.Server.Implementations/ConfigurationOptions.cs
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using Emby.Server.Implementations.HttpServer;
+using Emby.Server.Implementations.Updates;
using MediaBrowser.Providers.Music;
using static MediaBrowser.Controller.Extensions.ConfigurationExtensions;
@@ -17,6 +18,7 @@ namespace Emby.Server.Implementations
{
{ HostWebClientKey, bool.TrueString },
{ HttpListenerHost.DefaultRedirectKey, "web/index.html" },
+ { InstallationManager.PluginManifestUrlKey, "https://repo.jellyfin.org/releases/plugin/manifest.json" },
{ FfmpegProbeSizeKey, "1G" },
{ FfmpegAnalyzeDurationKey, "200M" },
{ PlaylistsAllowDuplicatesKey, bool.TrueString }
diff --git a/Emby.Server.Implementations/IStartupOptions.cs b/Emby.Server.Implementations/IStartupOptions.cs
index 6e915de3d1..16b68170be 100644
--- a/Emby.Server.Implementations/IStartupOptions.cs
+++ b/Emby.Server.Implementations/IStartupOptions.cs
@@ -3,33 +3,38 @@ namespace Emby.Server.Implementations
public interface IStartupOptions
{
///
- /// --ffmpeg
+ /// Gets the value of the --ffmpeg command line option.
///
string FFmpegPath { get; }
///
- /// --service
+ /// Gets the value of the --service command line option.
///
bool IsService { get; }
///
- /// --noautorunwebapp
+ /// Gets the value of the --noautorunwebapp command line option.
///
bool NoAutoRunWebApp { get; }
///
- /// --package-name
+ /// Gets the value of the --package-name command line option.
///
string PackageName { get; }
///
- /// --restartpath
+ /// Gets the value of the --restartpath command line option.
///
string RestartPath { get; }
///
- /// --restartargs
+ /// Gets the value of the --restartargs command line option.
///
string RestartArgs { get; }
+
+ ///
+ /// Gets the value of the --plugin-manifest-url command line option.
+ ///
+ string PluginManifestUrl { get; }
}
}
diff --git a/Emby.Server.Implementations/Updates/InstallationManager.cs b/Emby.Server.Implementations/Updates/InstallationManager.cs
index c897036eb8..22bdbc979e 100644
--- a/Emby.Server.Implementations/Updates/InstallationManager.cs
+++ b/Emby.Server.Implementations/Updates/InstallationManager.cs
@@ -18,6 +18,7 @@ using MediaBrowser.Model.Events;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Updates;
+using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace Emby.Server.Implementations.Updates
@@ -27,6 +28,11 @@ namespace Emby.Server.Implementations.Updates
///
public class InstallationManager : IInstallationManager
{
+ ///
+ /// The key for a setting that specifies a URL for the plugin repository JSON manifest.
+ ///
+ public const string PluginManifestUrlKey = "InstallationManager:PluginManifestUrl";
+
///
/// The _logger.
///
@@ -44,6 +50,7 @@ namespace Emby.Server.Implementations.Updates
private readonly IApplicationHost _applicationHost;
private readonly IZipClient _zipClient;
+ private readonly IConfiguration _appConfig;
private readonly object _currentInstallationsLock = new object();
@@ -65,7 +72,8 @@ namespace Emby.Server.Implementations.Updates
IJsonSerializer jsonSerializer,
IServerConfigurationManager config,
IFileSystem fileSystem,
- IZipClient zipClient)
+ IZipClient zipClient,
+ IConfiguration appConfig)
{
if (logger == null)
{
@@ -83,6 +91,7 @@ namespace Emby.Server.Implementations.Updates
_config = config;
_fileSystem = fileSystem;
_zipClient = zipClient;
+ _appConfig = appConfig;
}
///
@@ -115,7 +124,7 @@ namespace Emby.Server.Implementations.Updates
using (var response = await _httpClient.SendAsync(
new HttpRequestOptions
{
- Url = "https://repo.jellyfin.org/releases/plugin/manifest.json",
+ Url = _appConfig.GetValue(PluginManifestUrlKey),
CancellationToken = cancellationToken,
CacheMode = CacheMode.Unconditional,
CacheLength = TimeSpan.FromMinutes(3)
diff --git a/Jellyfin.Server/StartupOptions.cs b/Jellyfin.Server/StartupOptions.cs
index c93577d3ea..6e15d058fc 100644
--- a/Jellyfin.Server/StartupOptions.cs
+++ b/Jellyfin.Server/StartupOptions.cs
@@ -1,7 +1,7 @@
using System.Collections.Generic;
-using System.Globalization;
using CommandLine;
using Emby.Server.Implementations;
+using Emby.Server.Implementations.Updates;
using MediaBrowser.Controller.Extensions;
namespace Jellyfin.Server
@@ -76,6 +76,10 @@ namespace Jellyfin.Server
[Option("restartargs", Required = false, HelpText = "Arguments for restart script.")]
public string? RestartArgs { get; set; }
+ ///
+ [Option("plugin-manifest-url", Required = false, HelpText = "A custom URL for the plugin repository JSON manifest")]
+ public string? PluginManifestUrl { get; set; }
+
///
/// Gets the command line options as a dictionary that can be used in the .NET configuration system.
///
@@ -84,6 +88,11 @@ namespace Jellyfin.Server
{
var config = new Dictionary();
+ if (PluginManifestUrl != null)
+ {
+ config.Add(InstallationManager.PluginManifestUrlKey, PluginManifestUrl);
+ }
+
if (NoWebClient)
{
config.Add(ConfigurationExtensions.HostWebClientKey, bool.FalseString);