/** * Copyright (c) Double Symmetry GmbH * Commercial use requires a license. See https://rntp.dev/pricing */ import type { PlaybackStateChangedEvent } from './PlaybackStateChanged'; import type { IsPlayingChangedEvent } from './IsPlayingChanged'; import type { MediaItemTransitionEvent } from './MediaItemTransition'; import type { MediaMetadataChangedEvent } from './MediaMetadataChanged'; import type { MetadataReceivedEvent } from './MetadataReceived'; import type { RemotePlayEvent, RemotePauseEvent, RemoteNextEvent, RemotePreviousEvent, RemoteStopEvent, RemoteSeekEvent, RemoteSkipForwardEvent, RemoteSkipBackwardEvent, } from './RemoteControl'; import type { PlaybackErrorEvent } from './PlaybackError'; import type { PlaybackProgressUpdatedEvent } from './PlaybackProgressUpdated'; import type { QueueChangedEvent } from './QueueChanged'; import type { SleepTimerTriggeredEvent } from './SleepTimerTriggered'; export enum Event { PlaybackStateChanged = 'event.playback-state-changed', IsPlayingChanged = 'event.is-playing-changed', MediaItemTransition = 'event.media-item-transition', MediaMetadataChanged = 'event.media-metadata-changed', MetadataReceived = 'event.metadata-received', PlaybackError = 'event.playback-error', PlaybackProgressUpdated = 'event.playback-progress-updated', QueueChanged = 'event.queue-changed', RemotePlay = 'event.remote-play', RemotePause = 'event.remote-pause', RemoteNext = 'event.remote-next', RemotePrevious = 'event.remote-previous', RemoteStop = 'event.remote-stop', RemoteSeek = 'event.remote-seek', RemoteSkipForward = 'event.remote-skip-forward', RemoteSkipBackward = 'event.remote-skip-backward', SleepTimerTriggered = 'event.sleep-timer-triggered', } export type EventPayloadByEvent = { [Event.PlaybackStateChanged]: PlaybackStateChangedEvent; [Event.IsPlayingChanged]: IsPlayingChangedEvent; [Event.MediaItemTransition]: MediaItemTransitionEvent; [Event.MediaMetadataChanged]: MediaMetadataChangedEvent; [Event.MetadataReceived]: MetadataReceivedEvent; [Event.PlaybackError]: PlaybackErrorEvent; [Event.PlaybackProgressUpdated]: PlaybackProgressUpdatedEvent; [Event.QueueChanged]: QueueChangedEvent; [Event.RemotePlay]: RemotePlayEvent; [Event.RemotePause]: RemotePauseEvent; [Event.RemoteNext]: RemoteNextEvent; [Event.RemotePrevious]: RemotePreviousEvent; [Event.RemoteStop]: RemoteStopEvent; [Event.RemoteSeek]: RemoteSeekEvent; [Event.RemoteSkipForward]: RemoteSkipForwardEvent; [Event.RemoteSkipBackward]: RemoteSkipBackwardEvent; [Event.SleepTimerTriggered]: SleepTimerTriggeredEvent; }; type Simplify = { [KeyType in keyof T]: T[KeyType] } & {}; export type EventPayloadByEventWithType = { [K in keyof EventPayloadByEvent]: EventPayloadByEvent[K] extends never ? { type: K } : Simplify; }; /** Event payloads with a `type` field (Android background handler). */ export type BackgroundEvent = EventPayloadByEventWithType[keyof EventPayloadByEventWithType]; export * from './PlaybackStateChanged'; export * from './IsPlayingChanged'; export * from './MediaItemTransition'; export * from './MediaMetadataChanged'; export * from './MetadataReceived'; export * from './RemoteControl'; export * from './PlaybackError'; export * from './PlaybackProgressUpdated'; export * from './QueueChanged'; export * from './SleepTimerTriggered';