added initial touchbar support

This commit is contained in:
Sem Vissscher
2020-12-16 15:52:01 +01:00
parent e52987df92
commit c3e2c13808

61
plugins/touchbar/back.js Normal file
View File

@ -0,0 +1,61 @@
const { TouchBar } = require('electron')
const {
TouchBarButton,
TouchBarLabel,
TouchBarSpacer,
TouchBarSegmentedControl,
TouchBarScrubber
} = TouchBar
// this selects the title
const titleSelector = '.title.style-scope.ytmusic-player-bar'
// these keys will be used to go backwards, pause and skip songs
const keys = ['k','space','j']
const presskey = (window, key) => {
window.webContents.sendInputEvent({
type: "keydown",
keyCode: key
})
}
// grab the title using the selector
const getTitle = (win) => {
return win.webContents.executeJavaScript(
`document.querySelector('` + titleSelector + `').innerText`
).catch(e => {
console.log(e)
})
}
module.exports = (win) => {
// songtitle label
let songTitle = new TouchBarLabel({label: ''})
// the song control buttons (keys to press are in the same order)
const buttons = new TouchBarSegmentedControl({
mode: 'buttons',
segments: [
new TouchBarButton({label: '<'}),
new TouchBarButton({label: '⏯️'}),
new TouchBarButton({label: '>'})
],
change: (i) => presskey(win,keys[i])
})
// this is the touchbar object, this combines everything with proper layout
const touchBar = new TouchBar({
items: [
new TouchBarScrubber({items: [songTitle], continuous: false}),
new TouchBarSpacer({size:'flexible'}),
buttons
]
})
// if the page title changes, update touchbar and song title
win.on("page-title-updated", async () => {
songTitle.label = await getTitle(win)
win.setTouchBar(touchBar)
})
}