From 908141f14309cf7e28b118477308d40fbda22ca3 Mon Sep 17 00:00:00 2001 From: Cy Scott Date: Sat, 28 Mar 2026 21:29:43 -0400 Subject: [PATCH 1/5] fix: request limit --- src/MediaBrowser/Media/MediaInstaller.cs | 5 +++++ src/MediaBrowser/appsettings.json | 3 +++ 2 files changed, 8 insertions(+) diff --git a/src/MediaBrowser/Media/MediaInstaller.cs b/src/MediaBrowser/Media/MediaInstaller.cs index a06ca19..2327beb 100644 --- a/src/MediaBrowser/Media/MediaInstaller.cs +++ b/src/MediaBrowser/Media/MediaInstaller.cs @@ -1,3 +1,5 @@ +using Microsoft.AspNetCore.Http.Features; + namespace MediaBrowser.Media; static class MediaInstaller @@ -10,6 +12,9 @@ public static void ConfigureServices(HostBuilderContext context, IServiceCollect var dbConfig = new DbConfig(context.Configuration); services.AddSingleton(dbConfig); + services.Configure(options => + options.MultipartBodyLengthLimit = context.Configuration.GetValue("request:multipartLimit")); + switch (dbConfig.DbType) { case DbType.MySql: diff --git a/src/MediaBrowser/appsettings.json b/src/MediaBrowser/appsettings.json index fa0d0f3..613b130 100644 --- a/src/MediaBrowser/appsettings.json +++ b/src/MediaBrowser/appsettings.json @@ -80,5 +80,8 @@ "writersDirectory": "/writers", "stopAfterSync": true, "syncOnBoot": false + }, + "request": { + "multipartLimit": 2147483648 } } From 45563c4f2d38deece2a87a9273e6b63d7780aec4 Mon Sep 17 00:00:00 2001 From: Cy Scott Date: Sat, 28 Mar 2026 21:40:12 -0400 Subject: [PATCH 2/5] fix: request limit issue --- src/MediaBrowser.Common/Media/Import/ImportController.cs | 2 +- src/MediaBrowser/Media/MediaInstaller.cs | 5 ----- src/MediaBrowser/appsettings.json | 3 --- 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/src/MediaBrowser.Common/Media/Import/ImportController.cs b/src/MediaBrowser.Common/Media/Import/ImportController.cs index 04fdc04..8a92697 100644 --- a/src/MediaBrowser.Common/Media/Import/ImportController.cs +++ b/src/MediaBrowser.Common/Media/Import/ImportController.cs @@ -9,7 +9,7 @@ public class ImportController(Ffmpeg ffmpeg, MediaConfig mediaConfig, MediaDbCon .Concat(['/', '\\', ':', '*', '?', '"', '<', '>', '|']) .Distinct() .ToArray(); - [HttpPost("files")] + [HttpPost("files"), DisableRequestSizeLimit] public async Task Add([FromForm] AddFileRequest request) { if (!Directory.Exists(mediaConfig.ImportDirectory) diff --git a/src/MediaBrowser/Media/MediaInstaller.cs b/src/MediaBrowser/Media/MediaInstaller.cs index 2327beb..a06ca19 100644 --- a/src/MediaBrowser/Media/MediaInstaller.cs +++ b/src/MediaBrowser/Media/MediaInstaller.cs @@ -1,5 +1,3 @@ -using Microsoft.AspNetCore.Http.Features; - namespace MediaBrowser.Media; static class MediaInstaller @@ -12,9 +10,6 @@ public static void ConfigureServices(HostBuilderContext context, IServiceCollect var dbConfig = new DbConfig(context.Configuration); services.AddSingleton(dbConfig); - services.Configure(options => - options.MultipartBodyLengthLimit = context.Configuration.GetValue("request:multipartLimit")); - switch (dbConfig.DbType) { case DbType.MySql: diff --git a/src/MediaBrowser/appsettings.json b/src/MediaBrowser/appsettings.json index 613b130..fa0d0f3 100644 --- a/src/MediaBrowser/appsettings.json +++ b/src/MediaBrowser/appsettings.json @@ -80,8 +80,5 @@ "writersDirectory": "/writers", "stopAfterSync": true, "syncOnBoot": false - }, - "request": { - "multipartLimit": 2147483648 } } From d678d7350493bcb10a7ec899f30ab5ac0c2fd333 Mon Sep 17 00:00:00 2001 From: Cy Scott Date: Sat, 28 Mar 2026 21:55:40 -0400 Subject: [PATCH 3/5] fix: route issue --- src/MediaBrowser.Frontend/src/app/app.routes.ts | 5 +++++ src/MediaBrowser.Frontend/src/app/meta/meta.html | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/MediaBrowser.Frontend/src/app/app.routes.ts b/src/MediaBrowser.Frontend/src/app/app.routes.ts index f6f4eb9..0109272 100644 --- a/src/MediaBrowser.Frontend/src/app/app.routes.ts +++ b/src/MediaBrowser.Frontend/src/app/app.routes.ts @@ -13,6 +13,11 @@ export const routes: Routes = [ loadComponent: () => import('./search/search').then(m => m.SearchComponent), canActivate: [authGuard] }, + { + path: 'searchByTag', + loadComponent: () => import('./search/search').then(m => m.SearchComponent), + canActivate: [authGuard] + }, { path: 'import', loadComponent: () => import('./import/import').then(m => m.ImportComponent), diff --git a/src/MediaBrowser.Frontend/src/app/meta/meta.html b/src/MediaBrowser.Frontend/src/app/meta/meta.html index d099a7a..f0552b0 100644 --- a/src/MediaBrowser.Frontend/src/app/meta/meta.html +++ b/src/MediaBrowser.Frontend/src/app/meta/meta.html @@ -13,7 +13,7 @@

{{ type }}

From 88122c47e4070b6238b434c78964c43d5a21ed14 Mon Sep 17 00:00:00 2001 From: Cy Scott Date: Sat, 28 Mar 2026 22:03:44 -0400 Subject: [PATCH 4/5] fix: duration display for images --- src/MediaBrowser.Frontend/src/app/search/search-content.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MediaBrowser.Frontend/src/app/search/search-content.ts b/src/MediaBrowser.Frontend/src/app/search/search-content.ts index b2d7157..dee0d5c 100644 --- a/src/MediaBrowser.Frontend/src/app/search/search-content.ts +++ b/src/MediaBrowser.Frontend/src/app/search/search-content.ts @@ -28,7 +28,7 @@ export class SearchContentComponent { getTooltip(result: MediaReadModel): string { let tooltip = result.title; - if (result.duration) { + if (result.duration && !result.mime.startsWith('image/')) { tooltip += `\nDuration: ${ReadonlyInfoSectionComponent.formatDuration(result.duration)}`; } From 64b87f22d41dc7133a36aaa3abe11ae349bae08e Mon Sep 17 00:00:00 2001 From: Cy Scott Date: Sat, 28 Mar 2026 22:16:44 -0400 Subject: [PATCH 5/5] fix: assembly version in swagger --- .../MediaBrowserWebApplicationFactory.cs | 3 ++- src/MediaBrowser.Tests/SwaggerTest.cs | 2 +- src/MediaBrowser/Installer.cs | 18 ++++++++---------- src/MediaBrowser/Program.cs | 2 +- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/MediaBrowser.Tests/MediaBrowserWebApplicationFactory.cs b/src/MediaBrowser.Tests/MediaBrowserWebApplicationFactory.cs index e326952..78dedd7 100644 --- a/src/MediaBrowser.Tests/MediaBrowserWebApplicationFactory.cs +++ b/src/MediaBrowser.Tests/MediaBrowserWebApplicationFactory.cs @@ -94,6 +94,7 @@ public MediaBrowserWebApplicationFactory(DbType dbType = DbType.Sqlite, TimeSpan public DbConnection? Connection { get; private set; } public DbType DbType { get; } public List ConfigurationFiles { get; } + public const string Version = "v1"; public string CastDirectory { get; } public string DirectorsDirectory { get; } public string GenresDirectory { get; } @@ -121,7 +122,7 @@ public async Task StartServerAsync() StartServer(); await Installer.OnStartup(Services, CancellationTokenSource.Token); } - protected override IHostBuilder CreateHostBuilder() => Installer.CreateHostBuilder([], ConfigurationFiles, Connection); + protected override IHostBuilder CreateHostBuilder() => Installer.CreateHostBuilder([], ConfigurationFiles, Version, Connection); public string GetJwtForTestUser(UserReadModel? user = null) { diff --git a/src/MediaBrowser.Tests/SwaggerTest.cs b/src/MediaBrowser.Tests/SwaggerTest.cs index 0e230f4..95a9278 100644 --- a/src/MediaBrowser.Tests/SwaggerTest.cs +++ b/src/MediaBrowser.Tests/SwaggerTest.cs @@ -14,7 +14,7 @@ public async Task Test() using var swaggerPage = await client.GetAsync("/swagger"); swaggerPage.EnsureSuccessStatusCode(); - using var swaggerJsonFile = await client.GetAsync($"/swagger/{Installer.Version}/swagger.json"); + using var swaggerJsonFile = await client.GetAsync($"/swagger/{MediaBrowserWebApplicationFactory.Version}/swagger.json"); swaggerJsonFile.EnsureSuccessStatusCode(); } } \ No newline at end of file diff --git a/src/MediaBrowser/Installer.cs b/src/MediaBrowser/Installer.cs index 1a17673..d951f1a 100644 --- a/src/MediaBrowser/Installer.cs +++ b/src/MediaBrowser/Installer.cs @@ -2,10 +2,8 @@ namespace MediaBrowser; public class Installer { - public const string Version = "v1"; - public const string CliArgsKey = "CliArgs", TestConfigsKey = "TestConfigs"; - public static IHostBuilder CreateHostBuilder(string[] args, IReadOnlyList configs, DbConnection? connection = null) + public static IHostBuilder CreateHostBuilder(string[] args, IReadOnlyList configs, string version, DbConnection? connection = null) { var builder = Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration(configurationBuilder => @@ -14,12 +12,12 @@ public static IHostBuilder CreateHostBuilder(string[] args, IReadOnlyList ConfigureServices(services, version)) .ConfigureServices((context, services) => MediaInstaller.ConfigureServices(context, services, connection)) .ConfigureServices(ImportInstaller.ConfigureServices) .ConfigureServices(UserInstaller.ConfigureServices) - .ConfigureWebHostDefaults(webBuilder => webBuilder.Configure(ConfigureApp)); + .ConfigureWebHostDefaults(webBuilder => webBuilder.Configure(app => ConfigureApp(app, version))); return builder; } @@ -41,7 +39,7 @@ public static void ConfigureSettings(IConfigurationBuilder configurationBuilder) } } - static void ConfigureServices(HostBuilderContext context, IServiceCollection services) + static void ConfigureServices(IServiceCollection services, string version) { // Add services to the container services.AddControllers() @@ -52,14 +50,14 @@ static void ConfigureServices(HostBuilderContext context, IServiceCollection ser services.Configure(options => options.Filters.Add(new ValidationStatus417Filter())); // Add Swagger services - services.AddSwaggerGen(options => options.SwaggerDoc(Version, new() + services.AddSwaggerGen(options => options.SwaggerDoc(version, new() { Title = "MediaBrowser API", - Version = Version + Version = version })); } - static void ConfigureApp(IApplicationBuilder app) + static void ConfigureApp(IApplicationBuilder app, string version) { // Configure the HTTP request pipeline app.UseDefaultFiles() @@ -70,7 +68,7 @@ static void ConfigureApp(IApplicationBuilder app) app.UseSwagger(); app.UseSwaggerUI(c => { - c.SwaggerEndpoint($"/swagger/{Version}/swagger.json", $"MediaBrowser API {Version}"); + c.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"MediaBrowser API {version}"); c.RoutePrefix = "swagger"; }); diff --git a/src/MediaBrowser/Program.cs b/src/MediaBrowser/Program.cs index ca7c5f4..5e72f0e 100644 --- a/src/MediaBrowser/Program.cs +++ b/src/MediaBrowser/Program.cs @@ -7,7 +7,7 @@ public static class Program { public async static Task Main(string[] args) { - var builder = CreateHostBuilder(args, []); + var builder = CreateHostBuilder(args, [], typeof(Program).Assembly.GetName().Version!.ToString()); using var app = builder.Build(); var cancellationToken = app.Services.GetRequiredService().ApplicationStopped;