Skip to content

Commit

Permalink
AppleMusicRichPresence: fix formatting when listening to radio (Vendi…
Browse files Browse the repository at this point in the history
…cated#2869)

Co-authored-by: Ryan Cao <70191398+ryanccn@users.noreply.github.com>
Co-authored-by: v <vendicated@riseup.net>
  • Loading branch information
3 people authored and Autumnlight02 committed Sep 27, 2024
1 parent a31e28c commit 96e09e4
Showing 1 changed file with 16 additions and 14 deletions.
30 changes: 16 additions & 14 deletions src/plugins/appleMusic.desktop/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ interface ActivityButton {
}

interface Activity {
state: string;
state?: string;
details?: string;
timestamps?: {
start?: number;
Expand Down Expand Up @@ -52,17 +52,17 @@ const enum ActivityFlag {

export interface TrackData {
name: string;
album: string;
artist: string;
album?: string;
artist?: string;

appleMusicLink?: string;
songLink?: string;

albumArtwork?: string;
artistArtwork?: string;

playerPosition: number;
duration: number;
playerPosition?: number;
duration?: number;
}

const enum AssetImageType {
Expand Down Expand Up @@ -155,8 +155,8 @@ const settings = definePluginSettings({
function customFormat(formatStr: string, data: TrackData) {
return formatStr
.replaceAll("{name}", data.name)
.replaceAll("{album}", data.album)
.replaceAll("{artist}", data.artist);
.replaceAll("{album}", data.album ?? "")
.replaceAll("{artist}", data.artist ?? "");
}

function getImageAsset(type: AssetImageType, data: TrackData) {
Expand Down Expand Up @@ -212,14 +212,16 @@ export default definePlugin({

const assets: ActivityAssets = {};

const isRadio = Number.isNaN(trackData.duration) && (trackData.playerPosition === 0);

if (settings.store.largeImageType !== AssetImageType.Disabled) {
assets.large_image = largeImageAsset;
assets.large_text = customFormat(settings.store.largeTextString, trackData);
if (!isRadio) assets.large_text = customFormat(settings.store.largeTextString, trackData);
}

if (settings.store.smallImageType !== AssetImageType.Disabled) {
assets.small_image = smallImageAsset;
assets.small_text = customFormat(settings.store.smallTextString, trackData);
if (!isRadio) assets.small_text = customFormat(settings.store.smallTextString, trackData);
}

const buttons: ActivityButton[] = [];
Expand All @@ -243,17 +245,17 @@ export default definePlugin({

name: customFormat(settings.store.nameString, trackData),
details: customFormat(settings.store.detailsString, trackData),
state: customFormat(settings.store.stateString, trackData),
state: isRadio ? undefined : customFormat(settings.store.stateString, trackData),

timestamps: (settings.store.enableTimestamps ? {
timestamps: (trackData.playerPosition && trackData.duration && settings.store.enableTimestamps) ? {
start: Date.now() - (trackData.playerPosition * 1000),
end: Date.now() - (trackData.playerPosition * 1000) + (trackData.duration * 1000),
} : undefined),
} : undefined,

assets,

buttons: buttons.length ? buttons.map(v => v.label) : undefined,
metadata: { button_urls: buttons.map(v => v.url) || undefined, },
buttons: !isRadio && buttons.length ? buttons.map(v => v.label) : undefined,
metadata: !isRadio && buttons.length ? { button_urls: buttons.map(v => v.url) } : undefined,

type: settings.store.activityType,
flags: ActivityFlag.INSTANCE,
Expand Down

0 comments on commit 96e09e4

Please sign in to comment.