/* globals LivechatVideoCall, cordova, JitsiMeetExternalAPI */ LivechatVideoCall = new (class LivechatVideoCall { constructor() { this.live = new ReactiveVar(false); this.calling = new ReactiveVar(false); if (typeof JitsiMeetExternalAPI === 'undefined') { $.getScript('/packages/rocketchat_videobridge/client/public/external_api.js'); } } askPermissions(callback) { if (Meteor.isCordova) { cordova.plugins.diagnostic.requestCameraAuthorization(() => { cordova.plugins.diagnostic.requestMicrophoneAuthorization(() => { callback(true); }, (error) => { console.error(error); }); }, (error) => { console.error(error); }); } else { return callback(true); } } request() { this.askPermissions((granted) => { if (granted) { this.calling.set(true); Meteor.call('livechat:startVideoCall', visitor.getRoom(true), (error, result) => { if (error) { return; } visitor.subscribeToRoom(result.roomId); // after get ok from server, start the chat this.start(result.domain, result.jitsiRoom); }); } }); } start(domain, room) { Meteor.defer(() => { let interfaceConfig = {}; interfaceConfig['TOOLBAR_BUTTONS'] = '[""]'; interfaceConfig['APP_NAME'] = '"Livechat"'; interfaceConfig['INITIAL_TOOLBAR_TIMEOUT'] = '5000'; interfaceConfig['MIN_WIDTH'] = '300'; interfaceConfig['FILM_STRIP_MAX_HEIGHT'] = '50'; this.api = new JitsiMeetExternalAPI(domain, room, $('.video-call').width(), $('.video-call').height(), $('.video-call .container').get(0), {}, interfaceConfig); this.api.addEventListener('videoConferenceJoined', () => { this.api.executeCommand('toggleFilmStrip', []); }); this.live.set(true); }); } finish() { this.live.set(false); this.calling.set(false); this.api.dispose(); } isActive() { return this.live.get() || this.calling.get(); } isLive() { return this.live.get(); } }); /* exported LivechatVideoCall */