AppleMusicRichPresence: add status display type (#3669)
Co-authored-by: V <vendicated@riseup.net>
This commit is contained in:
parent
80872f4ab9
commit
edd68fe08e
7 changed files with 104 additions and 120 deletions
30
packages/discord-types/enums/activity.ts
Normal file
30
packages/discord-types/enums/activity.ts
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
export const enum ActivityType {
|
||||||
|
PLAYING = 0,
|
||||||
|
STREAMING = 1,
|
||||||
|
LISTENING = 2,
|
||||||
|
WATCHING = 3,
|
||||||
|
CUSTOM_STATUS = 4,
|
||||||
|
COMPETING = 5,
|
||||||
|
HANG_STATUS = 6
|
||||||
|
}
|
||||||
|
|
||||||
|
export const enum ActivityFlags {
|
||||||
|
INSTANCE = 1 << 0,
|
||||||
|
JOIN = 1 << 1,
|
||||||
|
/** @deprecated */
|
||||||
|
SPECTATE = 1 << 2,
|
||||||
|
/** @deprecated */
|
||||||
|
JOIN_REQUEST = 1 << 3,
|
||||||
|
SYNC = 1 << 4,
|
||||||
|
PLAY = 1 << 5,
|
||||||
|
PARTY_PRIVACY_FRIENDS = 1 << 6,
|
||||||
|
PARTY_PRIVACY_VOICE_CHANNEL = 1 << 7,
|
||||||
|
EMBEDDED = 1 << 8,
|
||||||
|
CONTEXTLESS = 1 << 9
|
||||||
|
}
|
||||||
|
|
||||||
|
export const enum ActivityStatusDisplayType {
|
||||||
|
NAME = 0,
|
||||||
|
STATE = 1,
|
||||||
|
DETAILS = 2
|
||||||
|
}
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
export * from "./activity";
|
||||||
export * from "./channel";
|
export * from "./channel";
|
||||||
export * from "./commands";
|
export * from "./commands";
|
||||||
export * from "./messages";
|
export * from "./messages";
|
||||||
|
|
|
||||||
36
packages/discord-types/src/common/Activity.d.ts
vendored
Normal file
36
packages/discord-types/src/common/Activity.d.ts
vendored
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
import { ActivityFlags, ActivityStatusDisplayType, ActivityType } from "../../enums";
|
||||||
|
|
||||||
|
export interface ActivityAssets {
|
||||||
|
large_image?: string;
|
||||||
|
large_text?: string;
|
||||||
|
small_image?: string;
|
||||||
|
small_text?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ActivityButton {
|
||||||
|
label: string;
|
||||||
|
url: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Activity {
|
||||||
|
name: string;
|
||||||
|
application_id: string;
|
||||||
|
type: ActivityType;
|
||||||
|
state?: string;
|
||||||
|
state_url?: string;
|
||||||
|
details?: string;
|
||||||
|
details_url?: string;
|
||||||
|
url?: string;
|
||||||
|
flags: ActivityFlags;
|
||||||
|
status_display_type?: ActivityStatusDisplayType;
|
||||||
|
timestamps?: {
|
||||||
|
start?: number;
|
||||||
|
end?: number;
|
||||||
|
};
|
||||||
|
assets?: ActivityAssets;
|
||||||
|
buttons?: string[];
|
||||||
|
metadata?: {
|
||||||
|
button_urls?: Array<string>;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
1
packages/discord-types/src/common/index.d.ts
vendored
1
packages/discord-types/src/common/index.d.ts
vendored
|
|
@ -1,3 +1,4 @@
|
||||||
|
export * from "./Activity";
|
||||||
export * from "./Application";
|
export * from "./Application";
|
||||||
export * from "./Channel";
|
export * from "./Channel";
|
||||||
export * from "./Guild";
|
export * from "./Guild";
|
||||||
|
|
|
||||||
|
|
@ -7,49 +7,12 @@
|
||||||
import { definePluginSettings } from "@api/Settings";
|
import { definePluginSettings } from "@api/Settings";
|
||||||
import { Devs, IS_MAC } from "@utils/constants";
|
import { Devs, IS_MAC } from "@utils/constants";
|
||||||
import definePlugin, { OptionType, PluginNative, ReporterTestable } from "@utils/types";
|
import definePlugin, { OptionType, PluginNative, ReporterTestable } from "@utils/types";
|
||||||
|
import { Activity, ActivityAssets, ActivityButton } from "@vencord/discord-types";
|
||||||
|
import { ActivityFlags, ActivityStatusDisplayType, ActivityType } from "@vencord/discord-types/enums";
|
||||||
import { ApplicationAssetUtils, FluxDispatcher, Forms } from "@webpack/common";
|
import { ApplicationAssetUtils, FluxDispatcher, Forms } from "@webpack/common";
|
||||||
|
|
||||||
const Native = VencordNative.pluginHelpers.AppleMusicRichPresence as PluginNative<typeof import("./native")>;
|
const Native = VencordNative.pluginHelpers.AppleMusicRichPresence as PluginNative<typeof import("./native")>;
|
||||||
|
|
||||||
interface ActivityAssets {
|
|
||||||
large_image?: string;
|
|
||||||
large_text?: string;
|
|
||||||
small_image?: string;
|
|
||||||
small_text?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ActivityButton {
|
|
||||||
label: string;
|
|
||||||
url: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Activity {
|
|
||||||
state?: string;
|
|
||||||
details?: string;
|
|
||||||
timestamps?: {
|
|
||||||
start?: number;
|
|
||||||
end?: number;
|
|
||||||
};
|
|
||||||
assets?: ActivityAssets;
|
|
||||||
buttons?: Array<string>;
|
|
||||||
name: string;
|
|
||||||
application_id: string;
|
|
||||||
metadata?: {
|
|
||||||
button_urls?: Array<string>;
|
|
||||||
};
|
|
||||||
type: number;
|
|
||||||
flags: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
const enum ActivityType {
|
|
||||||
PLAYING = 0,
|
|
||||||
LISTENING = 2,
|
|
||||||
}
|
|
||||||
|
|
||||||
const enum ActivityFlag {
|
|
||||||
INSTANCE = 1 << 0,
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface TrackData {
|
export interface TrackData {
|
||||||
name: string;
|
name: string;
|
||||||
album?: string;
|
album?: string;
|
||||||
|
|
@ -90,6 +53,25 @@ const settings = definePluginSettings({
|
||||||
{ label: "Listening", value: ActivityType.LISTENING }
|
{ label: "Listening", value: ActivityType.LISTENING }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
statusDisplayType: {
|
||||||
|
description: "Show the track / artist name in the member list",
|
||||||
|
type: OptionType.SELECT,
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
label: "Don't show (shows generic listening message)",
|
||||||
|
value: "off",
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Show artist name",
|
||||||
|
value: "artist"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Show track name",
|
||||||
|
value: "track"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
refreshInterval: {
|
refreshInterval: {
|
||||||
type: OptionType.SLIDER,
|
type: OptionType.SLIDER,
|
||||||
description: "The interval between activity refreshes (seconds)",
|
description: "The interval between activity refreshes (seconds)",
|
||||||
|
|
@ -258,7 +240,12 @@ export default definePlugin({
|
||||||
metadata: !isRadio && buttons.length ? { button_urls: buttons.map(v => v.url) } : undefined,
|
metadata: !isRadio && buttons.length ? { button_urls: buttons.map(v => v.url) } : undefined,
|
||||||
|
|
||||||
type: settings.store.activityType,
|
type: settings.store.activityType,
|
||||||
flags: ActivityFlag.INSTANCE,
|
status_display_type: {
|
||||||
|
"off": ActivityStatusDisplayType.NAME,
|
||||||
|
"artist": ActivityStatusDisplayType.STATE,
|
||||||
|
"track": ActivityStatusDisplayType.DETAILS
|
||||||
|
}[settings.store.statusDisplayType],
|
||||||
|
flags: ActivityFlags.INSTANCE,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,8 @@ import { Margins } from "@utils/margins";
|
||||||
import { classes } from "@utils/misc";
|
import { classes } from "@utils/misc";
|
||||||
import { useAwaiter } from "@utils/react";
|
import { useAwaiter } from "@utils/react";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
|
import { Activity } from "@vencord/discord-types";
|
||||||
|
import { ActivityType } from "@vencord/discord-types/enums";
|
||||||
import { findByCodeLazy, findComponentByCodeLazy } from "@webpack";
|
import { findByCodeLazy, findComponentByCodeLazy } from "@webpack";
|
||||||
import { ApplicationAssetUtils, Button, FluxDispatcher, Forms, React, UserStore } from "@webpack/common";
|
import { ApplicationAssetUtils, Button, FluxDispatcher, Forms, React, UserStore } from "@webpack/common";
|
||||||
|
|
||||||
|
|
@ -39,41 +41,7 @@ async function getApplicationAsset(key: string): Promise<string> {
|
||||||
return (await ApplicationAssetUtils.fetchAssetIds(settings.store.appID!, [key]))[0];
|
return (await ApplicationAssetUtils.fetchAssetIds(settings.store.appID!, [key]))[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ActivityAssets {
|
export const enum TimestampMode {
|
||||||
large_image?: string;
|
|
||||||
large_text?: string;
|
|
||||||
small_image?: string;
|
|
||||||
small_text?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Activity {
|
|
||||||
state?: string;
|
|
||||||
details?: string;
|
|
||||||
timestamps?: {
|
|
||||||
start?: number;
|
|
||||||
end?: number;
|
|
||||||
};
|
|
||||||
assets?: ActivityAssets;
|
|
||||||
buttons?: Array<string>;
|
|
||||||
name: string;
|
|
||||||
application_id: string;
|
|
||||||
metadata?: {
|
|
||||||
button_urls?: Array<string>;
|
|
||||||
};
|
|
||||||
type: ActivityType;
|
|
||||||
url?: string;
|
|
||||||
flags: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
const enum ActivityType {
|
|
||||||
PLAYING = 0,
|
|
||||||
STREAMING = 1,
|
|
||||||
LISTENING = 2,
|
|
||||||
WATCHING = 3,
|
|
||||||
COMPETING = 5
|
|
||||||
}
|
|
||||||
|
|
||||||
const enum TimestampMode {
|
|
||||||
NONE,
|
NONE,
|
||||||
NOW,
|
NOW,
|
||||||
TIME,
|
TIME,
|
||||||
|
|
|
||||||
|
|
@ -21,40 +21,11 @@ import { Link } from "@components/Link";
|
||||||
import { Devs } from "@utils/constants";
|
import { Devs } from "@utils/constants";
|
||||||
import { Logger } from "@utils/Logger";
|
import { Logger } from "@utils/Logger";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
|
import { Activity, ActivityAssets, ActivityButton } from "@vencord/discord-types";
|
||||||
|
import { ActivityFlags, ActivityStatusDisplayType, ActivityType } from "@vencord/discord-types/enums";
|
||||||
import { findByPropsLazy } from "@webpack";
|
import { findByPropsLazy } from "@webpack";
|
||||||
import { ApplicationAssetUtils, FluxDispatcher, Forms } from "@webpack/common";
|
import { ApplicationAssetUtils, FluxDispatcher, Forms } from "@webpack/common";
|
||||||
|
|
||||||
interface ActivityAssets {
|
|
||||||
large_image?: string;
|
|
||||||
large_text?: string;
|
|
||||||
small_image?: string;
|
|
||||||
small_text?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
interface ActivityButton {
|
|
||||||
label: string;
|
|
||||||
url: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Activity {
|
|
||||||
state: string;
|
|
||||||
details?: string;
|
|
||||||
timestamps?: {
|
|
||||||
start?: number;
|
|
||||||
};
|
|
||||||
assets?: ActivityAssets;
|
|
||||||
buttons?: Array<string>;
|
|
||||||
name: string;
|
|
||||||
application_id: string;
|
|
||||||
status_display_type?: number;
|
|
||||||
metadata?: {
|
|
||||||
button_urls?: Array<string>;
|
|
||||||
};
|
|
||||||
type: number;
|
|
||||||
flags: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface TrackData {
|
interface TrackData {
|
||||||
name: string;
|
name: string;
|
||||||
album: string;
|
album: string;
|
||||||
|
|
@ -63,16 +34,6 @@ interface TrackData {
|
||||||
imageUrl?: string;
|
imageUrl?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
// only relevant enum values
|
|
||||||
const enum ActivityType {
|
|
||||||
PLAYING = 0,
|
|
||||||
LISTENING = 2,
|
|
||||||
}
|
|
||||||
|
|
||||||
const enum ActivityFlag {
|
|
||||||
INSTANCE = 1 << 0,
|
|
||||||
}
|
|
||||||
|
|
||||||
const enum NameFormat {
|
const enum NameFormat {
|
||||||
StatusName = "status-name",
|
StatusName = "status-name",
|
||||||
ArtistFirst = "artist-first",
|
ArtistFirst = "artist-first",
|
||||||
|
|
@ -367,9 +328,9 @@ export default definePlugin({
|
||||||
details: trackData.name,
|
details: trackData.name,
|
||||||
state: trackData.artist,
|
state: trackData.artist,
|
||||||
status_display_type: {
|
status_display_type: {
|
||||||
"off": 0,
|
"off": ActivityStatusDisplayType.NAME,
|
||||||
"artist": 1,
|
"artist": ActivityStatusDisplayType.STATE,
|
||||||
"track": 2
|
"track": ActivityStatusDisplayType.DETAILS
|
||||||
}[settings.store.statusDisplayType],
|
}[settings.store.statusDisplayType],
|
||||||
assets,
|
assets,
|
||||||
|
|
||||||
|
|
@ -379,7 +340,7 @@ export default definePlugin({
|
||||||
},
|
},
|
||||||
|
|
||||||
type: settings.store.useListeningStatus ? ActivityType.LISTENING : ActivityType.PLAYING,
|
type: settings.store.useListeningStatus ? ActivityType.LISTENING : ActivityType.PLAYING,
|
||||||
flags: ActivityFlag.INSTANCE,
|
flags: ActivityFlags.INSTANCE,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue