Refactored plugin loading. Added project settings for packing

This commit is contained in:
2025-05-13 20:52:26 +02:00
parent d33e7bf295
commit 49f0a7c55e
8 changed files with 97 additions and 22 deletions

View File

@@ -5,16 +5,19 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<IsPackable>true</IsPackable>
<Version>2.1.0</Version>
<Title>MoonlightServers.ApiServer</Title>
<PackageTags>apiserver</PackageTags>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Moonlight.ApiServer" Version="2.1.0"/> <PackageReference Include="Moonlight.ApiServer" Version="2.1.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.11"/> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.15"/>
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0"/>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\MoonlightServers.DaemonShared\MoonlightServers.DaemonShared.csproj" /> <ProjectReference Include="..\MoonlightServers.DaemonShared\MoonlightServers.DaemonShared.csproj"/>
<ProjectReference Include="..\MoonlightServers.Frontend\MoonlightServers.Frontend.csproj"/> <ProjectReference Include="..\MoonlightServers.Frontend\MoonlightServers.Frontend.csproj"/>
<ProjectReference Include="..\MoonlightServers.Shared\MoonlightServers.Shared.csproj"/> <ProjectReference Include="..\MoonlightServers.Shared\MoonlightServers.Shared.csproj"/>
</ItemGroup> </ItemGroup>
@@ -22,8 +25,24 @@
<ItemGroup> <ItemGroup>
<Folder Include="Database\Migrations\"/> <Folder Include="Database\Migrations\"/>
<Folder Include="Http\Middleware\"/> <Folder Include="Http\Middleware\"/>
<Folder Include="Implementations\" /> <Folder Include="Implementations\"/>
<Folder Include="Interfaces\"/> <Folder Include="Interfaces\"/>
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Include="**\*.cs" Exclude="storage\**\*;bin\**\*;obj\**\*">
<Pack>true</Pack>
<PackagePath>src</PackagePath>
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
<None Include="**\*.razor" Exclude="storage\**\*;bin\**\*;obj\**\*">
<Pack>true</Pack>
<PackagePath>src</PackagePath>
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
<Compile Remove="storage\**\*"/>
<Content Remove="storage\**\*"/>
<None Remove="storage\**\*"/>
</ItemGroup>
</Project> </Project>

View File

@@ -1,6 +1,7 @@
using System.Text.Json; using System.Text.Json;
using Moonlight.ApiServer; using Moonlight.ApiServer;
using Moonlight.ApiServer.Models; using Moonlight.ApiServer.Models;
using MoonlightServers.ApiServer.Startup;
// Development Server Startup // Development Server Startup
@@ -28,8 +29,6 @@ pluginManifest.Assemblies.Clear();
#endregion #endregion
await startup.Run( await startup.Run(args, [
args, new PluginStartup()
[typeof(Program).Assembly], ]);
[pluginManifest]
);

View File

@@ -1,13 +1,16 @@
using MoonCore.Extensions; using MoonCore.Extensions;
using Moonlight.ApiServer.Interfaces.Startup; using Moonlight.ApiServer.Configuration;
using Moonlight.ApiServer.Models;
using Moonlight.ApiServer.Plugins;
using MoonlightServers.ApiServer.Database; using MoonlightServers.ApiServer.Database;
using MoonlightServers.ApiServer.Helpers; using MoonlightServers.ApiServer.Helpers;
namespace MoonlightServers.ApiServer.Startup; namespace MoonlightServers.ApiServer.Startup;
[PluginStartup]
public class PluginStartup : IPluginStartup public class PluginStartup : IPluginStartup
{ {
public Task BuildApplication(IHostApplicationBuilder builder) public Task BuildApplication(IServiceProvider serviceProvider, IHostApplicationBuilder builder)
{ {
// Scan the current plugin assembly for di services // Scan the current plugin assembly for di services
builder.Services.AutoAddServices<PluginStartup>(); builder.Services.AutoAddServices<PluginStartup>();
@@ -19,12 +22,28 @@ public class PluginStartup : IPluginStartup
.AddAuthentication() .AddAuthentication()
.AddScheme<NodeAuthOptions, NodeAuthScheme>("nodeAuthentication", null); .AddScheme<NodeAuthOptions, NodeAuthScheme>("nodeAuthentication", null);
var configuration = serviceProvider.GetRequiredService<AppConfiguration>();
if (configuration.Client.Enable)
{
builder.Services.AddSingleton(new FrontendConfigurationOption()
{
Scripts =
[
"js/XtermBlazor.min.js",
"js/addon-fit.js",
"js/moonlightServers.js"
],
Styles = ["css/XtermBlazor.min.css"]
});
}
return Task.CompletedTask; return Task.CompletedTask;
} }
public Task ConfigureApplication(IApplicationBuilder app) public Task ConfigureApplication(IServiceProvider serviceProvider, IApplicationBuilder app)
=> Task.CompletedTask; => Task.CompletedTask;
public Task ConfigureEndpoints(IEndpointRouteBuilder routeBuilder) public Task ConfigureEndpoints(IServiceProvider serviceProvider, IEndpointRouteBuilder routeBuilder)
=> Task.CompletedTask; => Task.CompletedTask;
} }

