{"version":3,"file":"index.cjs","names":["PLAYBACK_STATUS_PLAYING","PLAYBACK_STATUS_PAUSED","PLAYBACK_STATUS_STOPPED","LOOP_STATUS_NONE","LOOP_STATUS_TRACK","LOOP_STATUS_PLAYLIST","playbackStatuses","loopStatuses","isLoopStatusValid","value","includes","isPlaybackStatusValid","loggingEnabled","process","env","MPRIS_SERVICE_DEBUG","undefined","debug","message","console","log","warn","Variant","warn","guessMetadataSignature","key","value","Array","isArray","every","v","String","metadataToPlain","metadataVariant","metadataPlain","k","Object","keys","undefined","metadataToDbus","plain","signature","emptyPlaylist","playlistToDbus","playlist","Id","Name","Icon","playlistToPlain","wire","interface","dbusInterface","deepEqual","isLoopStatusValid","isPlaybackStatusValid","types","warn","Interface","settableEvent","Fullscreen","Rate","Shuffle","Volume","LoopStatus","MprisInterface","_setPropertyInternal","property","valueDbus","player","emit","setProperty","valuePlain","metadataToDbus","playlistToDbus","emptyPlaylist","filter","t","map","Reflect","get","set","String","emitPropertiesChanged","name","interface","dbusInterface","MprisInterface","property","method","ACCESS_READ","signature","access","RootInterface","CanQuit","_CanQuit","Fullscreen","_Fullscreen","value","_setPropertyInternal","CanSetFullscreen","_CanSetFullscreen","CanRaise","_CanRaise","HasTrackList","_HasTrackList","Identity","_Identity","DesktopEntry","_DesktopEntry","SupportedUriSchemes","_SupportedUriSchemes","SupportedMimeTypes","_SupportedMimeTypes","Raise","player","emit","Quit","opts","identity","undefined","supportedUriSchemes","supportedMimeTypes","desktopEntry","DBusError","interface","dbusInterface","isLoopStatusValid","isPlaybackStatusValid","LOOP_STATUS_NONE","PLAYBACK_STATUS_STOPPED","MprisInterface","property","method","signal","signature","access","ACCESS_READ","inSignature","PlayerInterface","CanControl","_CanControl","CanPause","_CanPause","CanPlay","_CanPlay","CanSeek","_CanSeek","CanGoNext","_CanGoNext","CanGoPrevious","_CanGoPrevious","Metadata","_Metadata","MaximumRate","_MaximumRate","MinimumRate","_MinimumRate","Rate","_Rate","value","_setPropertyInternal","Shuffle","_Shuffle","Volume","_Volume","Position","playerPosition","player","getPosition","position","Math","floor","isNaN","err","message","LoopStatus","_LoopStatus","PlaybackStatus","_PlaybackStatus","Next","emit","Previous","Pause","PlayPause","Stop","Play","Seek","offset","Number","SetPosition","trackId","OpenUri","uri","Seeked","interface","dbusInterface","MprisInterface","types","property","method","signal","ACCESS_READ","signature","access","inSignature","outSignature","PlaylistsInterface","PlaylistCount","_PlaylistCount","Orderings","ActivePlaylist","_ActivePlaylist","setActivePlaylistId","playlistId","i","player","getPlaylistIndex","setProperty","playlists","ActivatePlaylist","emit","GetPlaylists","index","maxCount","order","reverseOrder","result","sort","a","b","ret","Name","slice","map","p","playlistToDbus","reverse","PlaylistChanged","playlist","emptyPlaylist","interface","dbusInterface","MprisInterface","types","property","method","signal","ACCESS_READ","signature","access","inSignature","outSignature","TracklistInterface","setTracks","tracksPlain","setProperty","Tracks","_Tracks","CanEditTracks","_CanEditTracks","GetTracksMetadata","trackIds","player","tracks","filter","t","some","id","map","metadataToDbus","AddTrack","uri","afterTrack","setAsCurrent","emit","RemoveTrack","trackId","GoTo","TrackListReplaced","replacedPlain","TrackAdded","metadata","TrackRemoved","path","TrackMetadataChanged","EventEmitter","NameFlag","RequestNameReply","sessionBus","validators","constants","PlayerInterface","PlaylistsInterface","RootInterface","TracklistInterface","types","MPRIS_PATH","lcfirst","str","charAt","toLowerCase","substring","Player","init","opts","serviceName","name","assertBusNameValid","_bus","on","err","emit","Error","String","interfaces","supportedInterfaces","indexOf","iface","Object","values","undefined","export","reply","requestName","DO_NOT_QUEUE","EXISTS","process","pid","objectPath","subpath","path","getPosition","seeked","position","seekTo","Math","floor","isNaN","player","Seeked","getTrackIndex","trackId","i","tracks","length","track","getTrack","addTrack","push","tracklist","setTracks","afterTrack","previous","TrackAdded","removeTrack","splice","TrackRemoved","getPlaylistIndex","playlistId","playlists","playlist","Id","setPlaylists","playlistCount","forEach","PlaylistChanged","setActivePlaylist","setActivePlaylistId","options","_tracks","catch","PLAYBACK_STATUS_PLAYING","PLAYBACK_STATUS_PAUSED","PLAYBACK_STATUS_STOPPED","LOOP_STATUS_NONE","LOOP_STATUS_TRACK","LOOP_STATUS_PLAYLIST","root","eventedProps","defineProperty","get","set","value","TrackListReplaced","enumerable","configurable","localName","Reflect","playlistToPlain","metadataToPlain","setProperty","props","prop","Player"],"sources":["../src/constants.ts","../src/logging.ts","../src/interfaces/types.ts","../src/interfaces/mpris-interface.ts","../src/interfaces/root.ts","../src/interfaces/player.ts","../src/interfaces/playlists.ts","../src/interfaces/tracklist.ts","../src/player.ts","../src/index.ts"],"sourcesContent":["import type { LoopStatus, PlayBackStatus } from '@/types';\n\nexport const PLAYBACK_STATUS_PLAYING: PlayBackStatus = 'Playing';\nexport const PLAYBACK_STATUS_PAUSED: PlayBackStatus = 'Paused';\nexport const PLAYBACK_STATUS_STOPPED: PlayBackStatus = 'Stopped';\n\nexport const LOOP_STATUS_NONE: LoopStatus = 'None';\nexport const LOOP_STATUS_TRACK: LoopStatus = 'Track';\nexport const LOOP_STATUS_PLAYLIST: LoopStatus = 'Playlist';\n\nconst playbackStatuses: PlayBackStatus[] = [\n  PLAYBACK_STATUS_PLAYING,\n  PLAYBACK_STATUS_PAUSED,\n  PLAYBACK_STATUS_STOPPED,\n];\n\nconst loopStatuses: LoopStatus[] = [LOOP_STATUS_NONE, LOOP_STATUS_PLAYLIST, LOOP_STATUS_TRACK];\n\nexport const isLoopStatusValid = (value: unknown): value is LoopStatus => {\n  return typeof value === 'string' && loopStatuses.includes(value as LoopStatus);\n};\n\nexport const isPlaybackStatusValid = (value: unknown): value is PlayBackStatus => {\n  return typeof value === 'string' && playbackStatuses.includes(value as PlayBackStatus);\n};\n","const loggingEnabled =\n  process.env.MPRIS_SERVICE_DEBUG !== undefined && process.env.MPRIS_SERVICE_DEBUG !== '0';\n\nexport const debug = (message: unknown): void => {\n  if (loggingEnabled) {\n    console.log(message);\n  }\n};\n\nexport const warn = (message: unknown): void => {\n  if (loggingEnabled) {\n    console.warn(message);\n  }\n};\n","import { Variant } from '@jellybrick/dbus-next';\n\nimport { warn } from '@/logging';\n\nimport type { Playlist, Track } from '@/types';\n\nexport const guessMetadataSignature = (key: string, value: unknown): string | null => {\n  if (key === 'mpris:trackid') {\n    return 'o';\n  } else if (key === 'mpris:length') {\n    return 'x';\n  } else if (typeof value === 'string') {\n    return 's';\n  } else if (typeof value === 'boolean') {\n    return 'b';\n  } else if (typeof value === 'number') {\n    return 'd';\n  } else if (Array.isArray(value) && value.every((v) => typeof v === 'string')) {\n    return 'as';\n  } else {\n    // type not supported yet\n    warn(`could not determine metadata type for ${key}: ${String(value)}`);\n    return null;\n  }\n};\n\nexport const metadataToPlain = (metadataVariant: Record<string, unknown>): Track => {\n  const metadataPlain: Record<string, unknown> = {};\n  for (const k of Object.keys(metadataVariant)) {\n    const value = metadataVariant[k];\n    if (value === undefined || value === null) {\n      warn(`ignoring a null metadata value for key ${k}`);\n      continue;\n    }\n    if (value instanceof Variant) {\n      metadataPlain[k] = value.value;\n    } else {\n      metadataPlain[k] = value;\n    }\n  }\n  return metadataPlain as Track;\n};\n\nexport const metadataToDbus = (metadataPlain: Track): Record<string, Variant> => {\n  const metadataVariant: Record<string, Variant> = {};\n  const plain = metadataPlain as Record<string, unknown>;\n  for (const k of Object.keys(plain)) {\n    const value = plain[k];\n    const signature = guessMetadataSignature(k, value);\n    if (signature) {\n      metadataVariant[k] = new Variant(signature, value);\n    }\n  }\n  return metadataVariant;\n};\n\nexport const emptyPlaylist: [string, string, string] = ['/', '', ''];\n\nexport const playlistToDbus = (playlist?: Playlist | null): [string, string, string] => {\n  if (!playlist) {\n    return emptyPlaylist;\n  }\n\n  const { Id, Name, Icon } = playlist;\n  return [Id, Name, Icon];\n};\n\nexport const playlistToPlain = (wire: [string, string, string]): Playlist => {\n  const [Id, Name, Icon] = wire;\n  return { Id, Name, Icon };\n};\n","import { interface as dbusInterface } from '@jellybrick/dbus-next';\nimport { deepEqual } from 'fast-equals';\n\nimport { isLoopStatusValid, isPlaybackStatusValid } from '@/constants';\nimport * as types from '@/interfaces/types';\nimport { warn } from '@/logging';\n\nimport type { Player } from '@/player';\nimport type { EventsMap, Playlist, Track } from '@/types';\n\nconst { Interface } = dbusInterface;\n\ntype SettableProperty = 'Fullscreen' | 'Rate' | 'Shuffle' | 'Volume' | 'LoopStatus';\n\nconst settableEvent = {\n  Fullscreen: 'fullscreen',\n  Rate: 'rate',\n  Shuffle: 'shuffle',\n  Volume: 'volume',\n  LoopStatus: 'loopStatus',\n} as const satisfies Record<SettableProperty, keyof EventsMap>;\n\nexport class MprisInterface extends Interface {\n  player: Player;\n\n  constructor(name: string, player: Player) {\n    super(name);\n    this.player = player;\n  }\n\n  protected _setPropertyInternal(property: SettableProperty, valueDbus: unknown): void {\n    this.player.emit(settableEvent[property], valueDbus as never);\n  }\n\n  setProperty(property: string, valuePlain: unknown): void {\n    // convert the plain value to a dbus value (default to the plain value)\n    let valueDbus: unknown = valuePlain;\n\n    if (property === 'Metadata') {\n      valueDbus = types.metadataToDbus(valuePlain as Track);\n    } else if (property === 'ActivePlaylist') {\n      if (valuePlain) {\n        valueDbus = [true, types.playlistToDbus(valuePlain as Playlist)];\n      } else {\n        valueDbus = [false, types.emptyPlaylist];\n      }\n    } else if (property === 'Tracks') {\n      valueDbus = (valuePlain as Track[])\n        .filter((t) => t['mpris:trackid'])\n        .map((t) => t['mpris:trackid']);\n    }\n\n    if (!deepEqual(Reflect.get(this, `_${property}`), valueDbus)) {\n      Reflect.set(this, `_${property}`, valueDbus);\n\n      if (property === 'LoopStatus' && !isLoopStatusValid(valuePlain)) {\n        warn(`setting player loop status to an invalid value: ${String(valuePlain)}`);\n      } else if (property === 'PlaybackStatus' && !isPlaybackStatusValid(valuePlain)) {\n        warn(`setting player playback status to an invalid value: ${String(valuePlain)}`);\n      } else {\n        Interface.emitPropertiesChanged(this, { [property]: valueDbus }, []);\n      }\n    }\n  }\n}\n","import { interface as dbusInterface } from '@jellybrick/dbus-next';\n\nimport { MprisInterface } from '@/interfaces/mpris-interface';\n\nimport type { Player } from '@/player';\nimport type { RootInterfaceOptions } from '@/types';\n\nconst { property, method } = dbusInterface;\nconst ACCESS_READ = dbusInterface.ACCESS_READ as 'read';\n\nexport class RootInterface extends MprisInterface {\n  constructor(player: Player, opts: RootInterfaceOptions = {}) {\n    super('org.mpris.MediaPlayer2', player);\n\n    if (opts.identity !== undefined) {\n      this._Identity = opts.identity;\n    }\n    if (opts.supportedUriSchemes !== undefined) {\n      this._SupportedUriSchemes = opts.supportedUriSchemes;\n    }\n    if (opts.supportedMimeTypes !== undefined) {\n      this._SupportedMimeTypes = opts.supportedMimeTypes;\n    }\n    if (opts.desktopEntry !== undefined) {\n      this._DesktopEntry = opts.desktopEntry;\n    }\n  }\n\n  private _CanQuit = true;\n  private _Fullscreen = false;\n  private _CanSetFullscreen = false;\n  private _CanRaise = true;\n  private _HasTrackList = false;\n  private _Identity = '';\n  // TODO optional properties\n  private _DesktopEntry = '';\n  private _SupportedUriSchemes: string[] = [];\n  private _SupportedMimeTypes: string[] = [];\n\n  @property({ signature: 'b', access: ACCESS_READ })\n  get CanQuit(): boolean {\n    return this._CanQuit;\n  }\n\n  @property({ signature: 'b' })\n  get Fullscreen(): boolean {\n    return this._Fullscreen;\n  }\n  set Fullscreen(value: boolean) {\n    this._setPropertyInternal('Fullscreen', value);\n  }\n\n  @property({ signature: 'b', access: ACCESS_READ })\n  get CanSetFullscreen(): boolean {\n    return this._CanSetFullscreen;\n  }\n\n  @property({ signature: 'b', access: ACCESS_READ })\n  get CanRaise(): boolean {\n    return this._CanRaise;\n  }\n\n  @property({ signature: 'b', access: ACCESS_READ })\n  get HasTrackList(): boolean {\n    return this._HasTrackList;\n  }\n\n  @property({ signature: 's', access: ACCESS_READ })\n  get Identity(): string {\n    return this._Identity;\n  }\n\n  @property({ signature: 's', access: ACCESS_READ })\n  get DesktopEntry(): string {\n    return this._DesktopEntry;\n  }\n\n  @property({ signature: 'as', access: ACCESS_READ })\n  get SupportedUriSchemes(): string[] {\n    return this._SupportedUriSchemes;\n  }\n\n  @property({ signature: 'as', access: ACCESS_READ })\n  get SupportedMimeTypes(): string[] {\n    return this._SupportedMimeTypes;\n  }\n\n  @method({})\n  Raise(): void {\n    this.player.emit('raise');\n  }\n\n  @method({})\n  Quit(): void {\n    this.player.emit('quit');\n  }\n}\n","import { DBusError, interface as dbusInterface, type Variant } from '@jellybrick/dbus-next';\n\nimport {\n  isLoopStatusValid,\n  isPlaybackStatusValid,\n  LOOP_STATUS_NONE,\n  PLAYBACK_STATUS_STOPPED,\n} from '@/constants';\nimport { MprisInterface } from '@/interfaces/mpris-interface';\n\nimport type { Player } from '@/player';\n\nconst { property, method, signal } = dbusInterface;\n\nexport class PlayerInterface extends MprisInterface {\n  constructor(player: Player) {\n    super('org.mpris.MediaPlayer2.Player', player);\n  }\n\n  private _CanControl = true;\n  private _CanPause = true;\n  private _CanPlay = true;\n  private _CanSeek = true;\n  private _CanGoNext = true;\n  private _CanGoPrevious = true;\n  private _Metadata: Record<string, Variant> = {};\n  private _MaximumRate = 1;\n  private _MinimumRate = 1;\n  private _Rate = 1;\n  private _Shuffle = false;\n  private _Volume = 0;\n  private _LoopStatus = LOOP_STATUS_NONE;\n  private _PlaybackStatus = PLAYBACK_STATUS_STOPPED;\n\n  @property({ signature: 'b', access: dbusInterface.ACCESS_READ })\n  get CanControl(): boolean {\n    return this._CanControl;\n  }\n\n  @property({ signature: 'b', access: dbusInterface.ACCESS_READ })\n  get CanPause(): boolean {\n    return this._CanPause;\n  }\n\n  @property({ signature: 'b', access: dbusInterface.ACCESS_READ })\n  get CanPlay(): boolean {\n    return this._CanPlay;\n  }\n\n  @property({ signature: 'b', access: dbusInterface.ACCESS_READ })\n  get CanSeek(): boolean {\n    return this._CanSeek;\n  }\n\n  @property({ signature: 'b', access: dbusInterface.ACCESS_READ })\n  get CanGoNext(): boolean {\n    return this._CanGoNext;\n  }\n\n  @property({ signature: 'b', access: dbusInterface.ACCESS_READ })\n  get CanGoPrevious(): boolean {\n    return this._CanGoPrevious;\n  }\n\n  @property({ signature: 'a{sv}', access: dbusInterface.ACCESS_READ })\n  get Metadata(): Record<string, Variant> {\n    return this._Metadata;\n  }\n\n  @property({ signature: 'd', access: dbusInterface.ACCESS_READ })\n  get MaximumRate(): number {\n    return this._MaximumRate;\n  }\n\n  @property({ signature: 'd', access: dbusInterface.ACCESS_READ })\n  get MinimumRate(): number {\n    return this._MinimumRate;\n  }\n\n  @property({ signature: 'd' })\n  get Rate(): number {\n    return this._Rate;\n  }\n  set Rate(value: number) {\n    this._setPropertyInternal('Rate', value);\n  }\n\n  @property({ signature: 'b' })\n  get Shuffle(): boolean {\n    return this._Shuffle;\n  }\n  set Shuffle(value: boolean) {\n    this._setPropertyInternal('Shuffle', value);\n  }\n\n  @property({ signature: 'd' })\n  get Volume(): number {\n    return this._Volume;\n  }\n  set Volume(value: number) {\n    this._setPropertyInternal('Volume', value);\n  }\n\n  @property({ signature: 'x', access: dbusInterface.ACCESS_READ })\n  get Position(): number {\n    const playerPosition = this.player.getPosition();\n    const position = Math.floor(playerPosition || 0);\n    if (isNaN(position)) {\n      const err = 'github.mpris_service.InvalidPositionError';\n      const message = `The player has set an invalid position: ${playerPosition}`;\n      throw new DBusError(err, message);\n    }\n    return position;\n  }\n\n  @property({ signature: 's' })\n  get LoopStatus(): string {\n    if (!isLoopStatusValid(this._LoopStatus)) {\n      const err = 'github.mpris_service.InvalidLoopStatusError';\n      const message = `The player has set an invalid loop status: ${this._LoopStatus}`;\n      throw new DBusError(err, message);\n    }\n\n    return this._LoopStatus;\n  }\n  set LoopStatus(value: string) {\n    if (!isLoopStatusValid(value)) {\n      const err = 'github.mpris_service.InvalidLoopStatusError';\n      const message = `Tried to set loop status to an invalid value: ${value}`;\n      throw new DBusError(err, message);\n    }\n    this._setPropertyInternal('LoopStatus', value);\n  }\n\n  @property({ signature: 's', access: dbusInterface.ACCESS_READ })\n  get PlaybackStatus(): string {\n    if (!isPlaybackStatusValid(this._PlaybackStatus)) {\n      const err = 'github.mpris_service.InvalidPlaybackStatusError';\n      const message = `The player has set an invalid playback status: ${this._PlaybackStatus}`;\n      throw new DBusError(err, message);\n    }\n\n    return this._PlaybackStatus;\n  }\n\n  @method({})\n  Next(): void {\n    this.player.emit('next');\n  }\n\n  @method({})\n  Previous(): void {\n    this.player.emit('previous');\n  }\n\n  @method({})\n  Pause(): void {\n    this.player.emit('pause');\n  }\n\n  @method({})\n  PlayPause(): void {\n    this.player.emit('playpause');\n  }\n\n  @method({})\n  Stop(): void {\n    this.player.emit('stop');\n  }\n\n  @method({})\n  Play(): void {\n    this.player.emit('play');\n  }\n\n  @method({ inSignature: 'x' })\n  Seek(offset: bigint): void {\n    // XXX overflow\n    this.player.emit('seek', Number(offset));\n  }\n\n  @method({ inSignature: 'ox' })\n  SetPosition(trackId: string, position: bigint): void {\n    this.player.emit('position', {\n      trackId,\n      // XXX overflow\n      position: Number(position),\n    });\n  }\n\n  @method({ inSignature: 's' })\n  OpenUri(uri: string): void {\n    this.player.emit('open', { uri });\n  }\n\n  @signal({ signature: 'x' })\n  Seeked(position: number): number {\n    return position;\n  }\n}\n","import { interface as dbusInterface } from '@jellybrick/dbus-next';\n\nimport { MprisInterface } from '@/interfaces/mpris-interface';\nimport * as types from '@/interfaces/types';\n\nimport type { Player } from '@/player';\nimport type { Playlist } from '@/types';\n\nconst { property, method, signal } = dbusInterface;\nconst ACCESS_READ = dbusInterface.ACCESS_READ as 'read';\n\nexport class PlaylistsInterface extends MprisInterface {\n  constructor(player: Player) {\n    super('org.mpris.MediaPlayer2.Playlists', player);\n  }\n\n  private _ActivePlaylist: [boolean, [string, string, string]] = [false, types.emptyPlaylist];\n  private _PlaylistCount = 0;\n\n  @property({ signature: 'u', access: ACCESS_READ })\n  get PlaylistCount(): number {\n    return this._PlaylistCount;\n  }\n\n  @property({ signature: 'as', access: ACCESS_READ })\n  get Orderings(): string[] {\n    return ['Alphabetical', 'UserDefined'];\n  }\n\n  @property({ signature: '(b(oss))', access: ACCESS_READ })\n  get ActivePlaylist(): [boolean, [string, string, string]] {\n    return this._ActivePlaylist;\n  }\n\n  setActivePlaylistId(playlistId: string): void {\n    const i = this.player.getPlaylistIndex(playlistId);\n\n    this.setProperty('ActivePlaylist', this.player.playlists[i] || null);\n  }\n\n  @method({ inSignature: 'o' })\n  ActivatePlaylist(playlistId: string): void {\n    this.player.emit('activatePlaylist', playlistId);\n  }\n\n  @method({ inSignature: 'uusb', outSignature: 'a(oss)' })\n  GetPlaylists(\n    index: number,\n    maxCount: number,\n    order: string,\n    reverseOrder: boolean,\n  ): [string, string, string][] {\n    if (!this.player.playlists) {\n      return [];\n    }\n\n    const result = this.player.playlists\n      .sort((a, b) => {\n        let ret = 1;\n        switch (order) {\n          case 'Alphabetical':\n            ret = a.Name > b.Name ? 1 : -1;\n            break;\n          // case 'CreationDate':\n          // case 'ModifiedDate':\n          // case 'LastPlayDate':\n          case 'UserDefined':\n            break;\n        }\n        return ret;\n      })\n      .slice(index, maxCount + index)\n      .map((p) => types.playlistToDbus(p));\n\n    if (reverseOrder) {\n      result.reverse();\n    }\n\n    return result;\n  }\n\n  @signal({ signature: '(oss)' })\n  PlaylistChanged(playlist: Playlist): [string, string, string] {\n    return types.playlistToDbus(playlist);\n  }\n}\n","import { interface as dbusInterface, type Variant } from '@jellybrick/dbus-next';\n\nimport { MprisInterface } from '@/interfaces/mpris-interface';\nimport * as types from '@/interfaces/types';\n\nimport type { Player } from '@/player';\nimport type { Track } from '@/types';\n\nconst { property, method, signal } = dbusInterface;\nconst ACCESS_READ = dbusInterface.ACCESS_READ as 'read';\n\nexport class TracklistInterface extends MprisInterface {\n  constructor(player: Player) {\n    super('org.mpris.MediaPlayer2.TrackList', player);\n  }\n\n  private _Tracks: string[] = [];\n  private _CanEditTracks = false;\n\n  setTracks(tracksPlain: Track[]): void {\n    this.setProperty('Tracks', tracksPlain);\n  }\n\n  @property({ signature: 'ao', access: ACCESS_READ })\n  get Tracks(): string[] {\n    return this._Tracks;\n  }\n\n  @property({ signature: 'b', access: ACCESS_READ })\n  get CanEditTracks(): boolean {\n    return this._CanEditTracks;\n  }\n\n  @method({ inSignature: 'ao', outSignature: 'aa{sv}' })\n  GetTracksMetadata(trackIds: string[]): Record<string, Variant>[] {\n    return this.player.tracks\n      .filter((t) => {\n        return trackIds.some((id) => id === t['mpris:trackid']);\n      })\n      .map((t) => types.metadataToDbus(t));\n  }\n\n  @method({ inSignature: 'sob' })\n  AddTrack(uri: string, afterTrack: string, setAsCurrent: boolean): void {\n    this.player.emit('addTrack', { uri, afterTrack, setAsCurrent });\n  }\n\n  @method({ inSignature: 'o' })\n  RemoveTrack(trackId: string): void {\n    this.player.emit('removeTrack', trackId);\n  }\n\n  @method({ inSignature: 'o' })\n  GoTo(trackId: string): void {\n    this.player.emit('goTo', trackId);\n  }\n\n  @signal({ signature: 'aoo' })\n  TrackListReplaced(replacedPlain: Track[]): [string[], string] {\n    this.setTracks(replacedPlain);\n    // TODO what's the active track?\n    return [this._Tracks, '/org/mpris/MediaPlayer2/TrackList/NoTrack'];\n  }\n\n  @signal({ signature: 'a{sv}' })\n  TrackAdded(metadata: Track): Record<string, Variant> {\n    return types.metadataToDbus(metadata);\n  }\n\n  @signal({ signature: 'o' })\n  TrackRemoved(path: string): string {\n    return path;\n  }\n\n  @signal({ signature: 'oa{sv}' })\n  TrackMetadataChanged(path: string, metadata: Track): [string, Record<string, Variant>] {\n    return [path, types.metadataToDbus(metadata)];\n  }\n}\n","import { EventEmitter } from 'node:events';\n\nimport { NameFlag, RequestNameReply, sessionBus, validators } from '@jellybrick/dbus-next';\n\nimport * as constants from '@/constants';\nimport {\n  PlayerInterface,\n  PlaylistsInterface,\n  RootInterface,\n  TracklistInterface,\n  type MprisInterface,\n} from '@/interfaces';\nimport * as types from '@/interfaces/types';\n\nimport type {\n  EventsMap,\n  Interfaces,\n  LoopStatus,\n  PlayBackStatus,\n  Playlist,\n  PlayerOptions,\n  Track,\n} from '@/types';\nimport type { MessageBus } from '@jellybrick/dbus-next';\n\nconst MPRIS_PATH = '/org/mpris/MediaPlayer2';\n\nconst lcfirst = (str: string): string => {\n  return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\ninterface PlayerInterfaces {\n  root?: RootInterface;\n  player?: PlayerInterface;\n  tracklist?: TracklistInterface;\n  playlists?: PlaylistsInterface;\n}\n\n// oxlint-disable-next-line typescript/no-unsafe-declaration-merging\nexport interface Player {\n  identity: string;\n  fullscreen: boolean;\n  supportedUriSchemes: string[];\n  supportedMimeTypes: string[];\n  canQuit: boolean;\n  canRaise: boolean;\n  canSetFullscreen: boolean;\n  hasTrackList: boolean;\n  desktopEntry: string;\n  playbackStatus: PlayBackStatus;\n  loopStatus: LoopStatus;\n  rate: number;\n  shuffle: boolean;\n  metadata: Track;\n  volume: number;\n  canControl: boolean;\n  canPause: boolean;\n  canPlay: boolean;\n  canSeek: boolean;\n  canGoNext: boolean;\n  canGoPrevious: boolean;\n  minimumRate: number;\n  maximumRate: number;\n  canEditTracks: boolean;\n  tracks: Track[];\n  playlistCount: number;\n  activePlaylist: string;\n  playlists: Playlist[];\n}\n\nexport class Player extends EventEmitter<EventsMap> {\n  name: string;\n  supportedInterfaces: Interfaces[];\n  serviceName!: string;\n  private _bus!: MessageBus;\n  interfaces: PlayerInterfaces = {};\n  private _tracks: Track[] = [];\n\n  constructor(options: PlayerOptions) {\n    super();\n\n    this.name = options.name;\n    this.supportedInterfaces = options.supportedInterfaces ?? ['player'];\n    this._tracks = [];\n    this.init(options).catch((err: unknown) => {\n      this.emit('error', err instanceof Error ? err : new Error(String(err)));\n    });\n  }\n\n  private async init(opts: PlayerOptions): Promise<void> {\n    this.serviceName = `org.mpris.MediaPlayer2.${this.name}`;\n    validators.assertBusNameValid(this.serviceName);\n\n    this._bus = sessionBus();\n\n    this._bus.on('error', (err: unknown) => {\n      this.emit('error', err instanceof Error ? err : new Error(String(err)));\n    });\n\n    this.interfaces = {};\n\n    this.#addRootInterface(opts);\n\n    if (this.supportedInterfaces.indexOf('player') >= 0) {\n      this.#addPlayerInterface();\n    }\n    if (this.supportedInterfaces.indexOf('trackList') >= 0) {\n      this.#addTracklistInterface();\n    }\n    if (this.supportedInterfaces.indexOf('playlists') >= 0) {\n      this.#addPlaylistsInterface();\n    }\n\n    for (const iface of Object.values(this.interfaces)) {\n      if (iface !== undefined) {\n        this._bus.export(MPRIS_PATH, iface);\n      }\n    }\n\n    try {\n      const reply = await this._bus.requestName(this.serviceName, NameFlag.DO_NOT_QUEUE);\n      if (reply === RequestNameReply.EXISTS) {\n        this.serviceName = `${this.serviceName}.instance${process.pid}`;\n        await this._bus.requestName(this.serviceName);\n      }\n    } catch (err) {\n      this.emit('error', err instanceof Error ? err : new Error(String(err)));\n    }\n  }\n\n  #addRootInterface(opts: PlayerOptions): void {\n    this.interfaces.root = new RootInterface(this, opts);\n    this.#addEventedPropertiesList(this.interfaces.root, [\n      'Identity',\n      'Fullscreen',\n      'SupportedUriSchemes',\n      'SupportedMimeTypes',\n      'CanQuit',\n      'CanRaise',\n      'CanSetFullscreen',\n      'HasTrackList',\n      'DesktopEntry',\n    ]);\n  }\n\n  #addPlayerInterface(): void {\n    this.interfaces.player = new PlayerInterface(this);\n    const eventedProps = [\n      'PlaybackStatus',\n      'LoopStatus',\n      'Rate',\n      'Shuffle',\n      'Metadata',\n      'Volume',\n      'CanControl',\n      'CanPause',\n      'CanPlay',\n      'CanSeek',\n      'CanGoNext',\n      'CanGoPrevious',\n      'MinimumRate',\n      'MaximumRate',\n    ];\n    this.#addEventedPropertiesList(this.interfaces.player, eventedProps);\n  }\n\n  #addTracklistInterface(): void {\n    this.interfaces.tracklist = new TracklistInterface(this);\n    this.#addEventedPropertiesList(this.interfaces.tracklist, ['CanEditTracks']);\n\n    Object.defineProperty(this, 'tracks', {\n      get: () => {\n        return this._tracks;\n      },\n      set: (value: Track[]) => {\n        this._tracks = value;\n        this.interfaces.tracklist?.TrackListReplaced(value);\n      },\n      enumerable: true,\n      configurable: true,\n    });\n  }\n\n  #addPlaylistsInterface(): void {\n    this.interfaces.playlists = new PlaylistsInterface(this);\n    this.#addEventedPropertiesList(this.interfaces.playlists, ['PlaylistCount', 'ActivePlaylist']);\n  }\n\n  /**\n   * Get a valid object path with the `subpath` as the basename which is suitable\n   * for use as an id.\n   *\n   * @name Player#objectPath\n   * @function\n   * @param {String} subpath - The basename of this path\n   * @returns {String} - A valid object path that can be used as an id.\n   */\n  objectPath(subpath?: string): string {\n    let path = `/org/node/mediaplayer/${this.name}`;\n    if (subpath) {\n      path += `/${subpath}`;\n    }\n    return path;\n  }\n\n  #addEventedProperty(iface: MprisInterface, name: string): void {\n    const localName = lcfirst(name);\n\n    Object.defineProperty(this, localName, {\n      get: () => {\n        const value = Reflect.get(iface, name);\n        if (name === 'ActivePlaylist') {\n          return types.playlistToPlain(value as [string, string, string]);\n        } else if (name === 'Metadata') {\n          return types.metadataToPlain(value as Record<string, unknown>);\n        }\n        return value;\n      },\n      set: (value: unknown) => {\n        iface.setProperty(name, value);\n      },\n      enumerable: true,\n      configurable: true,\n    });\n  }\n\n  #addEventedPropertiesList(iface: MprisInterface, props: string[]): void {\n    for (const prop of props) {\n      this.#addEventedProperty(iface, prop);\n    }\n  }\n\n  /**\n   * Gets the position of this player. This method is intended to be overridden\n   * by the user to return the position of the player in microseconds.\n   *\n   * @name Player#getPosition\n   * @function\n   * @returns {Number} - The current position of the player in microseconds. (Integer)\n   */\n  getPosition(): number {\n    return 0;\n  }\n\n  /**\n   * Emits the `Seeked` DBus signal to listening clients with the given position.\n   *\n   * @name Player#seeked\n   * @function\n   * @param {Number} position - The position in microseconds. (Integer)\n   */\n  seeked(position: number): void {\n    const seekTo = Math.floor(position || 0);\n    if (isNaN(seekTo)) {\n      throw new Error(`seeked expected a number (got ${position})`);\n    }\n    this.interfaces.player?.Seeked(seekTo);\n  }\n\n  getTrackIndex(trackId: string): number {\n    for (let i = 0; i < this.tracks.length; i++) {\n      const track = this.tracks[i];\n\n      if (track?.['mpris:trackid'] === trackId) {\n        return i;\n      }\n    }\n\n    return -1;\n  }\n\n  getTrack(trackId: string): Track | undefined {\n    return this.tracks[this.getTrackIndex(trackId)];\n  }\n\n  addTrack(track: Track): void {\n    this.tracks.push(track);\n    this.interfaces.tracklist?.setTracks(this.tracks);\n\n    let afterTrack = '/org/mpris/MediaPlayer2/TrackList/NoTrack';\n    if (this.tracks.length > 2) {\n      const previous = this.tracks[this.tracks.length - 2];\n      if (previous?.['mpris:trackid'] !== undefined) {\n        afterTrack = previous['mpris:trackid'];\n      }\n    }\n    this.interfaces.tracklist?.TrackAdded(afterTrack as unknown as Track);\n  }\n\n  removeTrack(trackId: string): void {\n    const i = this.getTrackIndex(trackId);\n    this.tracks.splice(i, 1);\n    this.interfaces.tracklist?.setTracks(this.tracks);\n\n    this.interfaces.tracklist?.TrackRemoved(trackId);\n  }\n\n  /**\n   * Get the index of a playlist entry in the `playlists` list property of the\n   * player from the given id.\n   *\n   * @name Player#getPlaylistIndex\n   * @function\n   * @param {String} playlistId - The id for the playlist entry.\n   */\n  getPlaylistIndex(playlistId: string): number {\n    for (let i = 0; i < this.playlists.length; i++) {\n      const playlist = this.playlists[i];\n\n      if (playlist?.Id === playlistId) {\n        return i;\n      }\n    }\n\n    return -1;\n  }\n\n  /**\n   * Set the list of playlists advertised to listeners on the bus. Each playlist\n   * must have string members `Id`, `Name`, and `Icon`.\n   *\n   * @name Player#setPlaylists\n   * @function\n   * @param {Array} playlists - A list of playlists.\n   */\n  setPlaylists(playlists: Playlist[]): void {\n    this.playlists = playlists;\n    this.playlistCount = playlists.length;\n\n    this.playlists.forEach((playlist) => {\n      if (playlist) {\n        this.interfaces.playlists?.PlaylistChanged(playlist);\n      }\n    });\n  }\n\n  /**\n   * Set the playlist identified by `playlistId` to be the currently active\n   * playlist.\n   *\n   * @name Player#setActivePlaylist\n   * @function\n   * @param {String} playlistId - The id of the playlist to activate.\n   */\n  setActivePlaylist(playlistId: string): void {\n    this.interfaces.playlists?.setActivePlaylistId(playlistId);\n  }\n\n  static PLAYBACK_STATUS_PLAYING: PlayBackStatus = constants.PLAYBACK_STATUS_PLAYING;\n  static PLAYBACK_STATUS_PAUSED: PlayBackStatus = constants.PLAYBACK_STATUS_PAUSED;\n  static PLAYBACK_STATUS_STOPPED: PlayBackStatus = constants.PLAYBACK_STATUS_STOPPED;\n  static LOOP_STATUS_NONE: LoopStatus = constants.LOOP_STATUS_NONE;\n  static LOOP_STATUS_TRACK: LoopStatus = constants.LOOP_STATUS_TRACK;\n  static LOOP_STATUS_PLAYLIST: LoopStatus = constants.LOOP_STATUS_PLAYLIST;\n}\n","import { Player } from '@/player';\n\nexport type * from '@/types';\n\nexport default Player;\n"],"mappings":"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"}