From c3e2c1380810d156d9d6863fffc804242171bec0 Mon Sep 17 00:00:00 2001 From: Sem Vissscher Date: Wed, 16 Dec 2020 15:52:01 +0100 Subject: [PATCH] added initial touchbar support --- plugins/touchbar/back.js | 61 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 plugins/touchbar/back.js diff --git a/plugins/touchbar/back.js b/plugins/touchbar/back.js new file mode 100644 index 00000000..44ddea77 --- /dev/null +++ b/plugins/touchbar/back.js @@ -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) + }) +}