using Daybreak.Shared.Services.Shell;
using Microsoft.Extensions.Logging;
using System.Diagnostics;
namespace Daybreak.Linux.Services.Shell;
///
/// Linux implementation of .
/// Both URLs and file-system paths are delegated to xdg-open, which routes to the
/// user's default browser or file manager as appropriate.
///
internal sealed class ShellExecutor(
ILogger logger) : IShellExecutor
{
private const string XdgOpenExecutable = "xdg-open";
private readonly ILogger logger = logger;
public void OpenUrl(string url) => this.Open(url);
public void OpenPath(string path) => this.Open(path);
private void Open(string target)
{
if (string.IsNullOrWhiteSpace(target))
{
return;
}
try
{
var startInfo = new ProcessStartInfo
{
FileName = XdgOpenExecutable,
UseShellExecute = false,
};
startInfo.ArgumentList.Add(target);
Process.Start(startInfo);
}
catch (Exception ex)
{
this.logger.LogError(ex, "Failed to open target {target}", target);
}
}
}