[WebNowPlaying] Remove unnecessary .bind, general code and type cleanup

This commit is contained in:
Jozen Blue Martinez 2022-02-09 16:37:06 +08:00
parent 308193061d
commit 869ddc164f
No known key found for this signature in database
GPG key ID: FB8FD46C9087D829

View file

@ -28,13 +28,13 @@ export default class WebNowPlaying {
*/ */
public name: string = 'WebNowPlaying'; public name: string = 'WebNowPlaying';
public description: string = 'Song info and playback control for the Rainmeter WebNowPlaying plugin.'; public description: string = 'Song info and playback control for the Rainmeter WebNowPlaying plugin.';
public version: string = '1.0.0'; public version: string = '1.0.1';
public author: string = 'Zennn <me@jozen.blue>'; public author: string = 'Zennn <me@jozen.blue>';
private _win: any; private _win: any;
private ws: any = null; private ws?: WebSocket;
private wsapiConn: any = null; private wsapiConn?: WebSocket;
private playerName: string = 'Cider'/* Apple Music */; private playerName: string = 'Cider';
constructor() { constructor() {
console.debug(`[Plugin][${this.name}] Loading Complete.`); console.debug(`[Plugin][${this.name}] Loading Complete.`);
@ -47,9 +47,7 @@ export default class WebNowPlaying {
*/ */
private static windowsOnly(_target: any, _propertyKey: string, descriptor: PropertyDescriptor) { private static windowsOnly(_target: any, _propertyKey: string, descriptor: PropertyDescriptor) {
if (process.platform !== 'win32') { if (process.platform !== 'win32') {
descriptor.value = function () { descriptor.value = () => void 0;
return
}
} }
} }
@ -92,22 +90,25 @@ export default class WebNowPlaying {
value = attributes.shuffleMode; value = attributes.shuffleMode;
break; break;
} }
this.ws.send(`${field}:${value}`); this.ws?.send(`${field}:${value}`);
} catch (error) { } catch (error) {
if (this.ws.readyState === WebSocket.OPEN) { if (this.ws?.readyState === WebSocket.OPEN) {
this.ws.send(`Error:Error updating ${field} for ${this.playerName}`); this.ws.send(`Error:Error updating ${field} for ${this.playerName}`);
this.ws.send(`ErrorD:${error}`); this.ws.send(`ErrorD:${error}`);
} }
} }
}); });
} }
private fireEvent(evt: any) {
private fireEvent(evt: WebSocket.MessageEvent) {
if (!evt.data) return; if (!evt.data) return;
let value = ''; const data = <string>evt.data;
if (evt.data.split(/ (.+)/).length > 1) {
value = evt.data.split(/ (.+)/)[1]; let value: string = '';
if (data.split(/ (.+)/).length > 1) {
value = data.split(/ (.+)/)[1];
} }
const eventName = evt.data.split(' ')[0].toLowerCase(); const eventName = data.split(' ')[0].toLowerCase();
try { try {
switch (eventName) { switch (eventName) {
@ -144,7 +145,7 @@ export default class WebNowPlaying {
} }
} catch (error) { } catch (error) {
console.debug(error); console.debug(error);
if (this.ws.readyState === WebSocket.OPEN) { if (this.ws?.readyState === WebSocket.OPEN) {
this.ws.send(`Error:Error sending event to ${this.playerName}`); this.ws.send(`Error:Error sending event to ${this.playerName}`);
this.ws.send(`ErrorD:${error}`); this.ws.send(`ErrorD:${error}`);
} }
@ -163,10 +164,10 @@ export default class WebNowPlaying {
try { try {
this.ws = new WebSocket('ws://127.0.0.1:8974/'); this.ws = new WebSocket('ws://127.0.0.1:8974/');
let retry: NodeJS.Timeout; let retry: NodeJS.Timeout;
this.ws.onopen = (() => { this.ws.onopen = () => {
console.info('[WebNowPlaying] Connected to Rainmeter'); console.info('[WebNowPlaying] Connected to Rainmeter');
this.ws.send(`PLAYER:${this.playerName}`); this.ws?.send(`PLAYER:${this.playerName}`);
}).bind(this); };
this.ws.onclose = () => { this.ws.onclose = () => {
clearTimeout(retry); clearTimeout(retry);
@ -175,7 +176,7 @@ export default class WebNowPlaying {
this.ws.onerror = () => { this.ws.onerror = () => {
clearTimeout(retry); clearTimeout(retry);
this.ws.close(); this.ws?.close();
}; };
this.ws.onmessage = this.fireEvent?.bind(this); this.ws.onmessage = this.fireEvent?.bind(this);
@ -194,8 +195,8 @@ export default class WebNowPlaying {
console.info('[WebNowPlaying] Connected to wsapi'); console.info('[WebNowPlaying] Connected to wsapi');
}; };
this.wsapiConn.onmessage = (evt: { data: string; }) => { this.wsapiConn.onmessage = (evt: WebSocket.MessageEvent) => {
const response = JSON.parse(evt.data); const response = JSON.parse(<string>evt.data);
if (response.type === 'playbackStateUpdate') { if (response.type === 'playbackStateUpdate') {
this.sendSongInfo(response.data); this.sendSongInfo(response.data);
} }
@ -214,7 +215,7 @@ export default class WebNowPlaying {
public onBeforeQuit() { public onBeforeQuit() {
if (this.ws) { if (this.ws) {
this.ws.send('STATE:0'); this.ws.send('STATE:0');
this.ws.onclose = null; // disable onclose handler first to stop it from retrying this.ws.onclose = () => void 0; // disable onclose handler first to stop it from retrying
this.ws.close(); this.ws.close();
} }
if (this.wsapiConn) { if (this.wsapiConn) {
@ -227,7 +228,8 @@ export default class WebNowPlaying {
* Runs on playback State Change * Runs on playback State Change
* @param attributes Music Attributes (attributes.status = current state) * @param attributes Music Attributes (attributes.status = current state)
*/ */
onPlaybackStateDidChange(attributes: any) { @WebNowPlaying.windowsOnly
public onPlaybackStateDidChange(attributes: any) {
this.sendSongInfo(attributes); this.sendSongInfo(attributes);
} }