|
|
|
@ -1010,48 +1010,12 @@ namespace Emby.Server.Implementations
|
|
|
|
|
AuthenticatedAttribute.AuthService = AuthService;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async void PluginInstalled(object sender, GenericEventArgs<PackageVersionInfo> args)
|
|
|
|
|
{
|
|
|
|
|
string dir = Path.Combine(ApplicationPaths.PluginsPath, args.Argument.name);
|
|
|
|
|
var types = Directory.EnumerateFiles(dir, "*.dll", SearchOption.AllDirectories)
|
|
|
|
|
.Select(Assembly.LoadFrom)
|
|
|
|
|
.SelectMany(x => x.ExportedTypes)
|
|
|
|
|
.Where(x => x.IsClass && !x.IsAbstract && !x.IsInterface && !x.IsGenericType)
|
|
|
|
|
.ToArray();
|
|
|
|
|
|
|
|
|
|
int oldLen = _allConcreteTypes.Length;
|
|
|
|
|
Array.Resize(ref _allConcreteTypes, oldLen + types.Length);
|
|
|
|
|
types.CopyTo(_allConcreteTypes, oldLen);
|
|
|
|
|
|
|
|
|
|
var plugins = types.Where(x => x.IsAssignableFrom(typeof(IPlugin)))
|
|
|
|
|
.Select(CreateInstanceSafe)
|
|
|
|
|
.Where(x => x != null)
|
|
|
|
|
.Cast<IPlugin>()
|
|
|
|
|
.Select(LoadPlugin)
|
|
|
|
|
.Where(x => x != null)
|
|
|
|
|
.ToArray();
|
|
|
|
|
|
|
|
|
|
oldLen = _plugins.Length;
|
|
|
|
|
Array.Resize(ref _plugins, oldLen + plugins.Length);
|
|
|
|
|
plugins.CopyTo(_plugins, oldLen);
|
|
|
|
|
|
|
|
|
|
var entries = types.Where(x => x.IsAssignableFrom(typeof(IServerEntryPoint)))
|
|
|
|
|
.Select(CreateInstanceSafe)
|
|
|
|
|
.Where(x => x != null)
|
|
|
|
|
.Cast<IServerEntryPoint>()
|
|
|
|
|
.ToList();
|
|
|
|
|
|
|
|
|
|
await Task.WhenAll(StartEntryPoints(entries, true)).ConfigureAwait(false);
|
|
|
|
|
await Task.WhenAll(StartEntryPoints(entries, false)).ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Finds the parts.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void FindParts()
|
|
|
|
|
{
|
|
|
|
|
InstallationManager = ServiceProvider.GetService<IInstallationManager>();
|
|
|
|
|
InstallationManager.PluginInstalled += PluginInstalled;
|
|
|
|
|
|
|
|
|
|
if (!ServerConfigurationManager.Configuration.IsPortAuthorized)
|
|
|
|
|
{
|
|
|
|
|