From 963aa9f3e5ce81a4682c6ca3d136cddda614db33 Mon Sep 17 00:00:00 2001 From: Mason Sciotti Date: Mon, 21 Sep 2020 14:51:48 -0700 Subject: [PATCH] [Maintenance PR for Legacy Gamedevs] Add party privacy enum (#306) * Add party privacy enum * Add party privacy enum * Possible unreal working * Cast to int --- examples/button-clicker/Assets/DiscordController.cs | 5 +++++ examples/button-clicker/Assets/DiscordRpc.cs | 9 +++++++++ examples/send-presence/send-presence.c | 1 + .../DiscordRpc/Private/DiscordRpcBlueprint.cpp | 1 + .../Source/DiscordRpc/Public/DiscordRpcBlueprint.h | 12 ++++++++++++ include/discord_rpc.h | 3 +++ src/serialization.cpp | 7 ++++++- 7 files changed, 37 insertions(+), 1 deletion(-) diff --git a/examples/button-clicker/Assets/DiscordController.cs b/examples/button-clicker/Assets/DiscordController.cs index 5b13215..7319d5f 100644 --- a/examples/button-clicker/Assets/DiscordController.cs +++ b/examples/button-clicker/Assets/DiscordController.cs @@ -31,6 +31,11 @@ public class DiscordController : MonoBehaviour clickCounter++; presence.details = string.Format("Button clicked {0} times", clickCounter); + presence.joinSecret = "aSecret"; + presence.partyId = "aPartyId"; + presence.partySize = 1; + presence.partyMax = 3; + presence.partyPrivacy = DiscordRpc.PartyPrivacy.Public; DiscordRpc.UpdatePresence(presence); } diff --git a/examples/button-clicker/Assets/DiscordRpc.cs b/examples/button-clicker/Assets/DiscordRpc.cs index 92b5c6e..f3b1ee5 100644 --- a/examples/button-clicker/Assets/DiscordRpc.cs +++ b/examples/button-clicker/Assets/DiscordRpc.cs @@ -56,6 +56,7 @@ public class DiscordRpc public IntPtr partyId; /* max 128 bytes */ public int partySize; public int partyMax; + public int partyPrivacy; public IntPtr matchSecret; /* max 128 bytes */ public IntPtr joinSecret; /* max 128 bytes */ public IntPtr spectateSecret; /* max 128 bytes */ @@ -78,6 +79,12 @@ public class DiscordRpc Ignore = 2 } + public enum PartyPrivacy + { + Private = 0, + Public = 1 + } + public static void Initialize(string applicationId, ref EventHandlers handlers, bool autoRegister, string optionalSteamId) { Callbacks = handlers; @@ -137,6 +144,7 @@ public class DiscordRpc public string partyId; /* max 128 bytes */ public int partySize; public int partyMax; + public PartyPrivacy partyPrivacy; public string matchSecret; /* max 128 bytes */ public string joinSecret; /* max 128 bytes */ public string spectateSecret; /* max 128 bytes */ @@ -164,6 +172,7 @@ public class DiscordRpc _presence.partyId = StrToPtr(partyId); _presence.partySize = partySize; _presence.partyMax = partyMax; + _presence.partyPrivacy = (int)partyPrivacy; _presence.matchSecret = StrToPtr(matchSecret); _presence.joinSecret = StrToPtr(joinSecret); _presence.spectateSecret = StrToPtr(spectateSecret); diff --git a/examples/send-presence/send-presence.c b/examples/send-presence/send-presence.c index 5449cf8..1b651f2 100644 --- a/examples/send-presence/send-presence.c +++ b/examples/send-presence/send-presence.c @@ -47,6 +47,7 @@ static void updateDiscordPresence() discordPresence.partyId = "party1234"; discordPresence.partySize = 1; discordPresence.partyMax = 6; + discordPresence.partyPrivacy = DISCORD_PARTY_PUBLIC; discordPresence.matchSecret = "xyzzy"; discordPresence.joinSecret = "join"; discordPresence.spectateSecret = "look"; diff --git a/examples/unrealstatus/Plugins/discordrpc/Source/DiscordRpc/Private/DiscordRpcBlueprint.cpp b/examples/unrealstatus/Plugins/discordrpc/Source/DiscordRpc/Private/DiscordRpcBlueprint.cpp index 95388df..8925d8e 100644 --- a/examples/unrealstatus/Plugins/discordrpc/Source/DiscordRpc/Private/DiscordRpcBlueprint.cpp +++ b/examples/unrealstatus/Plugins/discordrpc/Source/DiscordRpc/Private/DiscordRpcBlueprint.cpp @@ -153,6 +153,7 @@ void UDiscordRpc::UpdatePresence() rp.endTimestamp = RichPresence.endTimestamp; rp.partySize = RichPresence.partySize; rp.partyMax = RichPresence.partyMax; + rp.partyPrivacy = (int)RichPresence.partyPrivacy; rp.instance = RichPresence.instance; Discord_UpdatePresence(&rp); diff --git a/examples/unrealstatus/Plugins/discordrpc/Source/DiscordRpc/Public/DiscordRpcBlueprint.h b/examples/unrealstatus/Plugins/discordrpc/Source/DiscordRpc/Public/DiscordRpcBlueprint.h index 17e2f9b..409eee0 100644 --- a/examples/unrealstatus/Plugins/discordrpc/Source/DiscordRpc/Public/DiscordRpcBlueprint.h +++ b/examples/unrealstatus/Plugins/discordrpc/Source/DiscordRpc/Public/DiscordRpcBlueprint.h @@ -35,6 +35,16 @@ enum class EDiscordJoinResponseCodes : uint8 DISCORD_REPLY_IGNORE UMETA(DisplayName="Ignore") }; +/** +* Valid party privacy values +*/ +UENUM(BlueprintType) +enum class EDiscordPartyPrivacy: uint8 +{ + DISCORD_PARTY_PRIVATE UMETA(DisplayName="Private"), + DISCORD_PARTY_PUBLIC UMETA(DisplayName="Public") +}; + DECLARE_LOG_CATEGORY_EXTERN(Discord, Log, All); DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDiscordConnected, const FDiscordUserData&, joinRequest); @@ -77,6 +87,8 @@ struct FDiscordRichPresence { UPROPERTY(BlueprintReadWrite) int partyMax; UPROPERTY(BlueprintReadWrite) + EDiscordPartyPrivacy partyPrivacy; + UPROPERTY(BlueprintReadWrite) FString matchSecret; UPROPERTY(BlueprintReadWrite) FString joinSecret; diff --git a/include/discord_rpc.h b/include/discord_rpc.h index 3e1441e..9470434 100644 --- a/include/discord_rpc.h +++ b/include/discord_rpc.h @@ -35,6 +35,7 @@ typedef struct DiscordRichPresence { const char* partyId; /* max 128 bytes */ int partySize; int partyMax; + int partyPrivacy; const char* matchSecret; /* max 128 bytes */ const char* joinSecret; /* max 128 bytes */ const char* spectateSecret; /* max 128 bytes */ @@ -60,6 +61,8 @@ typedef struct DiscordEventHandlers { #define DISCORD_REPLY_NO 0 #define DISCORD_REPLY_YES 1 #define DISCORD_REPLY_IGNORE 2 +#define DISCORD_PARTY_PRIVATE 0 +#define DISCORD_PARTY_PUBLIC 1 DISCORD_EXPORT void Discord_Initialize(const char* applicationId, DiscordEventHandlers* handlers, diff --git a/src/serialization.cpp b/src/serialization.cpp index 6cc1e90..70efa63 100644 --- a/src/serialization.cpp +++ b/src/serialization.cpp @@ -134,7 +134,7 @@ size_t JsonWriteRichPresenceObj(char* dest, } if ((presence->partyId && presence->partyId[0]) || presence->partySize || - presence->partyMax) { + presence->partyMax || presence->partyPrivacy) { WriteObject party(writer, "party"); WriteOptionalString(writer, "id", presence->partyId); if (presence->partySize && presence->partyMax) { @@ -142,6 +142,11 @@ size_t JsonWriteRichPresenceObj(char* dest, writer.Int(presence->partySize); writer.Int(presence->partyMax); } + + if (presence->partyPrivacy) { + WriteKey(writer, "privacy"); + writer.Int(presence->partyPrivacy); + } } if ((presence->matchSecret && presence->matchSecret[0]) ||