Skip to content

Commit b9b5699

Browse files
authored
Merge pull request #1 from znvjder/master
Added buttons to discord-rpc
2 parents 78882fb + 187e148 commit b9b5699

File tree

2 files changed

+37
-7
lines changed

2 files changed

+37
-7
lines changed

include/discord_rpc.h

+6
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323
extern "C" {
2424
#endif
2525

26+
typedef struct DiscordButton {
27+
const char* label; /* TODO: max 128 bytes? */
28+
const char* url; /* TODO: would be reasonable to expect it to be >=128 bytes? */
29+
} DiscordButton;
30+
2631
typedef struct DiscordRichPresence {
2732
const char* state; /* max 128 bytes */
2833
const char* details; /* max 128 bytes */
@@ -40,6 +45,7 @@ typedef struct DiscordRichPresence {
4045
const char* joinSecret; /* max 128 bytes */
4146
const char* spectateSecret; /* max 128 bytes */
4247
int8_t instance;
48+
const DiscordButton* buttons;
4349
} DiscordRichPresence;
4450

4551
typedef struct DiscordUser {

src/serialization.cpp

+31-7
Original file line numberDiff line numberDiff line change
@@ -149,17 +149,41 @@ size_t JsonWriteRichPresenceObj(char* dest,
149149
}
150150
}
151151

152-
if ((presence->matchSecret && presence->matchSecret[0]) ||
153-
(presence->joinSecret && presence->joinSecret[0]) ||
154-
(presence->spectateSecret && presence->spectateSecret[0])) {
155-
WriteObject secrets(writer, "secrets");
156-
WriteOptionalString(writer, "match", presence->matchSecret);
157-
WriteOptionalString(writer, "join", presence->joinSecret);
158-
WriteOptionalString(writer, "spectate", presence->spectateSecret);
152+
// Send secrets only when buttons aren't set
153+
if (!presence->buttons) {
154+
if ((presence->matchSecret && presence->matchSecret[0]) ||
155+
(presence->joinSecret && presence->joinSecret[0]) ||
156+
(presence->spectateSecret && presence->spectateSecret[0])) {
157+
WriteObject secrets(writer, "secrets");
158+
WriteOptionalString(writer, "match", presence->matchSecret);
159+
WriteOptionalString(writer, "join", presence->joinSecret);
160+
WriteOptionalString(writer, "spectate", presence->spectateSecret);
161+
}
159162
}
160163

161164
writer.Key("instance");
162165
writer.Bool(presence->instance != 0);
166+
167+
if (presence->buttons) {
168+
const auto btns = presence->buttons;
169+
WriteArray buttons(writer, "buttons");
170+
171+
if (btns[0].label[0]) {
172+
WriteObject button0(writer);
173+
WriteKey(writer, "url");
174+
writer.String(btns[0].url);
175+
WriteKey(writer, "label");
176+
writer.String(btns[0].label);
177+
}
178+
179+
if (btns[1].label[0]) {
180+
WriteObject button1(writer);
181+
WriteKey(writer, "url");
182+
writer.String(btns[1].url);
183+
WriteKey(writer, "label");
184+
writer.String(btns[1].label);
185+
}
186+
}
163187
}
164188
}
165189
}

0 commit comments

Comments
 (0)