Skip to content

Commit

Permalink
Kaikki now uses records and dictionaries instead of switch statements…
Browse files Browse the repository at this point in the history
… for detailed presence
  • Loading branch information
Plextora committed Dec 27, 2022
1 parent 756ac29 commit fd3cd7d
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 26 deletions.
84 changes: 60 additions & 24 deletions DiscordPresence.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,48 @@
namespace Kaikki;
using DiscordRPC;

using DiscordRPC;
namespace Kaikki;

public static class DiscordPresence
{
public static DiscordRpcClient Client = null!;

static void SetPresence(string name, string displayName, string largeimgtext)

private static readonly Dictionary<string, PresenceDetails> SupportedPresenceDict = new()
{
{
"firefox",
new PresenceDetails(
"firefox",
"Firefox",
"Firefox logo",
"Set Firefox presence")
},
{
"Discord",
new PresenceDetails(
"discord",
"Discord",
"Discord logo",
"Set Discord presence")
},
{
"rider64",
new PresenceDetails(
"rider",
"Rider IDE",
"Rider IDE logo",
"Set Rider IDE presence")
},
{
"ShareX",
new PresenceDetails(
"sharex",
"ShareX",
"ShareX logo",
"Set ShareX presence")
}
};

private static void SetPresence(string name, string displayName, string largeimgtext)
{
Client.SetPresence(new RichPresence
{
Expand All @@ -22,33 +58,33 @@ static void SetPresence(string name, string displayName, string largeimgtext)

public static string RunDiscordRpc(string procName)
{
switch (procName)
if (SupportedPresenceDict.TryGetValue(procName, out var presenceDetails))
{
SetPresence(presenceDetails.Name, presenceDetails.DisplayName, presenceDetails.Imgtext);
return presenceDetails.ReturnMessage;
}

if (procName == "Kaikki")
{
case "firefox":
SetPresence("firefox", "Firefox", "Firefox logo");
return "Set Firefox presence";
case "Discord":
SetPresence("discord", "Discord", "Discord logo");
return "Set Discord presence";
case "rider64":
SetPresence("rider", "Rider IDE", "Rider IDE logo");
return "Set Rider IDE presence";
case "ShareX":
SetPresence("sharex", "ShareX", "ShareX logo");
return "Set ShareX presence";
case "Kaikki":
Client.ClearPresence();
return "User is focused on the Kaikki window. Clearing presence...";
default:
SetPresence("kaikki_logo", procName, "Kaikki logo");
return "Unsupported process";
Client.ClearPresence();
return "User is focused on the Kaikki window. Clearing presence...";
}

SetPresence("kaikki_logo", procName, "Kaikki logo");
return "Unsupported process";
}

public static void StopDiscordRpc()
{
Client.ClearPresence();
Client.Deinitialize();
Client.Dispose();
}

private record PresenceDetails(
string Name,
string DisplayName,
string Imgtext,
string ReturnMessage
);
}
6 changes: 4 additions & 2 deletions Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,11 @@ string GetForegroundProcessName()

if (GetForegroundProcessName() != "Unknown")
{
Console.WriteLine(DiscordPresence.RunDiscordRpc(GetForegroundProcessName()) == "Unsupported process"
string returnValue = DiscordPresence.RunDiscordRpc(GetForegroundProcessName());

Console.WriteLine(returnValue == "Unsupported process"
? "Set default Discord presence"
: "Set detailed Discord presence");
: returnValue);
}
else
{
Expand Down

0 comments on commit fd3cd7d

Please sign in to comment.