diff --git a/windows/TweetDuck/Resources/ResourceHotSwap.cs b/lib/TweetLib.Core/Resources/ResourceHotSwap.cs similarity index 54% rename from windows/TweetDuck/Resources/ResourceHotSwap.cs rename to lib/TweetLib.Core/Resources/ResourceHotSwap.cs index 67d23df4..1cdab890 100644 --- a/windows/TweetDuck/Resources/ResourceHotSwap.cs +++ b/lib/TweetLib.Core/Resources/ResourceHotSwap.cs @@ -1,55 +1,49 @@ #if DEBUG using System.Diagnostics; using System.IO; -using TweetLib.Core; +using System.Linq; +using System.Text; +using TweetDuck; -namespace TweetDuck.Resources { - static class ResourceHotSwap { - private static readonly string HotSwapProjectRoot = FixPathSlash(Path.GetFullPath(Path.Combine(App.ProgramPath, "../../../"))); - private static readonly string HotSwapTargetDir = FixPathSlash(Path.Combine(HotSwapProjectRoot, "bin", "tmp")); - private static readonly string HotSwapRebuildScript = Path.Combine(HotSwapProjectRoot, "Resources", "PostBuild.ps1"); +namespace TweetLib.Core.Resources { + public static class ResourceHotSwap { + private static readonly string HotSwapProjectRoot = FixPathSlash(Path.GetFullPath(Path.Combine(App.ProgramPath, "../../../../../"))); + private static readonly string HotSwapTargetDir = FixPathSlash(Path.GetFullPath(Path.Combine(App.ProgramPath, "../../../bin/tmp"))); private static string FixPathSlash(string path) { return path.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) + '\\'; } public static void Run() { - if (!File.Exists(HotSwapRebuildScript)) { - Debug.WriteLine($"Failed resource hot swap, missing rebuild script: {HotSwapRebuildScript}"); + Debug.WriteLine("Performing resource hot swap..."); + + string resourcesRoot = Path.Combine(HotSwapProjectRoot, "resources"); + if (!Directory.Exists(resourcesRoot)) { + Debug.WriteLine("Failed resource hot swap, cannot find resources folder: " + resourcesRoot); return; } - Debug.WriteLine("Performing resource hot swap..."); - + Stopwatch sw = Stopwatch.StartNew(); + DeleteHotSwapFolder(); Directory.CreateDirectory(HotSwapTargetDir); Directory.CreateDirectory(Path.Combine(HotSwapTargetDir, "plugins")); Directory.CreateDirectory(Path.Combine(HotSwapTargetDir, "plugins", "user")); - CopyDirectory(Path.Combine(HotSwapProjectRoot, "Resources", "Content"), Path.Combine(HotSwapTargetDir, "resources")); - CopyDirectory(Path.Combine(HotSwapProjectRoot, "Resources", "Guide"), Path.Combine(HotSwapTargetDir, "guide")); - CopyDirectory(Path.Combine(HotSwapProjectRoot, "Resources", "Plugins"), Path.Combine(HotSwapTargetDir, "plugins", "official")); + CopyDirectory(Path.Combine(resourcesRoot, "Content"), Path.Combine(HotSwapTargetDir, "resources")); + CopyDirectory(Path.Combine(resourcesRoot, "Guide"), Path.Combine(HotSwapTargetDir, "guide")); + CopyDirectory(Path.Combine(resourcesRoot, "Plugins"), Path.Combine(HotSwapTargetDir, "plugins", "official")); Directory.Move(Path.Combine(HotSwapTargetDir, "plugins", "official", ".debug"), Path.Combine(HotSwapTargetDir, "plugins", "user", ".debug")); - Stopwatch sw = Stopwatch.StartNew(); - - using (Process process = Process.Start(new ProcessStartInfo { - FileName = "powershell", - Arguments = $"-NoProfile -ExecutionPolicy Unrestricted -File \"{HotSwapRebuildScript}\" \"{HotSwapTargetDir}\\\" \"{Program.VersionTag}\"", - WindowStyle = ProcessWindowStyle.Hidden - })) { - // ReSharper disable once PossibleNullReferenceException - if (!process.WaitForExit(8000)) { - Debug.WriteLine("Failed resource hot swap, script did not finish in time"); - return; - } - else if (process.ExitCode != 0) { - Debug.WriteLine($"Failed resource hot swap, script exited with code {process.ExitCode}"); - return; - } + foreach (var file in Directory.EnumerateFiles(Path.Combine(HotSwapTargetDir, "plugins"), "*.meta", SearchOption.AllDirectories)) { + var lines = File.ReadLines(file, Encoding.UTF8) + .Select(static line => line.Replace("{version}", Version.Tag)) + .ToArray(); + + File.WriteAllLines(file, lines, Encoding.UTF8); } sw.Stop(); - Debug.WriteLine($"Finished rebuild script in {sw.ElapsedMilliseconds} ms"); + Debug.WriteLine($"Finished resource hot swap in {sw.ElapsedMilliseconds} ms"); Directory.Delete(App.ResourcesPath, true); Directory.Delete(App.GuidePath, true); diff --git a/windows/TweetDuck/Browser/FormBrowser.cs b/windows/TweetDuck/Browser/FormBrowser.cs index f0106b38..697bc19a 100644 --- a/windows/TweetDuck/Browser/FormBrowser.cs +++ b/windows/TweetDuck/Browser/FormBrowser.cs @@ -345,7 +345,7 @@ public void ResumeNotification() { public void ReloadToTweetDeck() { #if DEBUG - Resources.ResourceHotSwap.Run(); + ResourceHotSwap.Run(); resourceCache.ClearCache(); #else if (ModifierKeys.HasFlag(Keys.Shift)) { diff --git a/windows/TweetDuck/TweetDuck.csproj b/windows/TweetDuck/TweetDuck.csproj index 6a4a0cab..119774cd 100644 --- a/windows/TweetDuck/TweetDuck.csproj +++ b/windows/TweetDuck/TweetDuck.csproj @@ -143,7 +143,6 @@ <Compile Include="Program.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Reporter.cs" /> - <Compile Include="Resources\ResourceHotSwap.cs" /> <Compile Include="Updates\UpdateCheckClient.cs" /> <Compile Include="Updates\UpdateInstaller.cs" /> <Compile Include="Utils\BrowserUtils.cs" />