Skip to content

Commit 8e8aa89

Browse files
authored
Merge pull request #170 from Inrixia/master
Update dev
2 parents 89b1235 + dc0e30a commit 8e8aa89

4 files changed

Lines changed: 63 additions & 21 deletions

File tree

plugins/DiscordRPC/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@
99
},
1010
"exports": "./src/index.ts",
1111
"dependencies": {
12-
"@xhayper/discord-rpc": "^1.2.1"
12+
"@xhayper/discord-rpc": "^1.3.0"
1313
}
1414
}

plugins/DiscordRPC/src/Settings.tsx

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { LunaSettings, LunaSwitchSetting } from "@luna/ui";
1+
import { LunaSelectItem, LunaSelectSetting, LunaSettings, LunaSwitchSetting } from "@luna/ui";
22

33
import { ReactiveStore } from "@luna/core";
44

@@ -9,11 +9,15 @@ import { updateActivity } from "./updateActivity";
99
export const settings = await ReactiveStore.getPluginStorage("DiscordRPC", {
1010
displayOnPause: true,
1111
displayArtistIcon: true,
12+
displayPlaylistButton: true,
13+
status: 1,
1214
});
1315

1416
export const Settings = () => {
1517
const [displayOnPause, setDisplayOnPause] = React.useState(settings.displayOnPause);
1618
const [displayArtistIcon, setDisplayArtistIcon] = React.useState(settings.displayArtistIcon);
19+
const [displayPlaylistButton, setDisplayPlaylistButton] = React.useState(settings.displayPlaylistButton)
20+
const [status, setStatus] = React.useState(settings.status);
1721

1822
return (
1923
<LunaSettings>
@@ -41,6 +45,28 @@ export const Settings = () => {
4145
.catch(trace.err.withContext("Failed to set activity"));
4246
}}
4347
/>
48+
<LunaSwitchSetting
49+
title="Display playlist button"
50+
desc="When playing a playlist a button appears for it in the activity"
51+
tooltip="Display playlist button"
52+
checked={displayPlaylistButton}
53+
onChange={(_, checked) => {
54+
setDisplayPlaylistButton((settings.displayPlaylistButton = checked));
55+
updateActivity()
56+
.then(() => (errSignal!._ = undefined))
57+
.catch(trace.err.withContext("Failed to set activity"));
58+
}}
59+
/>
60+
<LunaSelectSetting
61+
title="Status text"
62+
desc="What text that you're 'Listening to' in your Discord status"
63+
value={status}
64+
onChange={(e) => setStatus((settings.status = parseInt(e.target.value)))}
65+
>
66+
<LunaSelectItem value="0" children="Listening to TIDAL" />
67+
<LunaSelectItem value="1" children="Listening to [Artist Name]" />
68+
<LunaSelectItem value="2" children="Listening to [Track Name]" />
69+
</LunaSelectSetting>
4470
</LunaSettings>
4571
);
4672
};

plugins/DiscordRPC/src/updateActivity.ts

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { asyncDebounce } from "@inrixia/helpers";
2-
import { MediaItem, PlayState } from "@luna/lib";
2+
import { MediaItem, PlayState, redux } from "@luna/lib";
33

44
import type { SetActivity } from "@xhayper/discord-rpc";
55
import { setActivity } from "./discord.native";
@@ -18,28 +18,48 @@ export const updateActivity = asyncDebounce(async (mediaItem?: MediaItem) => {
1818
mediaItem ??= await MediaItem.fromPlaybackContext();
1919
if (mediaItem === undefined) return;
2020

21+
const { sourceUrl, sourceEntityType } = redux.store.getState().playQueue;
22+
2123
const activity: SetActivity = { type: 2 }; // Listening type
2224

25+
const trackUrl = `https://tidal.com/browse/${mediaItem.tidalItem.contentType}/${mediaItem.id}?u`
26+
const trackSourceUrl = `https://tidal.com/browse${sourceUrl}`;
27+
2328
activity.buttons = [
2429
{
25-
url: `https://tidal.com/browse/${mediaItem.tidalItem.contentType}/${mediaItem.id}?u`,
30+
url: trackUrl,
2631
label: "Play Song",
27-
},
32+
}
2833
];
2934

35+
if (sourceEntityType === "playlist" && settings.displayPlaylistButton) {
36+
activity.buttons.push({
37+
url: trackSourceUrl,
38+
label: "Playlist",
39+
});
40+
}
41+
42+
const artist = await mediaItem.artist();
43+
const artistUrl = `https://tidal.com/browse/artist/${artist?.id}?u`;
44+
45+
// Status text
46+
activity.statusDisplayType = settings.status;
47+
3048
// Title
3149
activity.details = await mediaItem.title().then(fmtStr);
50+
activity.detailsUrl = trackUrl;
3251
// Artists
3352
const artistNames = await MediaItem.artistNames(await mediaItem.artists());
3453
activity.state = fmtStr(artistNames.join(", ")) ?? "Unknown Artist";
54+
activity.stateUrl = artistUrl;
3555

3656
// Pause indicator
3757
if (PlayState.playing) {
3858
// Small Artist image
3959
if (settings.displayArtistIcon) {
40-
const artist = await mediaItem.artist();
4160
activity.smallImageKey = artist?.coverUrl("320");
4261
activity.smallImageText = fmtStr(artist?.name);
62+
activity.smallImageUrl = artistUrl;
4363
}
4464

4565
// Playback/Time
@@ -58,6 +78,7 @@ export const updateActivity = asyncDebounce(async (mediaItem?: MediaItem) => {
5878
if (album) {
5979
activity.largeImageKey = album.coverUrl();
6080
activity.largeImageText = await album.title().then(fmtStr);
81+
activity.largeImageUrl = `https://tidal.com/browse/album/${album.id}?u`;
6182
}
6283

6384
await setActivity(activity);

pnpm-lock.yaml

Lines changed: 10 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)