2019-06-20 17:14:03 -04:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
import RavenLogger from './raven';
|
|
|
|
|
|
|
|
import Logger from 'utilities/logging';
|
|
|
|
import Module from 'utilities/module';
|
|
|
|
|
|
|
|
import {DEBUG} from 'utilities/constants';
|
|
|
|
|
|
|
|
import SettingsManager from './settings/index';
|
|
|
|
|
|
|
|
class FFZBridge extends Module {
|
|
|
|
constructor() {
|
|
|
|
super();
|
|
|
|
const start_time = performance.now(),
|
|
|
|
VER = FFZBridge.version_info;
|
|
|
|
|
|
|
|
FFZBridge.instance = this;
|
|
|
|
|
|
|
|
this.name = 'ffz_bridge';
|
|
|
|
this.__state = 0;
|
|
|
|
this.__modules.core = this;
|
|
|
|
|
|
|
|
// ========================================================================
|
|
|
|
// Error Reporting and Logging
|
|
|
|
// ========================================================================
|
|
|
|
|
|
|
|
this.inject('raven', RavenLogger);
|
|
|
|
|
|
|
|
this.log = new Logger(null, null, null, this.raven);
|
|
|
|
this.log.init = true;
|
|
|
|
|
|
|
|
this.core_log = this.log.get('core');
|
|
|
|
|
|
|
|
this.log.info(`FrankerFaceZ Settings Bridge v${VER} (build ${VER.build}${VER.commit ? ` - commit ${VER.commit}` : ''})`);
|
|
|
|
|
|
|
|
|
|
|
|
// ========================================================================
|
|
|
|
// Core Systems
|
|
|
|
// ========================================================================
|
|
|
|
|
|
|
|
this.inject('settings', SettingsManager);
|
|
|
|
|
|
|
|
|
|
|
|
// ========================================================================
|
|
|
|
// Startup
|
|
|
|
// ========================================================================
|
|
|
|
|
|
|
|
this.enable().then(() => {
|
|
|
|
const duration = performance.now() - start_time;
|
|
|
|
this.core_log.info(`Initialization complete in ${duration.toFixed(5)}ms.`);
|
|
|
|
this.log.init = false;
|
|
|
|
}).catch(err => {
|
|
|
|
this.core_log.error(`An error occurred during initialization.`, err);
|
|
|
|
this.log.init = false;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
static get() {
|
|
|
|
return FFZBridge.instance;
|
|
|
|
}
|
|
|
|
|
|
|
|
onEnable() {
|
|
|
|
window.addEventListener('message', this.onMessage.bind(this));
|
|
|
|
this.settings.provider.on('changed', this.onProviderChange, this);
|
|
|
|
this.send({
|
|
|
|
ffz_type: 'ready'
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
onMessage(event) {
|
|
|
|
const msg = event.data;
|
|
|
|
if ( ! msg || ! msg.ffz_type )
|
|
|
|
return;
|
|
|
|
|
|
|
|
if ( msg.ffz_type === 'load' ) {
|
|
|
|
const out = {};
|
|
|
|
for(const [key, value] of this.settings.provider.entries())
|
|
|
|
out[key] = value;
|
|
|
|
|
|
|
|
this.send({
|
|
|
|
ffz_type: 'loaded',
|
|
|
|
data: out
|
|
|
|
});
|
2019-11-25 17:50:20 -05:00
|
|
|
|
|
|
|
} else if ( msg.ffz_type === 'change' )
|
|
|
|
this.onChange(msg);
|
2019-06-20 17:14:03 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
send(msg) { // eslint-disable-line class-methods-use-this
|
|
|
|
try {
|
|
|
|
window.parent.postMessage(msg, '*')
|
|
|
|
} catch(err) { this.log.error('send error', err); /* no-op */ }
|
|
|
|
}
|
|
|
|
|
2019-11-25 17:50:20 -05:00
|
|
|
onChange(msg) {
|
|
|
|
const key = msg.key,
|
|
|
|
value = msg.value,
|
|
|
|
deleted = msg.deleted;
|
|
|
|
|
|
|
|
if ( deleted )
|
|
|
|
this.settings.provider.delete(key);
|
|
|
|
else
|
|
|
|
this.settings.provider.set(key, value);
|
|
|
|
}
|
|
|
|
|
2019-06-20 17:14:03 -04:00
|
|
|
onProviderChange(key, value, deleted) {
|
|
|
|
this.send({
|
|
|
|
ffz_type: 'change',
|
|
|
|
key,
|
|
|
|
value,
|
|
|
|
deleted
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
FFZBridge.Logger = Logger;
|
|
|
|
|
|
|
|
const VER = FFZBridge.version_info = {
|
|
|
|
major: __version_major__,
|
|
|
|
minor: __version_minor__,
|
|
|
|
revision: __version_patch__,
|
|
|
|
extra: __version_prerelease__?.length && __version_prerelease__[0],
|
|
|
|
commit: __git_commit__,
|
|
|
|
build: __webpack_hash__,
|
|
|
|
toString: () =>
|
|
|
|
`${VER.major}.${VER.minor}.${VER.revision}${VER.extra || ''}${DEBUG ? '-dev' : ''}`
|
|
|
|
}
|
|
|
|
|
|
|
|
window.FFZBridge = FFZBridge;
|
|
|
|
window.ffz_bridge = new FFZBridge();
|