import React, { Component } from 'react'; import { withTracker } from 'meteor/react-meteor-data'; import Settings from '/imports/ui/services/settings'; import { defineMessages, injectIntl, intlShape } from 'react-intl'; import PropTypes from 'prop-types'; import { Session } from 'meteor/session'; import { notify } from '/imports/ui/services/notification'; import VideoService from '/imports/ui/components/video-provider/service'; import getFromUserSettings from '/imports/ui/services/users-settings'; import { withModalMounter } from '/imports/ui/components/modal/service'; import Media from './component'; import MediaService, { getSwapLayout, shouldEnableSwapLayout } from './service'; import PresentationPodsContainer from '../presentation-pod/container'; import ScreenshareContainer from '../screenshare/container'; import DefaultContent from '../presentation/default-content/component'; import ExternalVideoContainer from '../external-video-player/container'; import Storage from '../../services/storage/session'; import { withDraggableConsumer } from './webcam-draggable-overlay/context'; const LAYOUT_CONFIG = Meteor.settings.public.layout; const KURENTO_CONFIG = Meteor.settings.public.kurento; const propTypes = { isScreensharing: PropTypes.bool.isRequired, intl: intlShape.isRequired, }; const intlMessages = defineMessages({ screenshareStarted: { id: 'app.media.screenshare.start', description: 'toast to show when a screenshare has started', }, screenshareEnded: { id: 'app.media.screenshare.end', description: 'toast to show when a screenshare has ended', }, screenshareNotSupported: { id: 'app.media.screenshare.notSupported', description: 'Error message for screenshare not supported', }, chromeExtensionError: { id: 'app.video.chromeExtensionError', description: 'Error message for Chrome Extension not installed', }, chromeExtensionErrorLink: { id: 'app.video.chromeExtensionErrorLink', description: 'Error message for Chrome Extension not installed', }, }); class MediaContainer extends Component { componentWillMount() { document.addEventListener('installChromeExtension', this.installChromeExtension.bind(this)); document.addEventListener('screenshareNotSupported', this.screenshareNotSupported.bind(this)); } componentWillReceiveProps(nextProps) { const { isScreensharing, intl, } = this.props; if (isScreensharing !== nextProps.isScreensharing) { if (nextProps.isScreensharing) { notify(intl.formatMessage(intlMessages.screenshareStarted), 'info', 'desktop'); } else { notify(intl.formatMessage(intlMessages.screenshareEnded), 'info', 'desktop'); } } } componentWillUnmount() { document.removeEventListener('installChromeExtension', this.installChromeExtension.bind(this)); document.removeEventListener('screenshareNotSupported', this.screenshareNotSupported.bind(this)); } installChromeExtension() { const { intl } = this.props; const CHROME_DEFAULT_EXTENSION_LINK = KURENTO_CONFIG.chromeDefaultExtensionLink; const CHROME_CUSTOM_EXTENSION_LINK = KURENTO_CONFIG.chromeExtensionLink; const CHROME_EXTENSION_LINK = CHROME_CUSTOM_EXTENSION_LINK === 'LINK' ? CHROME_DEFAULT_EXTENSION_LINK : CHROME_CUSTOM_EXTENSION_LINK; const chromeErrorElement = (