diff options
author | TheArcaneBrony <myrainbowdash949@gmail.com> | 2023-12-09 02:58:11 +0100 |
---|---|---|
committer | TheArcaneBrony <myrainbowdash949@gmail.com> | 2023-12-09 02:58:47 +0100 |
commit | 959e18046d6ec0bc9eefc8efd9b136cb14314af6 (patch) | |
tree | 76a30a39ccce380ee79bc79f4c96dfd35c44a6e9 | |
download | SpacebarDiscordDesktopLauncher-959e18046d6ec0bc9eefc8efd9b136cb14314af6.tar.xz |
Initial commit
-rw-r--r-- | .gitignore | 5 | ||||
-rw-r--r-- | .idea/.idea.SpacebarDiscordDesktopLauncher/.idea/.gitignore | 13 | ||||
-rw-r--r-- | .idea/.idea.SpacebarDiscordDesktopLauncher/.idea/encodings.xml | 4 | ||||
-rw-r--r-- | .idea/.idea.SpacebarDiscordDesktopLauncher/.idea/indexLayout.xml | 8 | ||||
-rw-r--r-- | .idea/.idea.SpacebarDiscordDesktopLauncher/.idea/vcs.xml | 6 | ||||
-rw-r--r-- | SpacebarDiscordDesktopLauncher.sln | 16 | ||||
-rw-r--r-- | SpacebarDiscordDesktopLauncher/Launcher.ico | bin | 0 -> 10781 bytes | |||
-rw-r--r-- | SpacebarDiscordDesktopLauncher/LinuxDiscordClientFinder.cs | 23 | ||||
-rw-r--r-- | SpacebarDiscordDesktopLauncher/Program.cs | 61 | ||||
-rw-r--r-- | SpacebarDiscordDesktopLauncher/SpacebarDiscordDesktopLauncher.csproj | 19 | ||||
-rw-r--r-- | SpacebarDiscordDesktopLauncher/WindowsDiscordClientFinder.cs | 38 | ||||
-rwxr-xr-x | SpacebarDiscordDesktopLauncher/build.sh | 9 |
12 files changed, 202 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..add57be --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +bin/ +obj/ +/packages/ +riderModule.iml +/_ReSharper.Caches/ \ No newline at end of file diff --git a/.idea/.idea.SpacebarDiscordDesktopLauncher/.idea/.gitignore b/.idea/.idea.SpacebarDiscordDesktopLauncher/.idea/.gitignore new file mode 100644 index 0000000..674aba3 --- /dev/null +++ b/.idea/.idea.SpacebarDiscordDesktopLauncher/.idea/.gitignore @@ -0,0 +1,13 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Rider ignored files +/contentModel.xml +/modules.xml +/projectSettingsUpdater.xml +/.idea.SpacebarDiscordDesktopLauncher.iml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/.idea.SpacebarDiscordDesktopLauncher/.idea/encodings.xml b/.idea/.idea.SpacebarDiscordDesktopLauncher/.idea/encodings.xml new file mode 100644 index 0000000..df87cf9 --- /dev/null +++ b/.idea/.idea.SpacebarDiscordDesktopLauncher/.idea/encodings.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" /> +</project> \ No newline at end of file diff --git a/.idea/.idea.SpacebarDiscordDesktopLauncher/.idea/indexLayout.xml b/.idea/.idea.SpacebarDiscordDesktopLauncher/.idea/indexLayout.xml new file mode 100644 index 0000000..7b08163 --- /dev/null +++ b/.idea/.idea.SpacebarDiscordDesktopLauncher/.idea/indexLayout.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="UserContentModel"> + <attachedFolders /> + <explicitIncludes /> + <explicitExcludes /> + </component> +</project> \ No newline at end of file diff --git a/.idea/.idea.SpacebarDiscordDesktopLauncher/.idea/vcs.xml b/.idea/.idea.SpacebarDiscordDesktopLauncher/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/.idea.SpacebarDiscordDesktopLauncher/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$" vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/SpacebarDiscordDesktopLauncher.sln b/SpacebarDiscordDesktopLauncher.sln new file mode 100644 index 0000000..d39a3f6 --- /dev/null +++ b/SpacebarDiscordDesktopLauncher.sln @@ -0,0 +1,16 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpacebarDiscordDesktopLauncher", "SpacebarDiscordDesktopLauncher\SpacebarDiscordDesktopLauncher.csproj", "{6A8C8E05-DAAF-4363-B588-B4A8E08B1A33}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6A8C8E05-DAAF-4363-B588-B4A8E08B1A33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6A8C8E05-DAAF-4363-B588-B4A8E08B1A33}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6A8C8E05-DAAF-4363-B588-B4A8E08B1A33}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6A8C8E05-DAAF-4363-B588-B4A8E08B1A33}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/SpacebarDiscordDesktopLauncher/Launcher.ico b/SpacebarDiscordDesktopLauncher/Launcher.ico new file mode 100644 index 0000000..dbdbb03 --- /dev/null +++ b/SpacebarDiscordDesktopLauncher/Launcher.ico Binary files differdiff --git a/SpacebarDiscordDesktopLauncher/LinuxDiscordClientFinder.cs b/SpacebarDiscordDesktopLauncher/LinuxDiscordClientFinder.cs new file mode 100644 index 0000000..f986c51 --- /dev/null +++ b/SpacebarDiscordDesktopLauncher/LinuxDiscordClientFinder.cs @@ -0,0 +1,23 @@ +namespace SpacebarDiscordDesktopLauncher; + +public class LinuxDiscordClientFinder +{ + public static string? FindDiscord() + { + Console.WriteLine($"Looking for installed Discord desktop instance..."); + + var pathDirectories = Environment.GetEnvironmentVariable("PATH")!.Split(':'); + foreach (var pathDirectory in pathDirectories) + { + if (!Directory.Exists(pathDirectory)) continue; + foreach (var file in Directory.GetFiles(pathDirectory)) + { + var fileInfo = new FileInfo(file); + if (fileInfo.Name.ToLower().StartsWith("discord")) + return fileInfo.FullName; + } + } + + return null; + } +} \ No newline at end of file diff --git a/SpacebarDiscordDesktopLauncher/Program.cs b/SpacebarDiscordDesktopLauncher/Program.cs new file mode 100644 index 0000000..e72a641 --- /dev/null +++ b/SpacebarDiscordDesktopLauncher/Program.cs @@ -0,0 +1,61 @@ +// See https://aka.ms/new-console-template for more information + +using System.Diagnostics; +using System.Text.Json; +using System.Text.Json.Nodes; +using SpacebarDiscordDesktopLauncher; + +internal class Program +{ + public static void Main(string[] args) + { + string? discordClientPath = Environment.OSVersion.Platform switch + { + PlatformID.Win32NT => WindowsDiscordClientFinder.FindDiscord(), + PlatformID.Unix => LinuxDiscordClientFinder.FindDiscord(), + _ => throw new Exception($"Unknown platform: {Environment.OSVersion.Platform}") + }; + + string? userDataPath = Environment.OSVersion.Platform switch + { + PlatformID.Win32NT => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), + ".local", + "share", "Discord-SpacebarLauncher"), + PlatformID.Unix => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".local", + "share", + "Discord-SpacebarLauncher"), + _ => throw new Exception($"Unknown platform: {Environment.OSVersion.Platform}") + }; + + if (discordClientPath is null) + { + Console.WriteLine("Could not find Discord! Do you have the normal Discord client installed?"); + Console.ReadLine(); + return; + } + + if (Environment.OSVersion.Platform == PlatformID.Unix) + { + var settingsJsonPath = Path.Combine(userDataPath, "discord", "settings.json"); + JsonObject discordSettings = new(); + if (File.Exists(settingsJsonPath)) + discordSettings = JsonSerializer.Deserialize<JsonObject>(File.ReadAllText(settingsJsonPath)); + + discordSettings!["SKIP_HOST_UPDATE"] = true; + File.WriteAllText(settingsJsonPath, JsonSerializer.Serialize(discordSettings)); + Console.WriteLine($"Wrote settings.json... Contents: {discordSettings}"); + Console.WriteLine($"Full path: {settingsJsonPath}"); + } + + var psi = new ProcessStartInfo(discordClientPath) + { + Environment = + { + { "DISCORD_WEBAPP_ENDPOINT", "https://app.spacebar.chat" }, + { "DISCORD_USER_DATA_DIR", userDataPath }, + } + }; + + Process.Start(psi); + } +} \ No newline at end of file diff --git a/SpacebarDiscordDesktopLauncher/SpacebarDiscordDesktopLauncher.csproj b/SpacebarDiscordDesktopLauncher/SpacebarDiscordDesktopLauncher.csproj new file mode 100644 index 0000000..faa989f --- /dev/null +++ b/SpacebarDiscordDesktopLauncher/SpacebarDiscordDesktopLauncher.csproj @@ -0,0 +1,19 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>net8.0</TargetFramework> + <ImplicitUsings>enable</ImplicitUsings> + <Nullable>enable</Nullable> + </PropertyGroup> + + <PropertyGroup Condition="'$(Configuration)' == 'Release'"> + <Optimize>true</Optimize> + <RunAOTCompilation>true</RunAOTCompilation> +<!-- <PublishAot>true</PublishAot>--> + <PublishTrimmed>true</PublishTrimmed> + <PublishSingleFile>true</PublishSingleFile> + <ApplicationIcon>Launcher.ico</ApplicationIcon> + </PropertyGroup> + +</Project> diff --git a/SpacebarDiscordDesktopLauncher/WindowsDiscordClientFinder.cs b/SpacebarDiscordDesktopLauncher/WindowsDiscordClientFinder.cs new file mode 100644 index 0000000..8b6db0e --- /dev/null +++ b/SpacebarDiscordDesktopLauncher/WindowsDiscordClientFinder.cs @@ -0,0 +1,38 @@ +namespace SpacebarDiscordDesktopLauncher; + +public static class WindowsDiscordClientFinder +{ + public static string? FindDiscord() + { + Console.WriteLine($"Looking for installed Discord desktop instance..."); + + var basePath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); + foreach (var discordBranch in new String[] { "", "PTB", "Canary", "Development" }) + { + if (Path.Exists(Path.Combine(basePath, "Discord" + discordBranch))) + return Path.Combine(GetLatestAppVersion(Path.Combine(basePath, "Discord" + discordBranch)), + discordBranch + ".exe"); + } + + Console.WriteLine("Could not find Discord! Do you have the normal Discord client installed?"); + Console.ReadLine(); + return null; + } + + private static string GetLatestAppVersion(string basePath) + { + var dirs = Directory.GetDirectories(basePath); + var newestDir = ""; + var newestDirDate = DateTime.MinValue; + foreach (var dir in dirs) + { + var di = new DirectoryInfo(dir); + if (!di.Name.StartsWith("app", StringComparison.InvariantCultureIgnoreCase)) continue; + if (di.CreationTimeUtc <= newestDirDate) continue; + newestDirDate = di.CreationTimeUtc; + newestDir = di.FullName; + } + + return newestDir; + } +} \ No newline at end of file diff --git a/SpacebarDiscordDesktopLauncher/build.sh b/SpacebarDiscordDesktopLauncher/build.sh new file mode 100755 index 0000000..dd38d43 --- /dev/null +++ b/SpacebarDiscordDesktopLauncher/build.sh @@ -0,0 +1,9 @@ +#!/bin/sh +for arch in {x64,arm64} +do + for platform in {osx,win,linux} + do + dotnet publish -c Release -r ${platform}-${arch} --nologo --property AssemblyName=SpacebarDiscordDesktopLauncher-${platform}-${arch} -o bin/release + done +done +wait \ No newline at end of file |