-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
89 lines (76 loc) · 2.73 KB
/
Copy pathProgram.cs
File metadata and controls
89 lines (76 loc) · 2.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
namespace Mouse.NET;
using System;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Mouse.NET.Data;
using Mouse.NET.Storage;
public class Program
{
public static void Main(string[] args)
{
if (args.Length > 0 && string.Equals(args[0], "ensure-variants", StringComparison.OrdinalIgnoreCase))
{
RunEnsureVariants(args).GetAwaiter().GetResult();
return;
}
CreateHostBuilder(args).Build().Run();
}
private static async Task RunEnsureVariants(string[] args)
{
var overwrite = args.Any(a => string.Equals(a, "--overwrite", StringComparison.OrdinalIgnoreCase));
using var host = CreateHostBuilder(args).Build();
using var scope = host.Services.CreateScope();
var db = scope.ServiceProvider.GetRequiredService<MouseDbContext>();
var storage = scope.ServiceProvider.GetRequiredService<IStorageService>();
var levelImages = await db.Levels
.AsNoTracking()
.Where(x => x.Image != null && x.Image != "")
.Select(x => x.Image!)
.Distinct()
.ToListAsync();
var completedImages = await db.LevelCompleted
.AsNoTracking()
.Where(x => x.Image != null && x.Image != "")
.Select(x => x.Image)
.Distinct()
.ToListAsync();
var all = levelImages
.Concat(completedImages)
.Where(x => !string.IsNullOrWhiteSpace(x))
.Distinct(StringComparer.OrdinalIgnoreCase)
.ToList();
Console.WriteLine($"ensure-variants: found {all.Count} unique images. overwrite={overwrite}");
var ok = 0;
var failed = 0;
foreach (var image in all)
{
try
{
await storage.EnsureImageVariants(image, overwrite: overwrite);
ok++;
Console.WriteLine($"OK {ok}/{all.Count}: {image}");
}
catch (Exception ex)
{
failed++;
Console.WriteLine($"FAIL {image}: {ex.Message}");
}
}
Console.WriteLine($"ensure-variants done. ok={ok} failed={failed}");
}
private static IHostBuilder CreateHostBuilder(string[] args) =>
Host
.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.Listen(IPAddress.Any, 8000);
});
});
}