enhance: refactor terminal functionality to support flatpak

This commit is contained in:
Aikawa Yataro 2024-09-16 09:06:43 +00:00
parent 4deac98c4e
commit 066d79db2b
No known key found for this signature in database
GPG key ID: 1C5D95FB10179404
3 changed files with 36 additions and 7 deletions

View file

@ -35,7 +35,14 @@ namespace SourceGit.Native
return test;
}
return string.Empty;
if (IsFlatpak())
{
return shell.Exec;
}
else
{
return string.Empty;
}
}
public List<Models.ExternalTool> FindExternalTools()
@ -71,17 +78,33 @@ namespace SourceGit.Native
public void OpenTerminal(string workdir)
{
if (string.IsNullOrEmpty(OS.ShellOrTerminal) || !File.Exists(OS.ShellOrTerminal))
if (string.IsNullOrEmpty(OS.ShellOrTerminal))
{
App.RaiseException(workdir, $"Can not found terminal! Please confirm that the correct shell/terminal has been configured.");
App.RaiseException(workdir, $"Terminal is not specified! Please confirm that the correct shell/terminal has been configured.");
return;
}
var startInfo = new ProcessStartInfo();
var home = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
startInfo.WorkingDirectory = string.IsNullOrEmpty(workdir) ? home : workdir;
startInfo.FileName = OS.ShellOrTerminal;
Process.Start(startInfo);
if (IsFlatpak())
{
startInfo.FileName = "flatpak-spawn";
startInfo.ArgumentList.Add("--host");
startInfo.ArgumentList.Add(OS.ShellOrTerminal);
}
else
{
startInfo.FileName = OS.ShellOrTerminal;
}
try
{
Process.Start(startInfo);
}
catch (Exception e)
{
App.RaiseException(workdir, e.Message);
}
}
public void OpenWithDefaultEditor(string file)
@ -117,5 +140,11 @@ namespace SourceGit.Native
var path = $"{Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)}/JetBrains/Toolbox/apps/fleet/bin/Fleet";
return File.Exists(path) ? path : FindExecutable("fleet");
}
private static bool IsFlatpak()
{
var container = Environment.GetEnvironmentVariable("container");
return container == "flatpak";
}
}
}

View file

@ -95,7 +95,7 @@ namespace SourceGit.Native
public static void OpenTerminal(string workdir)
{
if (string.IsNullOrEmpty(ShellOrTerminal))
App.RaiseException(workdir, $"Can not found terminal! Please confirm that the correct shell/terminal has been configured.");
App.RaiseException(workdir, $"Terminal is not specified! Please confirm that the correct shell/terminal has been configured.");
else
_backend.OpenTerminal(workdir);
}

View file

@ -160,7 +160,7 @@ namespace SourceGit.Native
{
if (string.IsNullOrEmpty(OS.ShellOrTerminal) || !File.Exists(OS.ShellOrTerminal))
{
App.RaiseException(workdir, $"Can not found terminal! Please confirm that the correct shell/terminal has been configured.");
App.RaiseException(workdir, $"Terminal is not specified! Please confirm that the correct shell/terminal has been configured.");
return;
}