Skip to content

Commit

Permalink
Add shortcuts on Linux
Browse files Browse the repository at this point in the history
Resolves #136

Signed-off-by: Jade Turner <[email protected]>
  • Loading branch information
spacey-sooty committed Oct 18, 2024
1 parent c4beebb commit 1847f3d
Showing 1 changed file with 107 additions and 26 deletions.
133 changes: 107 additions & 26 deletions WPILibInstaller-Avalonia/ViewModels/InstallPageViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,71 @@ public class InstallPageViewModel : PageViewModelBase
public int ProgressTotal { get; set; }
public string TextTotal { get; set; } = "";

private async void CreateLinuxShortcut(String name, String frcYear, CancellationToken token)
{
// Create Linux desktop shortcut
var desktopFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Desktop", $@"{name} {frcYear}.desktop");
var launcherFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".local/share/applications", $@"{name} {frcYear}.desktop");
string contents;
if (name.Contains("WPILib"))
{
var nameNoWPILib = name.Remove(name.Length - " (WPILib)".Length);
contents = $@"#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Categories=Development
Name={name} {frcYear}
Comment={nameNoWPILib} tool for the 2025 FIRST Robotics Competition season
Exec={configurationProvider.InstallDirectory}/tools/{nameNoWPILib}.sh
Icon={configurationProvider.InstallDirectory}/frccode/wpilib-256.ico
Terminal=false
StartupNotify=true
StartupWMClass=Code
";

}
else
{
contents = $@"#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Categories=Development
Name={name} {frcYear}
Comment={name} tool for the 2025 FIRST Robotics Competition season
Exec={configurationProvider.InstallDirectory}/tools/{name}.sh
Icon={configurationProvider.InstallDirectory}/frccode/wpilib-256.ico
Terminal=false
StartupNotify=true
StartupWMClass=Code
";
}
var desktopPath = Path.GetDirectoryName(desktopFile);
if (desktopPath != null)
{
Directory.CreateDirectory(desktopPath);
}
var launcherPath = Path.GetDirectoryName(launcherFile);
if (launcherPath != null)
{
Directory.CreateDirectory(launcherPath);
}
await File.WriteAllTextAsync(desktopFile, contents, token);
await File.WriteAllTextAsync(launcherFile, contents, token);
await Task.Run(() =>
{
var startInfo = new ProcessStartInfo("chmod", $"+x \"{desktopFile}\"")
{
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true
};
var proc = Process.Start(startInfo);
proc!.WaitForExit();
}, token);
}

public async Task UIUpdateTask(CancellationToken token)
{
while (!token.IsCancellationRequested)
Expand Down Expand Up @@ -894,10 +959,12 @@ await MessageBox.Avalonia.MessageBoxManager.GetMessageBoxStandardWindow(new Mess
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && vsInstallProvider.Model.InstallingVsCode)
{
// Create Linux desktop shortcut
var desktopFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Desktop", $@"FRC VS Code {frcYear}.desktop");
var launcherFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".local/share/applications", $@"FRC VS Code {frcYear}.desktop");
string contents = $@"#!/usr/bin/env xdg-open
if (vsInstallProvider.Model.InstallingVsCode)
{
// Create Linux desktop shortcut
var desktopFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Desktop", $@"FRC VS Code {frcYear}.desktop");
var launcherFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".local/share/applications", $@"FRC VS Code {frcYear}.desktop");
string contents = $@"#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Expand All @@ -911,29 +978,43 @@ [Desktop Entry]
StartupWMClass=Code
";

var desktopPath = Path.GetDirectoryName(desktopFile);
if (desktopPath != null)
{
Directory.CreateDirectory(desktopPath);
}
var launcherPath = Path.GetDirectoryName(launcherFile);
if (launcherPath != null)
{
Directory.CreateDirectory(launcherPath);
}
await File.WriteAllTextAsync(desktopFile, contents, token);
await File.WriteAllTextAsync(launcherFile, contents, token);
await Task.Run(() =>
{
var startInfo = new ProcessStartInfo("chmod", $"+x \"{desktopFile}\"")
var desktopPath = Path.GetDirectoryName(desktopFile);
if (desktopPath != null)
{
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true
};
var proc = Process.Start(startInfo);
proc!.WaitForExit();
}, token);
Directory.CreateDirectory(desktopPath);
}
var launcherPath = Path.GetDirectoryName(launcherFile);
if (launcherPath != null)
{
Directory.CreateDirectory(launcherPath);
}
await File.WriteAllTextAsync(desktopFile, contents, token);
await File.WriteAllTextAsync(launcherFile, contents, token);
await Task.Run(() =>
{
var startInfo = new ProcessStartInfo("chmod", $"+x \"{desktopFile}\"")
{
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true
};
var proc = Process.Start(startInfo);
proc!.WaitForExit();
}, token);
}

CreateLinuxShortcut("Choreo (WPILib)", frcYear, token);
CreateLinuxShortcut("AdvantageScope (WPILib)", frcYear, token);
CreateLinuxShortcut("Glass", frcYear, token);
CreateLinuxShortcut("OutlineViewer", frcYear, token);
CreateLinuxShortcut("DataLogTool", frcYear, token);
CreateLinuxShortcut("SysId", frcYear, token);
CreateLinuxShortcut("ToolsUpdater", frcYear, token);
CreateLinuxShortcut("SmartDashboard", frcYear, token);
CreateLinuxShortcut("RobotBuilder", frcYear, token);
CreateLinuxShortcut("PathWeaver", frcYear, token);
CreateLinuxShortcut("roboRIOTeamNumberSetter", frcYear, token);
CreateLinuxShortcut("Shuffleboard", frcYear, token);
}
}
}
Expand Down

0 comments on commit 1847f3d

Please sign in to comment.