Skip to content

Instantly share code, notes, and snippets.

@neauoire
Last active October 9, 2015 14:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save neauoire/47c25fd639f549c4d507 to your computer and use it in GitHub Desktop.
Save neauoire/47c25fd639f549c4d507 to your computer and use it in GitHub Desktop.
Adds desktop notifications to Paradise
(function() {
if( !( 'Notification' in window ) ) {
return console.error(
'This browser does not support desktop notifications'
)
}
var icon = 'data:image/png;base64,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'
function listen() {
socket.on( 'timeline_update', function( update ) {
if( update == null )
return
var isRecipient = update.isStealth && update.recipients ?
~update.recipients.indexOf( parseInt( vesselId, 10 ) ) :
true
var display = isRecipient &&
update.message != null &&
update.message !== '' &&
update.sender !== parseInt( vesselId, 10 )
if( !display )
return
var msg = update.message.replace( /<\/?[^>]+>/g, '' )
new Notification( 'Paradise', {
icon: icon,
body: msg,
})
})
}
if( Notification.permission === 'granted' ) {
listen()
} else if( Notification.permission !== 'denied' ) {
Notification.requestPermission( function( result ) {
if( result === 'granted' )
listen()
})
}
})()
(function() {
if( !window.speechSynthesis )
return console.error(
'Your browser does not support speech synthesis'
)
var pause = 300
var vessel = parseInt( vesselId, 10 )
var pitch = 1 // 0 to 2
var rate = 1 // 0.1 to 10
// var voices = speechSynthesis.getVoices()
// .filter( function( voice ) {
// return voice.lang === 'en-US'
// return voice.name === 'Vicki'
// return voice.name === 'Deranged'
// return voice.name === 'Bubbles'
// return voice.name === 'Trinoids'
// return voice.name === 'Boing'
// })
var lastVessel = ''
function createUtterance( update ) {
if( update == null || update.message == null )
return
var msg = update.message.replace( /<\/?[^>]+>/g, '' )
var action = msg.match( /(.+?)(?:said|replied|asked)\s"/ )
var vesselName = ( ( action && action[1] ) || '' )
.replace( /^\s+|\s+$/g, '' )
var isNarrative = !~msg.indexOf( '"' )
var isContinuation = vesselName === lastVessel
// Prevent spam by unstealthed vessels
// that move around a lot
if( isNarrative )
return
lastVessel = vesselName
var utterance = new SpeechSynthesisUtterance()
var voice = speechSynthesis.getVoices()
.filter( function( voice ) {
return voice.name === 'Vicki'
})[0]
utterance.pitch = pitch
utterance.rate = rate
utterance.voice = voice
utterance.lang = 'en-US'
// utterance.text = msg
utterance.text = !isNarrative && isContinuation ?
msg.match( /"([^"]+?)"/ )[1] : msg
return utterance
}
function queue( utterance ) {
queue.stack.push( utterance )
queue.process()
}
queue.stack = []
queue.processing = false
queue.process = function() {
if( queue.processing ) return
if( !queue.stack.length ) return
queue.processing = true
var utterance = queue.stack.shift()
utterance.onend = function() {
setTimeout( function() {
queue.processing = false
queue.process()
}, pause )
}
speechSynthesis.speak( utterance )
}
socket.on( 'timeline_update', function( update ) {
if( update == null )
return
var isRecipient = update.isStealth && update.recipients ?
~update.recipients.indexOf( vessel ) :
true
var display = isRecipient &&
update.message != null &&
update.message !== ''
if( !display )
return
var utterance = createUtterance( update )
if( utterance ) { queue( utterance ) }
})
})()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment