Skip to content

Commit

Permalink
Improve CL options
Browse files Browse the repository at this point in the history
  • Loading branch information
rankynbass committed Apr 19, 2024
1 parent e03cd9b commit c3098ab
Show file tree
Hide file tree
Showing 6 changed files with 257 additions and 60 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public override void Draw()
if (ImGui.Button($"{(steamToolInstalled ? "Re-i" : "I")}nstall to native Steam"))
{
this.Save();
SteamCompatibilityTool.CreateTool(Program.Config.SteamPath ?? "");
SteamCompatibilityTool.CreateTool(isFlatpak: false);
steamToolInstalled = SteamCompatibilityTool.IsSteamToolInstalled;
}
if (!steamInstalled) ImGui.EndDisabled();
Expand All @@ -87,7 +87,7 @@ public override void Draw()
if (ImGui.Button("Uninstall from native Steam"))
{
this.Save();
SteamCompatibilityTool.DeleteTool(Program.Config.SteamPath ?? "");
SteamCompatibilityTool.DeleteTool(isFlatpak: false);
steamToolInstalled = SteamCompatibilityTool.IsSteamToolInstalled;
}
if (!steamToolInstalled) ImGui.EndDisabled();
Expand All @@ -104,7 +104,7 @@ public override void Draw()
if (ImGui.Button($"{(steamFlatpakToolInstalled ? "Re-i" : "I")}nstall to flatpak Steam"))
{
this.Save();
SteamCompatibilityTool.CreateTool(Program.Config.SteamFlatpakPath ?? "");
SteamCompatibilityTool.CreateTool(isFlatpak: true);
steamFlatpakToolInstalled = SteamCompatibilityTool.IsSteamFlatpakToolInstalled;
}
if (!steamFlatpakInstalled) ImGui.EndDisabled();
Expand All @@ -116,7 +116,7 @@ public override void Draw()
if (ImGui.Button("Uninstall from Flatpak Steam"))
{
this.Save();
SteamCompatibilityTool.DeleteTool(Program.Config.SteamFlatpakPath ?? "");
SteamCompatibilityTool.DeleteTool(isFlatpak: true);
steamFlatpakToolInstalled = SteamCompatibilityTool.IsSteamFlatpakToolInstalled;
}
if (!steamFlatpakToolInstalled)
Expand Down
4 changes: 4 additions & 0 deletions src/XIVLauncher.Core/Configuration/ILauncherConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,10 @@ public interface ILauncherConfig

public string? SteamFlatpakPath { get; set; }

public bool? SteamToolInstalled { get; set; }

public bool? SteamFlatpakToolInstalled { get; set; }

#endregion

#region Dalamud
Expand Down
168 changes: 119 additions & 49 deletions src/XIVLauncher.Core/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@ class Program

public static string CType = CoreEnvironmentSettings.GetCType();

public static Version CoreVersion = Version.Parse(AppUtil.GetAssemblyVersion());

public static string CoreHash = AppUtil.GetGitHash() ?? "";

public static void Invalidate(uint frames = 100)
{
invalidationFrames = frames;
Expand Down Expand Up @@ -138,6 +142,8 @@ private static void LoadConfig(Storage storage)

Config.SteamPath ??= Path.Combine(CoreEnvironmentSettings.HOME, ".local", "share");
Config.SteamFlatpakPath ??= Path.Combine(CoreEnvironmentSettings.HOME, ".var", "app", "com.valvesoftware.Steam", "data", "Steam" );
Config.SteamToolInstalled ??= false;
Config.SteamFlatpakToolInstalled ??= false;
}

public const uint STEAM_APP_ID = 39210;
Expand Down Expand Up @@ -200,6 +206,19 @@ private static void Main(string[] args)

Loc.SetupWithFallbacks();

if (System.OperatingSystem.IsLinux())
{
if (mainArgs.Length > 0)
Log.Information("Command Line option selected: {args}", string.Join(' ', mainArgs));
var exitValue = LinuxCommandLineOptions();
if (exitValue)
{
Log.Information("Exiting...");
return;
}
SteamCompatibilityTool.UpdateSteamTools();
}

uint appId, altId;
string appName, altName;
if (Config.IsFt == true)
Expand All @@ -225,8 +244,6 @@ private static void Main(string[] args)
break;

case PlatformID.Unix:
// We should only run the script on Linux (maybe Unix) systems.
if (CommandLineInstaller()) return;
Steam = new UnixSteam();
break;

