using AIStudio.Tools.Rust; namespace AIStudio.Tools.Services; public sealed partial class RustService { public async Task SelectDirectory(string title, string? initialDirectory = null) { PreviousDirectory? previousDirectory = initialDirectory is null ? null : new (initialDirectory); var result = await this.http.PostAsJsonAsync($"/select/directory?title={title}", previousDirectory, this.jsonRustSerializerOptions); if (!result.IsSuccessStatusCode) { this.logger!.LogError($"Failed to select a directory: '{result.StatusCode}'"); return new DirectorySelectionResponse(true, string.Empty); } return await result.Content.ReadFromJsonAsync(this.jsonRustSerializerOptions); } public async Task SelectFile(string title, FileTypeFilter? filter = null, string? initialFile = null) { var payload = new SelectFileOptions { Title = title, PreviousFile = initialFile is null ? null : new (initialFile), Filter = filter }; var result = await this.http.PostAsJsonAsync("/select/file", payload, this.jsonRustSerializerOptions); if (!result.IsSuccessStatusCode) { this.logger!.LogError($"Failed to select a file: '{result.StatusCode}'"); return new FileSelectionResponse(true, string.Empty); } return await result.Content.ReadFromJsonAsync(this.jsonRustSerializerOptions); } /// /// Initiates a dialog to let the user select a file for a writing operation. /// /// The title of the save file dialog. /// An optional file type filter for filtering specific file formats. /// An optional initial file path to pre-fill in the dialog. /// A object containing information about whether the user canceled the /// operation and whether the select operation was successful. public async Task SaveFile(string title, FileTypeFilter? filter = null, string? initialFile = null) { var payload = new SaveFileOptions { Title = title, PreviousFile = initialFile is null ? null : new (initialFile), Filter = filter }; var result = await this.http.PostAsJsonAsync("/save/file", payload, this.jsonRustSerializerOptions); if (!result.IsSuccessStatusCode) { this.logger!.LogError($"Failed to select a file for writing operation '{result.StatusCode}'"); return new FileSaveResponse(true, string.Empty); } return await result.Content.ReadFromJsonAsync(this.jsonRustSerializerOptions); } }