From 6b4ee82e5d4a4261de1e95d8d4c9df55928527f6 Mon Sep 17 00:00:00 2001
From: TSRBerry <20988865+TSRBerry@users.noreply.github.com>
Date: Wed, 13 Mar 2024 23:26:35 +0100
Subject: infra: Fix updater for old Ava users (#6441)

* Add binaries with both names to release archives

* Add migration code for the new filename

* Add Ryujinx.Ava to all win/linux releases for a while
---
 src/Ryujinx/Modules/Updater/Updater.cs | 48 ++++++++++++++++++++++++++++++++--
 1 file changed, 46 insertions(+), 2 deletions(-)

(limited to 'src')

diff --git a/src/Ryujinx/Modules/Updater/Updater.cs b/src/Ryujinx/Modules/Updater/Updater.cs
index d8346c8e..9f186f2b 100644
--- a/src/Ryujinx/Modules/Updater/Updater.cs
+++ b/src/Ryujinx/Modules/Updater/Updater.cs
@@ -298,7 +298,14 @@ namespace Ryujinx.Modules
                     else
                     {
                         // Find the process name.
-                        string ryuName = Path.GetFileName(Environment.ProcessPath);
+                        string ryuName = Path.GetFileName(Environment.ProcessPath) ?? string.Empty;
+
+                        // Migration: Start the updated binary.
+                        // TODO: Remove this in a future update.
+                        if (ryuName.StartsWith("Ryujinx.Ava"))
+                        {
+                            ryuName = ryuName.Replace(".Ava", "");
+                        }
 
                         // Some operating systems can see the renamed executable, so strip off the .ryuold if found.
                         if (ryuName.EndsWith(".ryuold"))
@@ -307,7 +314,7 @@ namespace Ryujinx.Modules
                         }
 
                         // Fallback if the executable could not be found.
-                        if (!Path.Exists(Path.Combine(executableDirectory, ryuName)))
+                        if (ryuName.Length == 0 || !Path.Exists(Path.Combine(executableDirectory, ryuName)))
                         {
                             ryuName = OperatingSystem.IsWindows() ? "Ryujinx.exe" : "Ryujinx";
                         }
@@ -759,6 +766,43 @@ namespace Ryujinx.Modules
             {
                 File.Delete(file);
             }
+
+            // Migration: Delete old Ryujinx binary.
+            // TODO: Remove this in a future update.
+            if (!OperatingSystem.IsMacOS())
+            {
+                string[] oldRyuFiles = Directory.GetFiles(_homeDir, "Ryujinx.Ava*", SearchOption.TopDirectoryOnly);
+                // Assume we are running the new one if the process path is not available.
+                // This helps to prevent an infinite loop of restarts.
+                string currentRyuName = Path.GetFileName(Environment.ProcessPath) ?? (OperatingSystem.IsWindows() ? "Ryujinx.exe" : "Ryujinx");
+
+                string newRyuName = Path.Combine(_homeDir, currentRyuName.Replace(".Ava", ""));
+                if (!currentRyuName.Contains("Ryujinx.Ava"))
+                {
+                    foreach (string oldRyuFile in oldRyuFiles)
+                    {
+                        File.Delete(oldRyuFile);
+                    }
+                }
+                // Should we be running the old binary, start the new one if possible.
+                else if (File.Exists(newRyuName))
+                {
+                    ProcessStartInfo processStart = new(newRyuName)
+                    {
+                        UseShellExecute = true,
+                        WorkingDirectory = _homeDir,
+                    };
+
+                    foreach (string argument in CommandLineState.Arguments)
+                    {
+                        processStart.ArgumentList.Add(argument);
+                    }
+
+                    Process.Start(processStart);
+
+                    Environment.Exit(0);
+                }
+            }
         }
     }
 }
-- 
cgit v1.2.3-70-g09d2