mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-14 11:51:47 +00:00
fix: fix bugs in MPRIS, and improve MPRIS (#1760)
Co-authored-by: JellyBrick <shlee1503@naver.com> Co-authored-by: Totto <32566573+Totto16@users.noreply.github.com>
This commit is contained in:
110
src/plugins/shortcuts/mpris-service.d.ts
vendored
110
src/plugins/shortcuts/mpris-service.d.ts
vendored
@ -4,10 +4,10 @@ declare module '@jellybrick/mpris-service' {
|
||||
import { interface as dbusInterface } from 'dbus-next';
|
||||
|
||||
interface RootInterfaceOptions {
|
||||
identity: string;
|
||||
supportedUriSchemes: string[];
|
||||
supportedMimeTypes: string[];
|
||||
desktopEntry: string;
|
||||
identity?: string;
|
||||
supportedUriSchemes?: string[];
|
||||
supportedMimeTypes?: string[];
|
||||
desktopEntry?: string;
|
||||
}
|
||||
|
||||
export interface Track {
|
||||
@ -35,6 +35,32 @@ declare module '@jellybrick/mpris-service' {
|
||||
'xesam:userRating'?: number;
|
||||
}
|
||||
|
||||
export type PlayBackStatus = 'Playing' | 'Paused' | 'Stopped';
|
||||
|
||||
export type LoopStatus = 'None' | 'Track' | 'Playlist';
|
||||
|
||||
export const PLAYBACK_STATUS_PLAYING: 'Playing';
|
||||
export const PLAYBACK_STATUS_PAUSED: 'Paused';
|
||||
export const PLAYBACK_STATUS_STOPPED: 'Stopped';
|
||||
|
||||
export const LOOP_STATUS_NONE: 'None';
|
||||
export const LOOP_STATUS_TRACK: 'Track';
|
||||
export const LOOP_STATUS_PLAYLIST: 'Playlist';
|
||||
|
||||
export type Interfaces = 'player' | 'trackList' | 'playlists';
|
||||
|
||||
export interface AdditionalPlayerOptions {
|
||||
name: string;
|
||||
supportedInterfaces: Interfaces[];
|
||||
}
|
||||
|
||||
export type PlayerOptions = RootInterfaceOptions & AdditionalPlayerOptions;
|
||||
|
||||
export interface Position {
|
||||
trackId: string;
|
||||
position: number;
|
||||
}
|
||||
|
||||
declare class Player extends EventEmitter {
|
||||
constructor(opts: {
|
||||
name: string;
|
||||
@ -43,18 +69,44 @@ declare module '@jellybrick/mpris-service' {
|
||||
supportedInterfaces?: string[];
|
||||
});
|
||||
|
||||
//RootInterface
|
||||
on(event: 'quit', listener: () => void): this;
|
||||
on(event: 'raise', listener: () => void): this;
|
||||
on(
|
||||
event: 'fullscreen',
|
||||
listener: (fullscreenEnabled: boolean) => void,
|
||||
): this;
|
||||
|
||||
emit(type: string, ...args: unknown[]): unknown;
|
||||
|
||||
name: string;
|
||||
identity: string;
|
||||
fullscreen: boolean;
|
||||
fullscreen?: boolean;
|
||||
supportedUriSchemes: string[];
|
||||
supportedMimeTypes: string[];
|
||||
canQuit: boolean;
|
||||
canRaise: boolean;
|
||||
canSetFullscreen: boolean;
|
||||
canSetFullscreen?: boolean;
|
||||
desktopEntry?: string;
|
||||
hasTrackList: boolean;
|
||||
desktopEntry: string;
|
||||
playbackStatus: string;
|
||||
loopStatus: string;
|
||||
|
||||
// PlayerInterface
|
||||
on(event: 'next', listener: () => void): this;
|
||||
on(event: 'previous', listener: () => void): this;
|
||||
on(event: 'pause', listener: () => void): this;
|
||||
on(event: 'playpause', listener: () => void): this;
|
||||
on(event: 'stop', listener: () => void): this;
|
||||
on(event: 'play', listener: () => void): this;
|
||||
on(event: 'seek', listener: (offset: number) => void): this;
|
||||
on(event: 'open', listener: ({ uri: string }) => void): this;
|
||||
on(event: 'loopStatus', listener: (status: LoopStatus) => void): this;
|
||||
on(event: 'rate', listener: () => void): this;
|
||||
on(event: 'shuffle', listener: (enableShuffle: boolean) => void): this;
|
||||
on(event: 'volume', listener: (newVolume: number) => void): this;
|
||||
on(event: 'position', listener: (position: Position) => void): this;
|
||||
|
||||
playbackStatus: PlayBackStatus;
|
||||
loopStatus: LoopStatus;
|
||||
shuffle: boolean;
|
||||
metadata: Track;
|
||||
volume: number;
|
||||
@ -67,9 +119,40 @@ declare module '@jellybrick/mpris-service' {
|
||||
rate: number;
|
||||
minimumRate: number;
|
||||
maximumRate: number;
|
||||
playlists: unknown[];
|
||||
|
||||
abstract getPosition(): number;
|
||||
|
||||
seeked(position: number): void;
|
||||
|
||||
// TracklistInterface
|
||||
on(event: 'addTrack', listener: () => void): this;
|
||||
on(event: 'removeTrack', listener: () => void): this;
|
||||
on(event: 'goTo', listener: () => void): this;
|
||||
|
||||
tracks: Track[];
|
||||
canEditTracks: boolean;
|
||||
|
||||
on(event: '*', a: unknown[]): this;
|
||||
|
||||
addTrack(track: string): void;
|
||||
|
||||
removeTrack(trackId: string): void;
|
||||
|
||||
// PlaylistsInterface
|
||||
on(event: 'activatePlaylist', listener: () => void): this;
|
||||
|
||||
playlists: Playlist[];
|
||||
activePlaylist: string;
|
||||
|
||||
setPlaylists(playlists: Playlist[]): void;
|
||||
|
||||
setActivePlaylist(playlistId: string): void;
|
||||
|
||||
// Player methods
|
||||
constructor(opts: PlayerOptions);
|
||||
|
||||
on(event: 'error', listener: (error: Error) => void): this;
|
||||
|
||||
init(opts: RootInterfaceOptions): void;
|
||||
|
||||
objectPath(subpath?: string): string;
|
||||
@ -91,13 +174,6 @@ declare module '@jellybrick/mpris-service' {
|
||||
setPlaylists(playlists: Track[]): void;
|
||||
|
||||
setActivePlaylist(playlistId: string): void;
|
||||
|
||||
static PLAYBACK_STATUS_PLAYING: 'Playing';
|
||||
static PLAYBACK_STATUS_PAUSED: 'Paused';
|
||||
static PLAYBACK_STATUS_STOPPED: 'Stopped';
|
||||
static LOOP_STATUS_NONE: 'None';
|
||||
static LOOP_STATUS_TRACK: 'Track';
|
||||
static LOOP_STATUS_PLAYLIST: 'Playlist';
|
||||
}
|
||||
|
||||
interface MprisInterface extends dbusInterface.Interface {
|
||||
|
||||
Reference in New Issue
Block a user