const getMetadata = async () => { const properties = await getProperties() return properties.Get( 'org.mpris.MediaPlayer2.Player', 'Metadata' ) }
@property({signature: 's'}) get VirtualProperty() { return this._VirtualProperty; }
beforeAll(async () => { dbus = createSystemBus() await dbus.requestName(TEST_NAME) iface = new TestInterface(TEST_IFACE) dbus.export(TEST_OBJECT, iface) })
@method({inSignature: 's', outSignature: 's'}) Echo(what) { return `>>${what}`; }
function createBluetooth () { const dbus = createSystemBus() const bluetooth = new Bluetooth(dbus) const destroy = () => dbus.disconnect() return { bluetooth, destroy } }
set VirtualProperty(value) { this._VirtualProperty = value; Interface.emitPropertiesChanged(this, { VirtualProperty: value }) }
const getProperties = async () => { const sessionBus = DBus.sessionBus() const proxyObject = await sessionBus.getProxyObject( 'org.mpris.MediaPlayer2.spotify', '/org/mpris/MediaPlayer2' ) return proxyObject.getInterface('org.freedesktop.DBus.Properties') }
const metadataChangeListener = async (callback) => { const properties = await getProperties() properties.on('PropertiesChanged', (_, changed) => { clearTimeout(metadataChangeTimer) metadataChangeTimer = setTimeout(() => { let metadata = changed['Metadata'] let trackID = getMetadataTrackID(metadata) let artist = getMetadataArtist(metadata) let title = getMetadataTitle(metadata) callback(null, { trackID, artist, title }) }, 1000) }) }