using Docker.DotNet; using Docker.DotNet.Models; using MoonCore.Attributes; namespace MoonlightServers.Daemon.Services; [Singleton] public class DockerImageService { private readonly DockerClient DockerClient; private readonly ILogger Logger; public DockerImageService(DockerClient dockerClient, ILogger logger) { DockerClient = dockerClient; Logger = logger; } public async Task Ensure(string name, Action? onProgressUpdated) { await DockerClient.Images.CreateImageAsync(new() { FromImage = name }, new AuthConfig(), // TODO: Config for custom registries new Progress(async message => { if (message.Progress == null) return; var line = $"[{message.ID}] {message.ProgressMessage}"; Logger.LogInformation("{line}", line); if(onProgressUpdated != null) onProgressUpdated.Invoke(line); }) ); } }