using System.Diagnostics; using Microsoft.Extensions.Options; namespace MeetingAssistant.MeetingNotes; public sealed class ObsidianMeetingNoteOpener : IMeetingNoteOpener { private readonly MeetingAssistantOptions options; private readonly ILogger logger; public ObsidianMeetingNoteOpener( IOptions options, ILogger logger) { this.options = options.Value; this.logger = logger; } public async Task OpenAsync(string notePath, CancellationToken cancellationToken) { if (options.Recording.OpenMeetingNoteDelay > TimeSpan.Zero) { await Task.Delay(options.Recording.OpenMeetingNoteDelay, cancellationToken); } var uri = $"obsidian://open?path={Uri.EscapeDataString(Path.GetFullPath(notePath))}"; Process.Start(new ProcessStartInfo { FileName = uri, UseShellExecute = true }); logger.LogInformation("Opened meeting note in Obsidian via {ObsidianUri}", uri); } }