2018-12-30 23:41:44 +01:00
import Debug from '../../conf/Debug' ;
import BrowserDetect from '../../conf/BrowserDetect' ;
class CommsClient {
constructor ( name , settings ) {
if ( BrowserDetect . firefox ) {
this . port = browser . runtime . connect ( { name : name } ) ;
} else if ( BrowserDetect . chrome ) {
this . port = chrome . runtime . connect ( { name : name } ) ;
} else if ( BrowserDetect . edge ) {
this . port = browser . runtime . connect ( { name : name } )
}
var ths = this ;
this . _listener = m => ths . processReceivedMessage ( m ) ;
this . port . onMessage . addListener ( this . _listener ) ;
this . settings = settings ;
this . pageInfo = undefined ;
this . commsId = ( Math . random ( ) * 20 ) . toFixed ( 0 ) ;
}
destroy ( ) {
this . pageInfo = null ;
this . settings = null ;
if ( ! BrowserDetect . edge ) { // edge is a very special browser made by outright morons.
this . port . onMessage . removeListener ( this . _listener ) ;
}
}
setPageInfo ( pageInfo ) {
this . pageInfo = pageInfo ;
if ( Debug . debug ) {
console . log ( ` [CommsClient::setPageInfo] < ${ this . commsId } > ` , "SETTING PAGEINFO —" , this . pageInfo , this )
}
var ths = this ;
this . _listener = m => ths . processReceivedMessage ( m ) ;
if ( ! BrowserDetect . edge ) {
this . port . onMessage . removeListener ( this . _listener ) ;
}
this . port . onMessage . addListener ( this . _listener ) ;
}
processReceivedMessage ( message ) {
if ( Debug . debug && Debug . comms ) {
console . log ( ` [CommsClient.js::processMessage] < ${ this . commsId } > Received message from background script! ` , message ) ;
}
if ( ! this . pageInfo || ! this . settings . active ) {
if ( Debug . debug && Debug . comms ) {
console . log ( ` [CommsClient.js::processMessage] < ${ this . commsId } > this.pageInfo (or settings) not defined. Extension is probably disabled for this site. \n pageInfo: ` , this . pageInfo ,
"\nsettings.active:" , this . settings . active ,
"\nnobj:" , this
) ;
}
return ;
}
if ( message . cmd === 'get-current-zoom' ) {
this . pageInfo . requestCurrentZoom ( ) ;
}
if ( message . cmd === "set-ar" ) {
2019-03-10 23:27:50 +01:00
this . pageInfo . setAr ( { type : message . arg , ratio : message . customArg } , message . playing ) ;
2018-12-30 23:41:44 +01:00
} else if ( message . cmd === 'set-alignment' ) {
2018-12-31 03:34:26 +01:00
this . pageInfo . setvideoAlignment ( message . arg , message . playing ) ;
2018-12-30 23:41:44 +01:00
this . pageInfo . restoreAr ( ) ;
} else if ( message . cmd === "set-stretch" ) {
this . pageInfo . setStretchMode ( message . arg , message . playing ) ;
2019-06-02 23:54:32 +02:00
} else if ( message . cmd === 'set-keyboard' ) {
this . pageInfo . setKeyboardShortcutsEnabled ( message . arg )
2018-12-30 23:41:44 +01:00
} else if ( message . cmd === "autoar-start" ) {
if ( message . enabled !== false ) {
this . pageInfo . initArDetection ( message . playing ) ;
this . pageInfo . startArDetection ( message . playing ) ;
} else {
this . pageInfo . stopArDetection ( message . playing ) ;
}
} else if ( message . cmd === "pause-processing" ) {
this . pageInfo . pauseProcessing ( message . playing ) ;
} else if ( message . cmd === "resume-processing" ) {
// todo: autoArStatus
this . pageInfo . resumeProcessing ( message . autoArStatus , message . playing ) ;
} else if ( message . cmd === 'set-zoom' ) {
2019-01-03 02:07:16 +01:00
this . pageInfo . setZoom ( message . arg , true , message . playing ) ;
} else if ( message . cmd === 'change-zoom' ) {
this . pageInfo . zoomStep ( message . arg , message . playing ) ;
2018-12-30 23:41:44 +01:00
} else if ( message . cmd === 'mark-player' ) {
this . pageInfo . markPlayer ( message . name , message . color ) ;
} else if ( message . cmd === 'unmark-player' ) {
this . pageInfo . unmarkPlayer ( ) ;
2019-02-16 01:19:29 +01:00
} else if ( message . cmd === 'autoar-set-manual-tick' ) {
this . pageInfo . setManualTick ( message . arg ) ;
} else if ( message . cmd === 'autoar-tick' ) {
this . pageInfo . tick ( ) ;
2018-12-30 23:41:44 +01:00
}
}
async sleep ( n ) {
return new Promise ( ( resolve , reject ) => setTimeout ( resolve , n ) ) ;
}
async sendMessage _nonpersistent ( message ) {
2019-01-18 00:26:15 +01:00
message = JSON . parse ( JSON . stringify ( message ) ) ; // vue quirk. We should really use vue store instead
2018-12-30 23:41:44 +01:00
if ( BrowserDetect . firefox ) {
return browser . runtime . sendMessage ( message )
} else {
return new Promise ( ( resolve , reject ) => {
try {
if ( BrowserDetect . edge ) {
browser . runtime . sendMessage ( message , function ( response ) {
var r = response ;
resolve ( r ) ;
} ) ;
} else {
chrome . runtime . sendMessage ( message , function ( response ) {
// Chrome/js shittiness mitigation — remove this line and an empty array will be returned
var r = response ;
resolve ( r ) ;
2019-05-09 21:07:40 +02:00
return true ;
2018-12-30 23:41:44 +01:00
} ) ;
}
}
catch ( e ) {
reject ( e ) ;
}
2019-05-09 21:07:40 +02:00
return true ;
2018-12-30 23:41:44 +01:00
} ) ;
}
}
async requestSettings ( ) {
if ( Debug . debug ) {
console . log ( "%c[CommsClient::requestSettings] sending request for congif!" , "background: #11D; color: #aad" ) ;
}
var response = await this . sendMessage _nonpersistent ( { cmd : 'get-config' } ) ;
if ( Debug . debug ) {
console . log ( "%c[CommsClient::requestSettings] received settings response!" , "background: #11D; color: #aad" , response ) ;
}
if ( ! response || response . extensionConf ) {
return Promise . resolve ( false ) ;
}
this . settings . active = JSON . parse ( response . extensionConf ) ;
return Promise . resolve ( true ) ;
}
2019-06-14 02:15:24 +02:00
async sendMessage ( message ) {
await this . sendMessage _nonpersistent ( message ) ;
}
2018-12-30 23:41:44 +01:00
registerVideo ( ) {
if ( Debug . debug && Debug . comms ) {
console . log ( ` [CommsClient::registerVideo] < ${ this . commsId } > ` , "Registering video for current page." ) ;
}
2018-12-31 03:34:26 +01:00
if ( this . pageInfo ) {
2019-07-03 21:55:08 +02:00
if ( this . pageInfo . hasVideo ( ) ) {
2018-12-31 03:34:26 +01:00
this . port . postMessage ( { cmd : "has-video" } ) ;
}
} else {
// this.port.postMessage({cmd: "has-video"});
2018-12-30 23:41:44 +01:00
}
2019-02-16 01:19:29 +01:00
}
sendPerformanceUpdate ( message ) {
this . port . postMessage ( { cmd : 'performance-update' , message : message } ) ;
2018-12-30 23:41:44 +01:00
}
unregisterVideo ( ) {
if ( Debug . debug && Debug . comms ) {
console . log ( ` [CommsClient::unregisterVideo] < ${ this . commsId } > ` , "Unregistering video for current page." ) ;
}
this . port . postMessage ( { cmd : "noVideo" } ) ; // ayymd
}
announceZoom ( scale ) {
this . port . postMessage ( { cmd : "announce-zoom" , zoom : scale } ) ;
this . registerVideo ( )
}
}
export default CommsClient ;