configure grpc client + scanner fixes; need to figure out cors issue

This commit is contained in:
2026-01-17 20:04:28 -05:00
parent b762139243
commit 3ab9c9baf1
8 changed files with 94 additions and 9 deletions

View File

@@ -13,6 +13,7 @@
<ItemGroup>
<PackageReference Include="Grpc.AspNetCore" Version="2.64.0" />
<PackageReference Include="Grpc.AspNetCore.Web" Version="2.76.0" />
<PackageReference Include="MaybeError" Version="1.2.0" />
<PackageReference Include="MongoDB.Driver" Version="3.5.2" />
</ItemGroup>

View File

@@ -35,6 +35,7 @@ public partial class MediaEntry
return new MediaEntry
{
Version = 0,
CameraId = int.Parse(cam.Value),
Filepath = relativePath,
Date = ParseDate(date.Value),

View File

@@ -4,6 +4,21 @@ using AZKiServer.Services;
using MongoDB.Driver;
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(o =>
{
//o.Limits.MaxRequestBodySize = null;
#if !DEBUG
o.ListenAnyIP(8081, lo =>
{
lo.Protocols = Microsoft.AspNetCore.Server.Kestrel.Core.HttpProtocols.Http2;
});
o.ListenAnyIP(8080, lo =>
{
lo.Protocols = Microsoft.AspNetCore.Server.Kestrel.Core.HttpProtocols.Http1AndHttp2;
});
#endif
});
var config = builder.Configuration;
var dbString = config["DB_STRING"];
@@ -13,8 +28,8 @@ var db = dbClient.GetDatabase("AZKi");
// Add services to the container.
builder.Services.AddSingleton(dbClient);
builder.Services.AddSingleton<IMongoDatabase>(db);
builder.Services.AddGrpc();
builder.Services.AddControllers(opt => opt.ModelBinderProviders.Add(new BsonIdModelBinderProvider()));
builder.Services.AddGrpc();
builder.Services.AddHostedService<FileScannerService>();
builder.Services.AddTransient<MediaService>();
@@ -38,8 +53,20 @@ builder.Services.AddCors(o =>
var app = builder.Build();
app.UseGrpcWeb(new GrpcWebOptions { DefaultEnabled = true });
app.UseStaticFiles();
app.UseRouting();
app.UseCors();
//app.UseAuthentication();
//app.UseAuthorization();
// Configure the HTTP request pipeline.
//app.MapGrpcService<GreeterService>();
app.MapControllers();
app.MapGrpcService<AZKiRpcService>()
.AllowAnonymous()
.RequireCors("RPC");
app.MapFallbackToFile("index.html");
app.Run();

View File

@@ -13,6 +13,7 @@ public class AZKiRpcService(MediaService mediaService) : RPC.AZKi.AZKiBase
var from = request.From.ToDateTime();
var to = request.To.ToDateTime();
var items = await mediaService.GetEntriesInRangeAsync(request.Type.FromRpc(), from, to);
var result = new MediaList();
result.Entries.AddRange(items.Select(e => e.ToRpc()));
return result;

View File

@@ -14,13 +14,13 @@ public class FileScannerService(MediaService mediaService, IConfiguration config
public Task StartAsync(CancellationToken cancellationToken)
{
var path = config["SCAN_PATH"];
var path = config["SCAN_LOCATION"];
if (string.IsNullOrWhiteSpace(path))
return Task.CompletedTask;
_timer = new Timer((_) =>
{
ScanFilesAsync(path).Wait();
}, null, TimeSpan.FromMinutes(1), TimeSpan.FromHours(1));
}, null, TimeSpan.FromMinutes(0), TimeSpan.FromHours(1));
return Task.CompletedTask;
}
@@ -33,6 +33,7 @@ public class FileScannerService(MediaService mediaService, IConfiguration config
private async Task ScanFilesAsync(string path)
{
logger.LogInformation("Scanning Files");
try
{
var files = Directory.GetFiles(path, "*", SearchOption.AllDirectories);
@@ -41,11 +42,22 @@ public class FileScannerService(MediaService mediaService, IConfiguration config
foreach (var filePath in files)
{
var relativePath = Path.GetRelativePath(path, filePath);
if (relativePath[0] == '.') //Ignore hidden folders
continue;
if (existingFiles.Contains(relativePath))
continue;
entries.Add(MediaEntry.Parse(relativePath));
var entry = MediaEntry.Parse(relativePath);
if(entry.HasError)
{
logger.LogError(entry.Error.GetException(), "Failed to parse file data");
continue;
}
entries.Add(entry);
}
if(entries.Count > 0) {
await mediaService.AddMediaBulkAsync(entries);
logger.LogInformation("Added {count} file entries", entries.Count);
}
await mediaService.AddMediaBulkAsync(entries);
}
catch (Exception ex)
{