View File

@@ -4,6 +4,11 @@
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<PackageId>MoonlightServers.DaemonShared</PackageId>
<PackageTags>shared</PackageTags>
<IsPackable>true</IsPackable>
<Version>2.1.0</Version>
<Title>MoonlightServers.DaemonShared</Title>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@@ -4,12 +4,16 @@
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<IsPackable>true</IsPackable>
<Version>2.1.0</Version>
<Title>MoonlightServers.Frontend</Title>
<PackageTags>frontend</PackageTags>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.11"/> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.15"/>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.11" PrivateAssets="all"/> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.15" PrivateAssets="all"/>
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.11" /> <PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.15" />
<PackageReference Include="Moonlight.Client" Version="2.1.0"/> <PackageReference Include="Moonlight.Client" Version="2.1.0"/>
<PackageReference Include="XtermBlazor" Version="2.1.2" /> <PackageReference Include="XtermBlazor" Version="2.1.2" />
</ItemGroup> </ItemGroup>
@@ -27,4 +31,26 @@
<ProjectReference Include="..\MoonlightServers.Shared\MoonlightServers.Shared.csproj"/> <ProjectReference Include="..\MoonlightServers.Shared\MoonlightServers.Shared.csproj"/>
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Include="**\*.cs" Exclude="storage\**\*;bin\**\*;obj\**\*">
<Pack>true</Pack>
<PackagePath>src</PackagePath>
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
<None Include="**\*.razor" Exclude="storage\**\*;bin\**\*;obj\**\*">
<Pack>true</Pack>
<PackagePath>src</PackagePath>
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
<None Include="Styles\**\*" Exclude="storage\**\*;bin\**\*;obj\**\*;Styles\node_modules\**\*">
<Pack>true</Pack>
<PackagePath>styles</PackagePath>
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
<Compile Remove="storage\**\*" />
<Content Remove="storage\**\*" />
<None Remove="storage\**\*" />
</ItemGroup>
</Project> </Project>

View File

@@ -1,4 +1,5 @@
using Moonlight.Client; using Moonlight.Client;
using MoonlightServers.Frontend.Startup;
// Development Client Startup // Development Client Startup
@@ -11,5 +12,5 @@ using Moonlight.Client;
var startup = new Startup(); var startup = new Startup();
await startup.Run(args, [ await startup.Run(args, [
typeof(Program).Assembly new PluginStartup()
]); ]);

View File

@@ -1,14 +1,16 @@
using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using MoonCore.Extensions; using MoonCore.Extensions;
using Moonlight.Client.Interfaces; using Moonlight.Client.Interfaces;
using Moonlight.Client.Plugins;
using MoonlightServers.Frontend.Implementations; using MoonlightServers.Frontend.Implementations;
using MoonlightServers.Frontend.Interfaces; using MoonlightServers.Frontend.Interfaces;
namespace MoonlightServers.Frontend.Startup; namespace MoonlightServers.Frontend.Startup;
[PluginStartup]
public class PluginStartup : IPluginStartup public class PluginStartup : IPluginStartup
{ {
public Task BuildApplication(WebAssemblyHostBuilder builder) public Task BuildApplication(IServiceProvider serviceProvider, WebAssemblyHostBuilder builder)
{ {
builder.Services.AddSingleton<ISidebarItemProvider, SidebarImplementation>(); builder.Services.AddSingleton<ISidebarItemProvider, SidebarImplementation>();
builder.Services.AddSingleton<IServerTabProvider, DefaultServerTabProvider>(); builder.Services.AddSingleton<IServerTabProvider, DefaultServerTabProvider>();
@@ -18,7 +20,7 @@ public class PluginStartup : IPluginStartup
return Task.CompletedTask; return Task.CompletedTask;
} }
public Task ConfigureApplication(WebAssemblyHost app) public Task ConfigureApplication(IServiceProvider serviceProvider, WebAssemblyHost app)
{ {
return Task.CompletedTask; return Task.CompletedTask;
} }

View File

@@ -4,6 +4,10 @@
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<IsPackable>true</IsPackable>
<Version>2.1.0</Version>
<Title>MoonlightServers.Shared</Title>
<PackageTags>shared</PackageTags>
</PropertyGroup> </PropertyGroup>
</Project> </Project>