diff --git a/www/js/channel/panels/pmPanel.js b/www/js/channel/panels/pmPanel.js index b908858..041ec5c 100644 --- a/www/js/channel/panels/pmPanel.js +++ b/www/js/channel/panels/pmPanel.js @@ -37,6 +37,11 @@ class pmPanel extends panelObj{ */ this.uuid = crypto.randomUUID(); + /** + * PM TX Sound + */ + this.txSound = '/nonfree/imsend.ogg'; + //Tell PMHandler to start tracking this panel this.client.pmHandler.panelList.set(this.uuid, null); @@ -131,6 +136,10 @@ class pmPanel extends panelObj{ //Send message out to server this.client.pmSocket.emit("pm", preprocessedMessage); + + if(localStorage.getItem('txPMSound') == 'true'){ + utils.ux.playSound(this.txSound); + } } //Clear our prompt @@ -247,6 +256,13 @@ class pmPanel extends panelObj{ * @param {Object} message - Message to render */ renderMessage(message){ + //If we have an empty message + console.log(message); + if(message.msg == null || message.msg == ''){ + //BAIL!! + return; + } + //Run postprocessing functions on chat message const postprocessedMessage = client.chatBox.chatPostprocessor.postprocess(message, true); diff --git a/www/js/channel/pmHandler.js b/www/js/channel/pmHandler.js index 6553edb..aaa887d 100644 --- a/www/js/channel/pmHandler.js +++ b/www/js/channel/pmHandler.js @@ -43,6 +43,21 @@ class pmHandler{ */ this.panelList = new Map(); + /** + * PM RX Sound + */ + this.rxSound = '/nonfree/imrecv.ogg'; + + /** + * Open Sesh Sound + */ + this.openSeshSound = '/nonfree/opensesh.ogg'; + + /** + * End Sesh Sound + */ + this.endSeshSound = '/nonfree/closesesh.ogg'; + this.defineListeners(); this.setupInput(); } @@ -118,17 +133,30 @@ class pmHandler{ //Generate a new sesh const sesh = new pmSesh(data, client); + //Notify user of new message/sesh - this.handlePing(); + this.handlePing((data.msg == '' || data.msg == null)); //Add it to the sesh list this.seshList.set(sesh.id, sesh); } + + //If this isn't an empty message (sesh-starter), and PM's always make noise, and we didn't send the message + if(data.msg != '' && data.msg != null && localStorage.getItem('rxPMSound') == 'all' && data.user != this.client.user.user){ + //make sum noize! + utils.ux.playSound(this.rxSound); + } } - handlePing(){ + handlePing(newSesh = false){ //Light up the icon this.pmIcon.classList.add('positive-low'); + + if(newSesh && (localStorage.getItem('newSeshSound') == 'true')){ + utils.ux.playSound(this.openSeshSound); + }else if(localStorage.getItem('rxPMSound') == 'unread'){ + utils.ux.playSound(this.rxSound); + } } //Handles UI updates after reading all messages diff --git a/www/js/utils.js b/www/js/utils.js index c8d7508..9f652b1 100644 --- a/www/js/utils.js +++ b/www/js/utils.js @@ -297,6 +297,11 @@ class canopyUXUtils{ } + playSound(url){ + const audio = new Audio(url); + audio.play(); + } + newTableRow(cellContent){ //Create an empty table row to hold the cells const entryRow = document.createElement('tr');