Expand Down Expand Up @@ -261,9 +278,9 @@ private static void Main(string[] args)
Log.Debug("Creating Veldrid devices...");

#if DEBUG
var version = AppUtil.GetGitHash();
var version = CoreHash;
#else
var version = $"{AppUtil.GetAssemblyVersion()} ({AppUtil.GetGitHash()})";
var version = $"{CoreVersion} ({CoreHash})";
#endif

// Create window, GraphicsDevice, and all resources necessary for the demo.
Expand Down Expand Up @@ -478,53 +495,106 @@ public static void ClearAll(bool tsbutton = false)
ClearLogs(true);
}

private static bool CommandLineInstaller()
private static bool LinuxCommandLineOptions()
{
foreach (var arg in mainArgs)
bool exit = false;

if (mainArgs.Contains("-v"))
{
if (arg == "--deck-install")
{
SteamCompatibilityTool.CreateTool(Path.Combine(CoreEnvironmentSettings.HOME, ".local", "share", "Steam"));
Console.WriteLine($"Installed as Steam compatibility tool to {Path.Combine(CoreEnvironmentSettings.HOME, ".local", "share", "Steam", "compatibilitytools.d", "xlcore")}");
return true;
}
if (arg.StartsWith("--install="))
{
var path = arg.Split('=', 2)[1];
if (path.StartsWith("~/"))
path = CoreEnvironmentSettings.HOME + path.TrimStart('~');
if (Directory.Exists(path) && (path.EndsWith("/Steam") || path.EndsWith("/Steam/")))
{
SteamCompatibilityTool.CreateTool(path);
Console.WriteLine($"Installed as Steam compatibility tool to path {Path.Combine(path, "compatibilitytools.d", "xlcore")}");
}
else
Console.WriteLine($"Invalid path. Path does not exist or is not a Steam folder: {path}");

return true;
}
if (arg == "--deck-remove")
{
SteamCompatibilityTool.DeleteTool(Path.Combine(CoreEnvironmentSettings.HOME, ".local", "share", "Steam"));
Console.WriteLine($"Removed XIVLauncher.Core as a Steam compatibility tool from {Path.Combine(CoreEnvironmentSettings.HOME, ".local", "share", "Steam", "compatibilitytools.d")}");
return true;
}
if (arg.StartsWith("--remove="))
{
var path = arg.Split('=', 2)[1];
if (path.StartsWith("~/"))
path = CoreEnvironmentSettings.HOME + path.TrimStart('~');
if (Directory.Exists(path) && (path.EndsWith("/Steam") || path.EndsWith("/Steam/")))
{
SteamCompatibilityTool.DeleteTool(path);
Console.WriteLine($"Removed XIVLauncher.Core as a Steam compatibility tool from {Path.Combine(path, "compatibilitytools.d")}");
}
else
Console.WriteLine($"Invalid path. Path does not exist or is not a Steam folder: {path}");

return true;
}
Console.WriteLine("Verbose Logging enabled...");
}

if (mainArgs.Contains("--update-tools") || mainArgs.Contains("-u"))
{
SteamCompatibilityTool.UpdateSteamTools(true);
exit = true;
}

if (mainArgs.Contains("--info"))
{
Console.WriteLine($"Steam compatibility tool {(SteamCompatibilityTool.IsSteamToolInstalled ? "is installed: " + SteamCompatibilityTool.CheckVersion(isFlatpak: false).Replace(",", " ") : "is not installed.")}");
Console.WriteLine($"Steam (flatpak) compatibility tool {(SteamCompatibilityTool.IsSteamFlatpakToolInstalled ? "is installed: " + SteamCompatibilityTool.CheckVersion(isFlatpak: true).Replace(",", " ") : "is not installed.")}");
exit = true;
}

if (mainArgs.Contains("--deck-install") && mainArgs.Contains("--deck-remove"))
{
SteamCompatibilityTool.DeleteTool(isFlatpak: false);
Console.WriteLine("Using both --deck-install and --deck-remove. Doing --deck-remove first");
Console.WriteLine($"Removed XIVLauncher.Core as a Steam compatibility tool from {Program.Config.SteamPath ?? ""}");
SteamCompatibilityTool.CreateTool(isFlatpak: false);
Console.WriteLine($"Installed as Steam compatibility tool to {Program.Config.SteamPath ?? ""}");
exit = true;
}
else if (mainArgs.Contains("--deck-install"))
{
SteamCompatibilityTool.CreateTool(isFlatpak: false);
Console.WriteLine($"Installed as Steam compatibility tool to {Program.Config.SteamPath ?? ""}");
exit = true;
}
else if (mainArgs.Contains("--deck-remove"))
{
SteamCompatibilityTool.DeleteTool(isFlatpak: false);
Console.WriteLine($"Removed XIVLauncher.Core as a Steam compatibility tool from {Program.Config.SteamPath ?? ""}");
exit = true;
}

if (mainArgs.Contains("--flatpak-install") && mainArgs.Contains("--flatpak-remove"))
{
Console.WriteLine("Using both --flatpak-install and --flatpak-remove. Doing --deck-remove first");
SteamCompatibilityTool.DeleteTool(isFlatpak: true);
Console.WriteLine($"Removed XIVLauncher.Core as a Steam compatibility tool from {Program.Config.SteamFlatpakPath ?? ""}");
SteamCompatibilityTool.CreateTool(isFlatpak: true);
Console.WriteLine($"Installed as Steam compatibility tool to {Program.Config.SteamFlatpakPath ?? ""}");
exit = true;
}
else if (mainArgs.Contains("--flatpak-install"))
{
SteamCompatibilityTool.CreateTool(isFlatpak: true);
Console.WriteLine($"Installed as Steam compatibility tool to {Program.Config.SteamFlatpakPath ?? ""}");
exit = true;
}
else if (mainArgs.Contains("--flatpak-remove"))
{
SteamCompatibilityTool.DeleteTool(isFlatpak: true);
Console.WriteLine($"Removed XIVLauncher.Core as a Steam compatibility tool from {Program.Config.SteamFlatpakPath ?? ""}");
exit = true;
}

if (mainArgs.Contains("--version"))
{
Console.WriteLine($"XIVLauncher.Core {CoreVersion.ToString()}");
Console.WriteLine("Copyright (C) 2024 goatcorp.\nLicense GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.");
exit = true;
}

if (mainArgs.Contains("-V"))
{
Console.WriteLine(CoreVersion.ToString());
exit = true;
}

if (mainArgs.Contains("--help") || mainArgs.Contains("-h"))
{
Console.WriteLine($"XIVLaunher.Core {CoreVersion.ToString()}\nA third-party launcher for Final Fantasy XIV.\n\nOptions (use only one):");
Console.WriteLine(" -v Turn on verbose logging, then run the launcher.");
Console.WriteLine(" -h, --help Display this message.");
Console.WriteLine(" -V Display brief version info.");
Console.WriteLine(" --version Display version and copywrite info.");
Console.WriteLine(" --info Display Steam compatibility tool install status");
Console.WriteLine(" -u, --update-tools Try to update any installed xlcore steam compatibility tools.");
Console.WriteLine("\nFor Steam Deck and native Steam");
Console.WriteLine(" --deck-install Install as a compatibility tool in the default location.");
Console.WriteLine($" Path: {Program.Config.SteamPath ?? ""}");
Console.WriteLine(" --deck-remove Remove compatibility tool install from the defualt location.");
Console.WriteLine("\nFor Flatpak Steam");
Console.WriteLine(" --flatpak-install Install as a compatibility tool to flatpak Steam.");
Console.WriteLine($" Path: {Program.Config.SteamFlatpakPath ?? ""}");
Console.WriteLine(" --flatpak-remove Remove compatibility tool from flatpak Steam.");
Console.WriteLine("");
exit = true;
}
return false;

return exit;
}
}
9 changes: 6 additions & 3 deletions src/XIVLauncher.Core/Resources/xlcore
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
#!/bin/env sh

# Working directory is actually the steam install location, so we need to find the path of this script
tooldir="$(realpath "$(dirname "$0")")"

# Prevent double launch
if [ "$1" = "run" ]; then
if [ ! -f "$tooldir/version" ]; then
"$tooldir/XIVLauncher/XIVLauncher.Core" -V > "$tooldir/version"
fi
sleep 1
exit 0
fi
Expand All @@ -11,9 +17,6 @@ logDir=$xlcoreDir/logs
mkdir -p $xlcoreDir
mkdir -p $logDir

# Working directory is actually the steam install location, so we need to find the path of this script
tooldir="$(realpath "$(dirname "$0")")"

# If aria2c isn't found, add our local copy to the $PATH
count=$(find /usr -type f -executable -name "aria2c" 2>/dev/null | wc -l)
if [ $count -eq 0 ] && [ -e "$tooldir/bin/aria2c" ]; then
Expand Down
Loading

0 comments on commit c3098ab

Please sign in to comment.