diff --git a/src/app/browser/main/discord.tsx b/src/app/browser/main/discord.tsx index 342e445..e43801c 100644 --- a/src/app/browser/main/discord.tsx +++ b/src/app/browser/main/discord.tsx @@ -17,7 +17,7 @@ export default function DiscordPresenceSource(props: { return ipc.showDiscordModal()}> {renderDiscordPresenceSource(props.source)} - {props.presence && props.user ? : null} + {props.presence || props.user ? : null} ; } @@ -78,26 +78,35 @@ function DiscordPresenceInactive() { } function DiscordPresence(props: { - presence: DiscordPresence; - user: User; + presence: DiscordPresence | null; + user: User | null; }) { - const large_image_url = props.presence.activity.largeImageKey?.match(/^\d{16}$/) ? + const large_image_url = props.presence ? props.presence.activity.largeImageKey?.match(/^\d{16}$/) ? 'https://cdn.discordapp.com/app-assets/' + props.presence.id + '/' + props.presence.activity.largeImageKey + '.png' : - props.presence.activity.largeImageKey; - const user_image_url = 'https://cdn.discordapp.com/avatars/' + props.user.id + '/' + props.user.avatar + '.png'; + props.presence.activity.largeImageKey : undefined; - return <> - + const user_image_url = props.user ? + props.user.avatar ? 'https://cdn.discordapp.com/avatars/' + props.user.id + '/' + props.user.avatar + '.png' : + !props.user.discriminator || props.user.discriminator === '0' ? + 'https://cdn.discordapp.com/embed/avatars/' + ((parseInt(props.user.id) >> 22) % 5) + '.png' : + 'https://cdn.discordapp.com/embed/avatars/' + (parseInt(props.user.discriminator) % 5) + '.png' : undefined; + + return + {props.presence ? Playing - + : null} - + {props.user ? - {props.user.username}#{props.user.discriminator} - - ; + + {props.user.username}#{props.user.discriminator} + + : + Not connected to Discord + } + ; } const styles = StyleSheet.create({ @@ -125,8 +134,12 @@ const styles = StyleSheet.create({ userSelect: 'all', }, + discordPresenceContainer: { + marginTop: 2, + }, + discordPresence: { - marginTop: 12, + marginTop: 10, flexDirection: 'row', alignItems: 'center', }, @@ -150,4 +163,7 @@ const styles = StyleSheet.create({ discordUserText: { color: TEXT_COLOUR_DARK, }, + discordUserDiscriminator: { + opacity: 0.7, + }, }); diff --git a/src/app/main/monitor.ts b/src/app/main/monitor.ts index 0f637d7..f483d8b 100644 --- a/src/app/main/monitor.ts +++ b/src/app/main/monitor.ts @@ -42,6 +42,7 @@ export class PresenceMonitorManager { i.presence_user = null; i.user_notifications = false; i.friend_notifications = false; + i.discord_preconnect = true; i.discord.onUpdateActivity = (presence: DiscordPresence | null) => { this.app.store.emit('update-discord-presence', presence ? {...presence, config: undefined} : null); @@ -88,6 +89,7 @@ export class PresenceMonitorManager { const i = new EmbeddedProxyPresenceMonitor(presence_url); i.notifications = this.notifications; + i.discord_preconnect = true; i.discord.onUpdateActivity = (presence: DiscordPresence | null) => { this.app.store.emit('update-discord-presence', presence ? {...presence, config: undefined} : null); diff --git a/src/common/presence.ts b/src/common/presence.ts index bdc975c..20cecae 100644 --- a/src/common/presence.ts +++ b/src/common/presence.ts @@ -79,8 +79,9 @@ class ZncDiscordPresenceClient { if (this.m.presence_enabled && this.m.discord_preconnect) { if (this.rpc) { - debugDiscord('No presence but Discord preconnect enabled - clearing Discord activity'); + if (this.title) debugDiscord('No presence but Discord preconnect enabled - clearing Discord activity'); this.setActivity(this.rpc.id); + this.title = null; } else { debugDiscord('No presence but Discord preconnect enabled - connecting'); const discordpresence = getInactiveDiscordPresence(PresenceState.OFFLINE, 0); @@ -235,7 +236,8 @@ class ZncDiscordPresenceClient { if (!this.rpc) { this.connect(client_id, this.m.discord_client_filter); } else { - this.rpc.client.setActivity(typeof activity === 'string' ? undefined : activity.activity); + if (typeof activity === 'string') this.rpc.client.clearActivity(); + else this.rpc.client.setActivity(activity.activity); } }