ref(analytics): centralize all event names (#2272)

* ref(analytics): centralize all event names

* squash: fix typo and alpha ordering

* squash: rename file to AnalyticsEvents to parallel lib-jitsi-meet
This commit is contained in:
virtuacoplenny 2017-12-11 10:48:32 -08:00 committed by bgrozev
parent ee1ec42463
commit 9b67e796bd
26 changed files with 899 additions and 111 deletions

View File

@ -15,7 +15,21 @@ import UIEvents from './service/UI/UIEvents';
import UIUtil from './modules/UI/util/UIUtil'; import UIUtil from './modules/UI/util/UIUtil';
import * as JitsiMeetConferenceEvents from './ConferenceEvents'; import * as JitsiMeetConferenceEvents from './ConferenceEvents';
import { initAnalytics, sendAnalyticsEvent } from './react/features/analytics'; import {
CONFERENCE_AUDIO_INITIALLY_MUTED,
CONFERENCE_SHARING_DESKTOP_START,
CONFERENCE_SHARING_DESKTOP_STOP,
CONFERENCE_VIDEO_INITIALLY_MUTED,
DEVICE_LIST_CHANGED_AUDIO_MUTED,
DEVICE_LIST_CHANGED_VIDEO_MUTED,
SELECT_PARTICIPANT_FAILED,
SETTINGS_CHANGE_DEVICE_AUDIO_OUT,
SETTINGS_CHANGE_DEVICE_AUDIO_IN,
SETTINGS_CHANGE_DEVICE_VIDEO,
STREAM_SWITCH_DELAY,
initAnalytics,
sendAnalyticsEvent
} from './react/features/analytics';
import EventEmitter from 'events'; import EventEmitter from 'events';
@ -724,12 +738,12 @@ export default {
.then(([ tracks, con ]) => { .then(([ tracks, con ]) => {
tracks.forEach(track => { tracks.forEach(track => {
if (track.isAudioTrack() && this.isLocalAudioMuted()) { if (track.isAudioTrack() && this.isLocalAudioMuted()) {
sendAnalyticsEvent('conference.audio.initiallyMuted'); sendAnalyticsEvent(CONFERENCE_AUDIO_INITIALLY_MUTED);
logger.log('Audio mute: initially muted'); logger.log('Audio mute: initially muted');
track.mute(); track.mute();
} else if (track.isVideoTrack() } else if (track.isVideoTrack()
&& this.isLocalVideoMuted()) { && this.isLocalVideoMuted()) {
sendAnalyticsEvent('conference.video.initiallyMuted'); sendAnalyticsEvent(CONFERENCE_VIDEO_INITIALLY_MUTED);
logger.log('Video mute: initially muted'); logger.log('Video mute: initially muted');
track.mute(); track.mute();
} }
@ -1434,8 +1448,7 @@ export default {
promise = createLocalTracksF({ devices: [ 'video' ] }) promise = createLocalTracksF({ devices: [ 'video' ] })
.then(([ stream ]) => this.useVideoStream(stream)) .then(([ stream ]) => this.useVideoStream(stream))
.then(() => { .then(() => {
sendAnalyticsEvent( sendAnalyticsEvent(CONFERENCE_SHARING_DESKTOP_STOP);
'conference.sharingDesktop.stop');
logger.log('switched back to local video'); logger.log('switched back to local video');
if (!this.localVideo && wasVideoMuted) { if (!this.localVideo && wasVideoMuted) {
return Promise.reject('No local video to be muted!'); return Promise.reject('No local video to be muted!');
@ -1614,7 +1627,7 @@ export default {
.then(stream => this.useVideoStream(stream)) .then(stream => this.useVideoStream(stream))
.then(() => { .then(() => {
this.videoSwitchInProgress = false; this.videoSwitchInProgress = false;
sendAnalyticsEvent('conference.sharingDesktop.start'); sendAnalyticsEvent(CONFERENCE_SHARING_DESKTOP_START);
logger.log('sharing local desktop'); logger.log('sharing local desktop');
}) })
.catch(error => { .catch(error => {
@ -1910,8 +1923,7 @@ export default {
room.selectParticipant(id); room.selectParticipant(id);
} catch (e) { } catch (e) {
sendAnalyticsEvent( sendAnalyticsEvent(SELECT_PARTICIPANT_FAILED);
'selectParticipant.failed');
reportError(e); reportError(e);
} }
}); });
@ -2151,7 +2163,7 @@ export default {
// Longer delays will be caused by something else and will just // Longer delays will be caused by something else and will just
// poison the data. // poison the data.
if (delay < 2000) { if (delay < 2000) {
sendAnalyticsEvent('stream.switch.delay', { value: delay }); sendAnalyticsEvent(STREAM_SWITCH_DELAY, { value: delay });
} }
}); });
@ -2178,7 +2190,7 @@ export default {
cameraDeviceId => { cameraDeviceId => {
const videoWasMuted = this.isLocalVideoMuted(); const videoWasMuted = this.isLocalVideoMuted();
sendAnalyticsEvent('settings.changeDevice.video'); sendAnalyticsEvent(SETTINGS_CHANGE_DEVICE_VIDEO);
createLocalTracksF({ createLocalTracksF({
devices: [ 'video' ], devices: [ 'video' ],
cameraDeviceId, cameraDeviceId,
@ -2217,8 +2229,7 @@ export default {
micDeviceId => { micDeviceId => {
const audioWasMuted = this.isLocalAudioMuted(); const audioWasMuted = this.isLocalAudioMuted();
sendAnalyticsEvent( sendAnalyticsEvent(SETTINGS_CHANGE_DEVICE_AUDIO_IN);
'settings.changeDevice.audioIn');
createLocalTracksF({ createLocalTracksF({
devices: [ 'audio' ], devices: [ 'audio' ],
cameraDeviceId: null, cameraDeviceId: null,
@ -2248,8 +2259,7 @@ export default {
APP.UI.addListener( APP.UI.addListener(
UIEvents.AUDIO_OUTPUT_DEVICE_CHANGED, UIEvents.AUDIO_OUTPUT_DEVICE_CHANGED,
audioOutputDeviceId => { audioOutputDeviceId => {
sendAnalyticsEvent( sendAnalyticsEvent(SETTINGS_CHANGE_DEVICE_AUDIO_OUT);
'settings.changeDevice.audioOut');
APP.settings.setAudioOutputDeviceId(audioOutputDeviceId) APP.settings.setAudioOutputDeviceId(audioOutputDeviceId)
.then(() => logger.log('changed audio output device')) .then(() => logger.log('changed audio output device'))
.catch(err => { .catch(err => {
@ -2514,7 +2524,7 @@ export default {
// If audio was muted before, or we unplugged current device // If audio was muted before, or we unplugged current device
// and selected new one, then mute new audio track. // and selected new one, then mute new audio track.
if (audioWasMuted) { if (audioWasMuted) {
sendAnalyticsEvent('deviceListChanged.audio.muted'); sendAnalyticsEvent(DEVICE_LIST_CHANGED_AUDIO_MUTED);
logger.log('Audio mute: device list changed'); logger.log('Audio mute: device list changed');
muteLocalAudio(true); muteLocalAudio(true);
} }
@ -2522,7 +2532,7 @@ export default {
// If video was muted before, or we unplugged current device // If video was muted before, or we unplugged current device
// and selected new one, then mute new video track. // and selected new one, then mute new video track.
if (!this.isSharingScreen && videoWasMuted) { if (!this.isSharingScreen && videoWasMuted) {
sendAnalyticsEvent('deviceListChanged.video.muted'); sendAnalyticsEvent(DEVICE_LIST_CHANGED_VIDEO_MUTED);
logger.log('Video mute: device list changed'); logger.log('Video mute: device list changed');
muteLocalVideo(true); muteLocalVideo(true);
} }

View File

@ -2,7 +2,11 @@
import * as JitsiMeetConferenceEvents from '../../ConferenceEvents'; import * as JitsiMeetConferenceEvents from '../../ConferenceEvents';
import { parseJWTFromURLParams } from '../../react/features/base/jwt'; import { parseJWTFromURLParams } from '../../react/features/base/jwt';
import { sendAnalyticsEvent } from '../../react/features/analytics'; import {
API_TOGGLE_AUDIO,
API_TOGGLE_VIDEO,
sendAnalyticsEvent
} from '../../react/features/analytics';
import { getJitsiMeetTransport } from '../transport'; import { getJitsiMeetTransport } from '../transport';
import { API_ID } from './constants'; import { API_ID } from './constants';
@ -55,12 +59,12 @@ function initCommands() {
'display-name': 'display-name':
APP.conference.changeLocalDisplayName.bind(APP.conference), APP.conference.changeLocalDisplayName.bind(APP.conference),
'toggle-audio': () => { 'toggle-audio': () => {
sendAnalyticsEvent('api.toggle.audio'); sendAnalyticsEvent(API_TOGGLE_AUDIO);
logger.log('Audio toggle: API command received'); logger.log('Audio toggle: API command received');
APP.conference.toggleAudioMuted(false /* no UI */); APP.conference.toggleAudioMuted(false /* no UI */);
}, },
'toggle-video': () => { 'toggle-video': () => {
sendAnalyticsEvent('api.toggle.video'); sendAnalyticsEvent(API_TOGGLE_VIDEO);
logger.log('Video toggle: API command received'); logger.log('Video toggle: API command received');
APP.conference.toggleVideoMuted(false /* no UI */); APP.conference.toggleVideoMuted(false /* no UI */);
}, },

View File

@ -24,6 +24,10 @@ import {
JitsiRecordingStatus JitsiRecordingStatus
} from '../../../react/features/base/lib-jitsi-meet'; } from '../../../react/features/base/lib-jitsi-meet';
import { import {
RECORDING_CANCELED,
RECORDING_CLICKED,
RECORDING_STARTED,
RECORDING_STOPPED,
sendAnalyticsEvent sendAnalyticsEvent
} from '../../../react/features/analytics'; } from '../../../react/features/analytics';
import { setToolboxEnabled } from '../../../react/features/toolbox'; import { setToolboxEnabled } from '../../../react/features/toolbox';
@ -467,7 +471,7 @@ const Recording = {
return; return;
} }
sendAnalyticsEvent('recording.clicked'); sendAnalyticsEvent(RECORDING_CLICKED);
switch (this.currentState) { switch (this.currentState) {
case JitsiRecordingStatus.ON: case JitsiRecordingStatus.ON:
case JitsiRecordingStatus.RETRYING: case JitsiRecordingStatus.RETRYING:
@ -475,7 +479,7 @@ const Recording = {
_showStopRecordingPrompt(this.recordingType).then( _showStopRecordingPrompt(this.recordingType).then(
() => { () => {
this.eventEmitter.emit(UIEvents.RECORDING_TOGGLED); this.eventEmitter.emit(UIEvents.RECORDING_TOGGLED);
sendAnalyticsEvent('recording.stopped'); sendAnalyticsEvent(RECORDING_STOPPED);
}, },
() => {}); // eslint-disable-line no-empty-function () => {}); // eslint-disable-line no-empty-function
break; break;
@ -488,11 +492,11 @@ const Recording = {
this.eventEmitter.emit( this.eventEmitter.emit(
UIEvents.RECORDING_TOGGLED, UIEvents.RECORDING_TOGGLED,
{ streamId }); { streamId });
sendAnalyticsEvent('recording.started'); sendAnalyticsEvent(RECORDING_STARTED);
}) })
.catch(reason => { .catch(reason => {
if (reason === APP.UI.messageHandler.CANCEL) { if (reason === APP.UI.messageHandler.CANCEL) {
sendAnalyticsEvent('recording.canceled'); sendAnalyticsEvent(RECORDING_CANCELED);
} else { } else {
logger.error(reason); logger.error(reason);
} }
@ -502,7 +506,7 @@ const Recording = {
this.eventEmitter.emit( this.eventEmitter.emit(
UIEvents.RECORDING_TOGGLED, UIEvents.RECORDING_TOGGLED,
{ token: this.predefinedToken }); { token: this.predefinedToken });
sendAnalyticsEvent('recording.started'); sendAnalyticsEvent(RECORDING_STARTED);
return; return;
} }
@ -511,11 +515,11 @@ const Recording = {
this.eventEmitter.emit( this.eventEmitter.emit(
UIEvents.RECORDING_TOGGLED, UIEvents.RECORDING_TOGGLED,
{ token }); { token });
sendAnalyticsEvent('recording.started'); sendAnalyticsEvent(RECORDING_STARTED);
}) })
.catch(reason => { .catch(reason => {
if (reason === APP.UI.messageHandler.CANCEL) { if (reason === APP.UI.messageHandler.CANCEL) {
sendAnalyticsEvent('recording.canceled'); sendAnalyticsEvent(RECORDING_CANCELED);
} else { } else {
logger.error(reason); logger.error(reason);
} }

View File

@ -10,7 +10,17 @@ import VideoLayout from '../videolayout/VideoLayout';
import LargeContainer from '../videolayout/LargeContainer'; import LargeContainer from '../videolayout/LargeContainer';
import Filmstrip from '../videolayout/Filmstrip'; import Filmstrip from '../videolayout/Filmstrip';
import { sendAnalyticsEvent } from '../../../react/features/analytics'; import {
SHARED_VIDEO_ALREADY_SHARED,
SHARED_VIDEO_AUDIO_MUTED,
SHARED_VIDEO_AUDIO_UNMUTED,
SHARED_VIDEO_CANCELED,
SHARED_VIDEO_PAUSED,
SHARED_VIDEO_STARTED,
SHARED_VIDEO_STOPPED,
SHARED_VIDEO_VOLUME_CHANGED,
sendAnalyticsEvent
} from '../../../react/features/analytics';
import { import {
participantJoined, participantJoined,
participantLeft participantLeft
@ -85,11 +95,11 @@ export default class SharedVideoManager {
url => { url => {
this.emitter.emit( this.emitter.emit(
UIEvents.UPDATE_SHARED_VIDEO, url, 'start'); UIEvents.UPDATE_SHARED_VIDEO, url, 'start');
sendAnalyticsEvent('sharedvideo.started'); sendAnalyticsEvent(SHARED_VIDEO_STARTED);
}, },
err => { err => {
logger.log('SHARED VIDEO CANCELED', err); logger.log('SHARED VIDEO CANCELED', err);
sendAnalyticsEvent('sharedvideo.canceled'); sendAnalyticsEvent(SHARED_VIDEO_CANCELED);
} }
); );
@ -109,7 +119,7 @@ export default class SharedVideoManager {
} }
this.emitter.emit( this.emitter.emit(
UIEvents.UPDATE_SHARED_VIDEO, this.url, 'stop'); UIEvents.UPDATE_SHARED_VIDEO, this.url, 'stop');
sendAnalyticsEvent('sharedvideo.stoped'); sendAnalyticsEvent(SHARED_VIDEO_STOPPED);
}, },
() => {}); // eslint-disable-line no-empty-function () => {}); // eslint-disable-line no-empty-function
} else { } else {
@ -117,7 +127,7 @@ export default class SharedVideoManager {
descriptionKey: 'dialog.alreadySharedVideoMsg', descriptionKey: 'dialog.alreadySharedVideoMsg',
titleKey: 'dialog.alreadySharedVideoTitle' titleKey: 'dialog.alreadySharedVideoTitle'
}); });
sendAnalyticsEvent('sharedvideo.alreadyshared'); sendAnalyticsEvent(SHARED_VIDEO_ALREADY_SHARED);
} }
} }
@ -226,7 +236,7 @@ export default class SharedVideoManager {
// eslint-disable-next-line eqeqeq // eslint-disable-next-line eqeqeq
} else if (event.data == YT.PlayerState.PAUSED) { } else if (event.data == YT.PlayerState.PAUSED) {
self.smartAudioUnmute(); self.smartAudioUnmute();
sendAnalyticsEvent('sharedvideo.paused'); sendAnalyticsEvent(SHARED_VIDEO_PAUSED);
} }
// eslint-disable-next-line eqeqeq // eslint-disable-next-line eqeqeq
self.fireSharedVideoEvent(event.data == YT.PlayerState.PAUSED); self.fireSharedVideoEvent(event.data == YT.PlayerState.PAUSED);
@ -258,7 +268,7 @@ export default class SharedVideoManager {
} else if (event.data.volume <= 0 || event.data.muted) { } else if (event.data.volume <= 0 || event.data.muted) {
self.smartAudioUnmute(); self.smartAudioUnmute();
} }
sendAnalyticsEvent('sharedvideo.volumechanged'); sendAnalyticsEvent(SHARED_VIDEO_VOLUME_CHANGED);
}; };
window.onPlayerReady = function(event) { window.onPlayerReady = function(event) {
@ -564,7 +574,7 @@ export default class SharedVideoManager {
if (APP.conference.isLocalAudioMuted() if (APP.conference.isLocalAudioMuted()
&& !this.mutedWithUserInteraction && !this.mutedWithUserInteraction
&& !this.isSharedVideoVolumeOn()) { && !this.isSharedVideoVolumeOn()) {
sendAnalyticsEvent('sharedvideo.audio.unmuted'); sendAnalyticsEvent(SHARED_VIDEO_AUDIO_UNMUTED);
logger.log('Shared video: audio unmuted'); logger.log('Shared video: audio unmuted');
this.emitter.emit(UIEvents.AUDIO_MUTED, false, false); this.emitter.emit(UIEvents.AUDIO_MUTED, false, false);
this.showMicMutedPopup(false); this.showMicMutedPopup(false);
@ -578,7 +588,7 @@ export default class SharedVideoManager {
smartAudioMute() { smartAudioMute() {
if (!APP.conference.isLocalAudioMuted() if (!APP.conference.isLocalAudioMuted()
&& this.isSharedVideoVolumeOn()) { && this.isSharedVideoVolumeOn()) {
sendAnalyticsEvent('sharedvideo.audio.muted'); sendAnalyticsEvent(SHARED_VIDEO_AUDIO_MUTED);
logger.log('Shared video: audio muted'); logger.log('Shared video: audio muted');
this.emitter.emit(UIEvents.AUDIO_MUTED, true, false); this.emitter.emit(UIEvents.AUDIO_MUTED, true, false);
this.showMicMutedPopup(true); this.showMicMutedPopup(true);

View File

@ -3,7 +3,11 @@ import UIUtil from '../../util/UIUtil';
import UIEvents from '../../../../service/UI/UIEvents'; import UIEvents from '../../../../service/UI/UIEvents';
import Settings from '../../../settings/Settings'; import Settings from '../../../settings/Settings';
import { sendAnalyticsEvent } from '../../../../react/features/analytics'; import {
AUTHENTICATE_LOGIN_CLICKED,
AUTHENTICATE_LOGOUT_CLICKED,
sendAnalyticsEvent
} from '../../../../react/features/analytics';
const sidePanelsContainerId = 'sideToolbarContainer'; const sidePanelsContainerId = 'sideToolbarContainer';
const htmlStr = ` const htmlStr = `
@ -91,7 +95,7 @@ export default {
* *
*/ */
function loginClicked() { function loginClicked() {
sendAnalyticsEvent('authenticate.login.clicked'); sendAnalyticsEvent(AUTHENTICATE_LOGIN_CLICKED);
emitter.emit(UIEvents.AUTH_CLICKED); emitter.emit(UIEvents.AUTH_CLICKED);
} }
@ -104,7 +108,7 @@ export default {
const titleKey = 'dialog.logoutTitle'; const titleKey = 'dialog.logoutTitle';
const msgKey = 'dialog.logoutQuestion'; const msgKey = 'dialog.logoutQuestion';
sendAnalyticsEvent('authenticate.logout.clicked'); sendAnalyticsEvent(AUTHENTICATE_LOGOUT_CLICKED);
// Ask for confirmation // Ask for confirmation
APP.UI.messageHandler.openTwoButtonDialog({ APP.UI.messageHandler.openTwoButtonDialog({

View File

@ -5,7 +5,10 @@ import { setFilmstripVisibility } from '../../../react/features/filmstrip';
import UIEvents from '../../../service/UI/UIEvents'; import UIEvents from '../../../service/UI/UIEvents';
import UIUtil from '../util/UIUtil'; import UIUtil from '../util/UIUtil';
import { sendAnalyticsEvent } from '../../../react/features/analytics'; import {
TOOLBAR_FILMSTRIP_TOGGLED,
sendAnalyticsEvent
} from '../../../react/features/analytics';
const Filmstrip = { const Filmstrip = {
/** /**
@ -150,7 +153,7 @@ const Filmstrip = {
return; return;
} }
if (sendAnalytics) { if (sendAnalytics) {
sendAnalyticsEvent('toolbar.filmstrip.toggled'); sendAnalyticsEvent(TOOLBAR_FILMSTRIP_TOGGLED);
} }
this.filmstrip.toggleClass('hidden'); this.filmstrip.toggleClass('hidden');

View File

@ -1,7 +1,13 @@
/* global APP, $, interfaceConfig */ /* global APP, $, interfaceConfig */
import { toggleDialog } from '../../react/features/base/dialog'; import { toggleDialog } from '../../react/features/base/dialog';
import { sendAnalyticsEvent } from '../../react/features/analytics'; import {
SHORTCUT_HELP,
SHORTCUT_SPEAKER_STATS_CLICKED,
SHORTCUT_TALK_CLICKED,
SHORTCUT_TALK_RELEASED,
sendAnalyticsEvent
} from '../../react/features/analytics';
import { KeyboardShortcutsDialog } import { KeyboardShortcutsDialog }
from '../../react/features/keyboard-shortcuts'; from '../../react/features/keyboard-shortcuts';
import { SpeakerStats } from '../../react/features/speaker-stats'; import { SpeakerStats } from '../../react/features/speaker-stats';
@ -66,7 +72,7 @@ const KeyboardShortcut = {
|| $(':focus').is('textarea'))) { || $(':focus').is('textarea'))) {
if (this._getKeyboardKey(e).toUpperCase() === ' ') { if (this._getKeyboardKey(e).toUpperCase() === ' ') {
if (APP.conference.isLocalAudioMuted()) { if (APP.conference.isLocalAudioMuted()) {
sendAnalyticsEvent('shortcut.talk.released'); sendAnalyticsEvent(SHORTCUT_TALK_RELEASED);
logger.log('Talk shortcut released'); logger.log('Talk shortcut released');
APP.conference.muteAudio(false); APP.conference.muteAudio(false);
} }
@ -169,7 +175,7 @@ const KeyboardShortcut = {
*/ */
_initGlobalShortcuts() { _initGlobalShortcuts() {
this.registerShortcut('?', null, () => { this.registerShortcut('?', null, () => {
sendAnalyticsEvent('shortcut.shortcut.help'); sendAnalyticsEvent(SHORTCUT_HELP);
APP.store.dispatch(toggleDialog(KeyboardShortcutsDialog, { APP.store.dispatch(toggleDialog(KeyboardShortcutsDialog, {
shortcutDescriptions: _shortcutsHelp shortcutDescriptions: _shortcutsHelp
})); }));
@ -178,7 +184,7 @@ const KeyboardShortcut = {
// register SPACE shortcut in two steps to insure visibility of help // register SPACE shortcut in two steps to insure visibility of help
// message // message
this.registerShortcut(' ', null, () => { this.registerShortcut(' ', null, () => {
sendAnalyticsEvent('shortcut.talk.clicked'); sendAnalyticsEvent(SHORTCUT_TALK_CLICKED);
logger.log('Talk shortcut pressed'); logger.log('Talk shortcut pressed');
APP.conference.muteAudio(true); APP.conference.muteAudio(true);
}); });
@ -186,7 +192,7 @@ const KeyboardShortcut = {
if (!interfaceConfig.filmStripOnly) { if (!interfaceConfig.filmStripOnly) {
this.registerShortcut('T', null, () => { this.registerShortcut('T', null, () => {
sendAnalyticsEvent('shortcut.speakerStats.clicked'); sendAnalyticsEvent(SHORTCUT_SPEAKER_STATS_CLICKED);
APP.store.dispatch(toggleDialog(SpeakerStats, { APP.store.dispatch(toggleDialog(SpeakerStats, {
conference: APP.conference conference: APP.conference
})); }));

View File

@ -0,0 +1,663 @@
/**
* The target of a pin or unpin event was the local participant.
*
* Known full event names:
* pinned.local
* unpinned.local
*
* @type {String}
*/
export const _LOCAL = 'local';
/**
* The target of a pin or unpin event was a remote participant.
*
* Known full event names:
* pinned.remote
* unpinned.remote
*
* @type {String}
*/
export const _REMOTE = 'remote';
/**
* Audio mute toggled was triggered through the jitsi-meet api.
*
* @type {String}
*/
export const API_TOGGLE_AUDIO = 'api.toggle.audio';
/**
* Video mute toggling was triggered through the jitsi-meet api.
*
* @type {String}
*/
export const API_TOGGLE_VIDEO = 'api.toggle.video';
/**
* Audio only mode has been turned off.
*
* @type {String}
*/
export const AUDIO_ONLY_DISABLED = 'audioonly.disabled';
/**
* The login button in the profile pane was clicked.
*
* @type {String}
*/
export const AUTHENTICATE_LOGIN_CLICKED = 'authenticate.login.clicked';
/**
* The logout button in the profile pane was clicked.
*
* @type {String}
*/
export const AUTHENTICATE_LOGOUT_CLICKED = 'authenticate.logout.clicked';
/**
* Performing a mute or unmute event based on a callkit setMuted event.
*
* Known full event names:
* callkit.audio.muted
* callkit.audio.unmuted
*
* @type {String}
*/
export const CALLKIT_AUDIO_ = 'callkit.audio';
/**
* Toggling remote and local video display when entering or exiting backgrounded
* app state.
*
* @type {String}
*/
export const CALLKIT_BACKGROUND_VIDEO_MUTED = 'callkit.background.video.muted';
/**
* The local participant joined audio muted.
*
* @type {String}
*/
export const CONFERENCE_AUDIO_INITIALLY_MUTED
= 'conference.audio.initiallyMuted';
/**
* The local participant has started desktop sharing.
*
* @type {String}
*/
export const CONFERENCE_SHARING_DESKTOP_START
= 'conference.sharingDesktop.start';
/**
* The local participant was desktop sharing but has stopped.
*
* @type {String}
*/
export const CONFERENCE_SHARING_DESKTOP_STOP
= 'conference.sharingDesktop.stop';
/**
* The local participant joined video muted.
*
* @type {String}
*/
export const CONFERENCE_VIDEO_INITIALLY_MUTED
= 'conference.video.initiallyMuted';
/**
* The list of known input/output devices was changed and new audio input has
* been used and should start as muted.
*
* @type {String}
*/
export const DEVICE_LIST_CHANGED_AUDIO_MUTED = 'deviceListChanged.audio.muted';
/**
* The list of known devices was changed and new video input has been used
* and should start as muted.
*
* @type {String}
*/
export const DEVICE_LIST_CHANGED_VIDEO_MUTED = 'deviceListChanged.video.muted';
/**
* The feedback dialog is displayed.
*
* @type {String}
*/
export const FEEDBACK_OPEN = 'feedback.open';
/**
* Page reload overlay has been displayed.
*
* Properties: label: reason for reload
*
* @type {String}
*/
export const PAGE_RELOAD = 'page.reload';
/**
* The local participant has pinned a participant to remain on large video.
*
* Known full event names:
* pinned.local
* pinned.remote
*
* @type {String}
*/
export const PINNED_ = 'pinned';
/**
* Recording start was attempted but the local user canceled the request.
*
* @type {String}
*/
export const RECORDING_CANCELED = 'recording.canceled';
/**
* Recording button has been clicked.
*
* @type {String}
*/
export const RECORDING_CLICKED = 'recording.clicked';
/**
* Recording has been started.
*
* @type {String}
*/
export const RECORDING_STARTED = 'recording.started';
/**
* Recording has been stopped by clicking the recording button.
*
* @type {String}
*/
export const RECORDING_STOPPED = 'recording.stopped';
/**
* Clicked on the button to kick a remote participant from the conference.
*
* Properties: value: 1, label: participantID
*
* @type {String}
*/
export const REMOTE_VIDEO_MENU_KICK = 'remotevideomenu.kick';
/**
* Clicked on the button to audio mute a remote participant.
*
* Properties: value: 1, label: participantID
*
* @type {String}
*/
export const REMOTE_VIDEO_MENU_MUTE_CLICKED = 'remotevideomenu.mute.clicked';
/**
* Confirmed the muting of a remote participant.
*
* Properties: value: 1, label: participantID
*
* @type {String}
*/
export const REMOTE_VIDEO_MENU_MUTE_CONFIRMED
= 'remotevideomenu.mute.confirmed';
/**
* Clicked on the remote control option in the remote menu.
*
* Properties: value: 1, label: participantID
*
* Known full event names:
* remotevideomenu.remotecontrol.stop
* remotevideomenu.remotecontrol.start
*
* @type {String}
*/
export const REMOTE_VIDEO_MENU_REMOTE_CONTROL_
= 'remotevideomenu.remotecontrol';
/**
* Replacing the currently used track of specified type with a new track of the
* same type. The event is fired when changing devices.
*
* Known full event names:
* replacetrack.audio
* replacetrack.video
*
* @type {String}
*/
export const REPLACE_TRACK_ = 'replacetrack';
/**
* The local participant failed to start receiving high quality video from
* a remote participant, which is usually initiated by the remote participant
* being put on large video.
*
* @type {String}
*/
export const SELECT_PARTICIPANT_FAILED = 'selectParticipant.failed';
/**
* The local participant began using a different audio input device (mic).
*
* @type {String}
*/
export const SETTINGS_CHANGE_DEVICE_AUDIO_IN = 'settings.changeDevice.audioIn';
/**
* The local participant began using a different audio output device (speaker).
*
* @type {String}
*/
export const SETTINGS_CHANGE_DEVICE_AUDIO_OUT
= 'settings.changeDevice.audioOut';
/**
* The local participant began using a different camera.
*
* @type {String}
*/
export const SETTINGS_CHANGE_DEVICE_VIDEO = 'settings.changeDevice.video';
/**
* Attempted to start sharing a YouTube video but one is already being shared.
*
* @type {String}
*/
export const SHARED_VIDEO_ALREADY_SHARED = 'sharedvideo.alreadyshared';
/**
* The local participant's mic was muted automatically during a shared video.
*
* @type {String}
*/
export const SHARED_VIDEO_AUDIO_MUTED = 'sharedvideo.audio.muted';
/**
* The local participant's mic was unmuted automatically during a shared video.
*
* @type {String}
*/
export const SHARED_VIDEO_AUDIO_UNMUTED = 'sharedvideo.audio.unmuted';
/**
* Canceled the prompt to enter a YouTube video to share.
*
* @type {String}
*/
export const SHARED_VIDEO_CANCELED = 'sharedvideo.canceled';
/**
* The shared YouTube video has been paused.
*
* @type {String}
*/
export const SHARED_VIDEO_PAUSED = 'sharedvideo.paused';
/**
* Started sharing a YouTube video.
*
* @type {String}
*/
export const SHARED_VIDEO_STARTED = 'sharedvideo.started';
/**
* Confirmed stoppage of the shared YouTube video.
*
* @type {String}
*/
export const SHARED_VIDEO_STOPPED = 'sharedvideo.stoped';
/**
* The shared YouTube video had its volume change.
*
* @type {String}
*/
export const SHARED_VIDEO_VOLUME_CHANGED = 'sharedvideo.volumechanged';
/**
* Pressed the keyboard shortcut for toggling audio mute.
*
* @type {String}
*/
export const SHORTCUT_AUDIO_MUTE_TOGGLED = 'shortcut.audiomute.toggled';
/**
* Pressed the keyboard shortcut for toggling chat panel display.
*
* @type {String}
*/
export const SHORTCUT_CHAT_TOGGLED = 'shortcut.chat.toggled';
/**
* Toggled the display of the keyboard shortcuts help dialog.
*
* @type {String}
*/
export const SHORTCUT_HELP = 'shortcut.shortcut.help';
/**
* Pressed the keyboard shortcut for togglgin raise hand status.
*
* @type {String}
*/
export const SHORTCUT_RAISE_HAND_CLICKED = 'shortcut.raisehand.clicked';
/**
* Pressed the keyboard shortcut for toggling screenshare.
*
* @type {String}
*/
export const SHORTCUT_SCREEN_TOGGLED = 'shortcut.screen.toggled';
/**
* Toggled the display of the speaker stats dialog.
*
* @type {String}
*/
export const SHORTCUT_SPEAKER_STATS_CLICKED = 'shortcut.speakerStats.clicked';
/**
* Started pressing the key that undoes audio mute while the key is pressed.
*
* @type {String}
*/
export const SHORTCUT_TALK_CLICKED = 'shortcut.talk.clicked';
/**
* Released the key used to talk while audio muted, returning to the audio muted
* state.
*
* @type {String}
*/
export const SHORTCUT_TALK_RELEASED = 'shortcut.talk.released';
/**
* Toggling video mute state using a keyboard shortcut.
*
* @type {String}
*/
export const SHORTCUT_VIDEO_MUTE_TOGGLED = 'shortcut.videomute.toggled';
/**
* The config specifies the local participant should start with audio only mode
* enabled or disabled.
*
* Known full event names:
* startaudioonly.enabled
* startaudioonly.disabled
*
* @type {String}
*/
export const START_AUDIO_ONLY_ = 'startaudioonly';
/**
* The config specifies the local participant should start with audio mute
* enabled or disabled.
*
* Known full event names:
* startmuted.client.audio.muted
* startmuted.client.audio.unmuted
*
* @type {String}
*/
export const START_MUTED_CLIENT_AUDIO_ = 'startmuted.client.audio';
/**
* The config specifies the local participant should start with video mute
* enabled or disabled.
*
* Known full event names:
* startmuted.client.video.muted
* startmuted.client.video.unmuted
*
* @type {String}
*/
export const START_MUTED_CLIENT_VIDEO_ = 'startmuted.client.video';
/**
* The local participant has received an event from the server stating to
* start audio muted or unmuted.
*
* Known full event names:
* startmuted.server.audio.muted
* startmuted.server.audio.unmuted
*
* @type {String}
*/
export const START_MUTED_SERVER_AUDIO_ = 'startmuted.server.audio';
/**
* The local participant has received an event from the server stating to
* start video muted or unmuted.
*
* Known full event names:
* startmuted.server.video.muted
* startmuted.server.video.unmuted
*
* @type {String}
*/
export const START_MUTED_SERVER_VIDEO_ = 'startmuted.server.video';
/**
* How long it took to switch between simulcast streams.
*
* Properties: value
*
* @type {String}
*/
export const STREAM_SWITCH_DELAY = 'stream.switch.delay';
/**
* Automatically changing the mute state of a media track in order to match
* the current stored state in redux.
*
* Known full event names:
* synctrackstate.audio.muted
* synctrackstate.audio.unmuted
* synctrackstate.video.muted
* synctrackstate.video.unmuted
*
* @type {String}
*/
export const SYNC_TRACK_STATE_ = 'synctrackstate';
/**
* Clicked the toolbar button to enter audio mute state.
*
* @type {String}
*/
export const TOOLBAR_AUDIO_MUTED = 'toolbar.audio.muted';
/**
* Clicked within a toolbar menu to enable audio only.
*
* @type {String}
*/
export const TOOLBAR_AUDIO_ONLY_ENABLED = 'toolbar.audioonly.enabled';
/**
* Clicked the toolbar button to exit audio mute state.
*
* @type {String}
*/
export const TOOLBAR_AUDIO_UNMUTED = 'toolbar.audio.unmuted';
/**
* Clicked the toolbar button for toggling chat panel display.
*
* @type {String}
*/
export const TOOLBAR_CHAT_TOGGLED = 'toolbar.chat.toggled';
/**
* Clicked the toolbar button for toggling contact list panel display.
*
* @type {String}
*/
export const TOOLBAR_CONTACTS_TOGGLED = 'toolbar.contacts.toggled';
/**
* Clicked the toolbar button to toggle display of etherpad (collaborative
* document writing).
*
* @type {String}
*/
export const TOOLBAR_ETHERPACK_CLICKED = 'toolbar.etherpad.clicked';
/**
* Pressed the keyboard shortcut to open the device selection window while in
* filmstrip only mode.
*
* @type {String}
*/
export const TOOLBAR_FILMSTRIP_ONLY_DEVICE_SELECTION_TOGGLED
= 'toolbar.fodeviceselection.toggled';
/**
* Visibility of the filmstrip has been toggled.
*
* @type {String}
*/
export const TOOLBAR_FILMSTRIP_TOGGLED = 'toolbar.filmstrip.toggled';
/**
* Clicked the toolbar button to toggle display full screen mode.
*
* @type {String}
*/
export const TOOLBAR_FULLSCREEN_ENABLED = 'toolbar.fullscreen.enabled';
/**
* Clicked the toolbar button to leave the conference.
*
* @type {String}
*/
export const TOOLBAR_HANGUP = 'toolbar.hangup';
/**
* Clicked the toolbar button to open the invite dialog.
*
* @type {String}
*/
export const TOOLBAR_INVITE_CLICKED = 'toolbar.invite.clicked';
/**
* The invite dialog has been dismissed.
*
* @type {String}
*/
export const TOOLBAR_INVITE_CLOSE = 'toolbar.invite.close';
/**
* Clicked the toolbar button for toggling the display of the profile panel.
*
* @type {String}
*/
export const TOOLBAR_PROFILE_TOGGLED = 'toolbar.profile.toggled';
/**
* Clicked the toolbar button for toggling raise hand status.
*
* @type {String}
*/
export const TOOLBAR_RAISE_HAND_CLICKED = 'toolbar.raiseHand.clicked';
/**
* Clicked the toolbar button to stop screensharing.
*
* @type {String}
*/
export const TOOLBAR_SCREEN_DISABLED = 'toolbar.screen.disabled';
/**
* Clicked the toolbar button to start screensharing.
*
* @type {String}
*/
export const TOOLBAR_SCREEN_ENABLED = 'toolbar.screen.enabled';
/**
* Clicked the toolbar button for toggling display of the settings menu.
*
* @type {String}
*/
export const TOOLBAR_SETTINGS_TOGGLED = 'toolbar.settings.toggled';
/**
* Clicked the toolbar button for toggling a shared YouTube video.
*
* @type {String}
*/
export const TOOLBAR_SHARED_VIDEO_CLICKED = 'toolbar.sharedvideo.clicked';
/**
* Clicked the toolbar button to open the dial-out feature.
*
* @type {String}
*/
export const TOOLBAR_SIP_DIALPAD_CLICKED = 'toolbar.sip.dialpad.clicked';
/**
* In the mobile app, clicked on the toolbar button to toggle video mute.
*
* Known full event names:
* toolbar.video.muted
* toolbar.video.unmuted
*
* @type {String}
*/
export const TOOLBAR_VIDEO_ = 'toolbar.video';
/**
* Clicked on the toolbar to video unmute.
*
* @type {String}
*/
export const TOOLBAR_VIDEO_DISABLED = 'toolbar.video.disabled';
/**
* Clicked on the toolbar to video mute.
*
* @type {String}
*/
export const TOOLBAR_VIDEO_ENABLED = 'toolbar.video.enabled';
/**
* Clicked within a toolbar menu to set max incoming video quality to high
* definition.
*
* @type {String}
*/
export const TOOLBAR_VIDEO_QUALITY_HIGH = 'toolbar.videoquality.high';
/**
* Clicked within a toolbar menu to set max incoming video quality to low
* definition.
*
* @type {String}
*/
export const TOOLBAR_VIDEO_QUALITY_LOW = 'toolbar.videoquality.low';
/**
* Clicked within a toolbar menu to set max incoming video quality to standard
* definition.
*
* @type {String}
*/
export const TOOLBAR_VIDEO_QUALITY_STANDARD = 'toolbar.videoquality.standard';
/**
* The local participant has unpinned a participant so the participant doesn't
* remain permanently on local large video.
*
* Known full event names:
* unpinned.local
* unpinned.remote
*
* @type {String}
*/
export const UNPINNED_ = 'unpinned';

View File

@ -1,3 +1,4 @@
export * from './AnalyticsEvents';
export * from './functions'; export * from './functions';
import './middleware'; import './middleware';

View File

@ -2,7 +2,11 @@
import UIEvents from '../../../../service/UI/UIEvents'; import UIEvents from '../../../../service/UI/UIEvents';
import { sendAnalyticsEvent } from '../../analytics'; import {
START_MUTED_SERVER_AUDIO_,
START_MUTED_SERVER_VIDEO_,
sendAnalyticsEvent
} from '../../analytics';
import { getName } from '../../app'; import { getName } from '../../app';
import { JitsiConferenceEvents } from '../lib-jitsi-meet'; import { JitsiConferenceEvents } from '../lib-jitsi-meet';
import { setAudioMuted, setVideoMuted } from '../media'; import { setAudioMuted, setVideoMuted } from '../media';
@ -85,9 +89,11 @@ function _addConferenceListeners(conference, dispatch) {
const videoMuted = Boolean(conference.startVideoMuted); const videoMuted = Boolean(conference.startVideoMuted);
sendAnalyticsEvent( sendAnalyticsEvent(
`startmuted.server.audio.${audioMuted ? 'muted' : 'unmuted'}`); `${START_MUTED_SERVER_AUDIO_}.${
audioMuted ? 'muted' : 'unmuted'}`);
sendAnalyticsEvent( sendAnalyticsEvent(
`startmuted.server.video.${videoMuted ? 'muted' : 'unmuted'}`); `${START_MUTED_SERVER_VIDEO_}.${
videoMuted ? 'muted' : 'unmuted'}`);
logger.log(`Start muted: ${audioMuted ? 'audio, ' : ''}${ logger.log(`Start muted: ${audioMuted ? 'audio, ' : ''}${
videoMuted ? 'video' : ''}`); videoMuted ? 'video' : ''}`);

View File

@ -2,7 +2,14 @@
import UIEvents from '../../../../service/UI/UIEvents'; import UIEvents from '../../../../service/UI/UIEvents';
import { sendAnalyticsEvent } from '../../analytics'; import {
_LOCAL,
_REMOTE,
AUDIO_ONLY_DISABLED,
PINNED_,
UNPINNED_,
sendAnalyticsEvent
} from '../../analytics';
import { CONNECTION_ESTABLISHED } from '../connection'; import { CONNECTION_ESTABLISHED } from '../connection';
import { setVideoMuted, VIDEO_MUTISM_AUTHORITY } from '../media'; import { setVideoMuted, VIDEO_MUTISM_AUTHORITY } from '../media';
import { import {
@ -124,7 +131,7 @@ function _conferenceFailedOrLeft({ dispatch, getState }, next, action) {
const result = next(action); const result = next(action);
if (getState()['features/base/conference'].audioOnly) { if (getState()['features/base/conference'].audioOnly) {
sendAnalyticsEvent('audioonly.disabled'); sendAnalyticsEvent(AUDIO_ONLY_DISABLED);
logger.log('Audio only disabled'); logger.log('Audio only disabled');
dispatch(setAudioOnly(false)); dispatch(setAudioOnly(false));
} }
@ -186,14 +193,14 @@ function _pinParticipant(store, next, action) {
if (typeof APP !== 'undefined') { if (typeof APP !== 'undefined') {
const pinnedParticipant = getPinnedParticipant(participants); const pinnedParticipant = getPinnedParticipant(participants);
const actionName = action.participant.id ? 'pinned' : 'unpinned'; const actionName = action.participant.id ? PINNED_ : UNPINNED_;
let videoType; let videoType;
if ((participantById && participantById.local) if ((participantById && participantById.local)
|| (!id && pinnedParticipant && pinnedParticipant.local)) { || (!id && pinnedParticipant && pinnedParticipant.local)) {
videoType = 'local'; videoType = _LOCAL;
} else { } else {
videoType = 'remote'; videoType = _REMOTE;
} }
sendAnalyticsEvent( sendAnalyticsEvent(

View File

@ -1,6 +1,12 @@
/* @flow */ /* @flow */
import { sendAnalyticsEvent } from '../../analytics'; import {
START_AUDIO_ONLY_,
START_MUTED_CLIENT_AUDIO_,
START_MUTED_CLIENT_VIDEO_,
SYNC_TRACK_STATE_,
sendAnalyticsEvent
} from '../../analytics';
import { SET_ROOM, setAudioOnly } from '../conference'; import { SET_ROOM, setAudioOnly } from '../conference';
import { parseURLParams } from '../config'; import { parseURLParams } from '../config';
import JitsiMeetJS from '../lib-jitsi-meet'; import JitsiMeetJS from '../lib-jitsi-meet';
@ -87,9 +93,9 @@ function _setRoom({ dispatch, getState }, next, action) {
// Apply the config. // Apply the config.
sendAnalyticsEvent( sendAnalyticsEvent(
`startmuted.client.audio.${audioMuted ? 'muted' : 'unmuted'}`); `${START_MUTED_CLIENT_AUDIO_}.${audioMuted ? 'muted' : 'unmuted'}`);
sendAnalyticsEvent( sendAnalyticsEvent(
`startmuted.client.video.${videoMuted ? 'muted' : 'unmuted'}`); `${START_MUTED_CLIENT_VIDEO_}.${videoMuted ? 'muted' : 'unmuted'}`);
logger.log(`Start muted: ${audioMuted ? 'audio, ' : ''}${ logger.log(`Start muted: ${audioMuted ? 'audio, ' : ''}${
videoMuted ? 'video' : ''}`); videoMuted ? 'video' : ''}`);
@ -123,7 +129,7 @@ function _setRoom({ dispatch, getState }, next, action) {
} }
sendAnalyticsEvent( sendAnalyticsEvent(
`startaudioonly.${audioOnly ? 'enabled' : 'disabled'}`); `${START_AUDIO_ONLY_}.${audioOnly ? 'enabled' : 'disabled'}`);
logger.log(`Start audio only set to ${audioOnly.toString()}`); logger.log(`Start audio only set to ${audioOnly.toString()}`);
dispatch(setAudioOnly(audioOnly)); dispatch(setAudioOnly(audioOnly));
} }
@ -150,7 +156,8 @@ function _syncTrackMutedState({ getState }, track) {
// fired before track gets to state. // fired before track gets to state.
if (track.muted !== muted) { if (track.muted !== muted) {
sendAnalyticsEvent( sendAnalyticsEvent(
`synctrackstate.${track.mediaType}.${muted ? 'muted' : 'unmuted'}`); `${SYNC_TRACK_STATE_}.${track.mediaType}.${
muted ? 'muted' : 'unmuted'}`);
logger.log(`Sync ${track.mediaType} track muted state to ${ logger.log(`Sync ${track.mediaType} track muted state to ${
muted ? 'muted' : 'unmuted'}`); muted ? 'muted' : 'unmuted'}`);
track.muted = muted; track.muted = muted;

View File

@ -1,4 +1,7 @@
import { sendAnalyticsEvent } from '../../analytics'; import {
REPLACE_TRACK_,
sendAnalyticsEvent
} from '../../analytics';
import { JitsiTrackErrors, JitsiTrackEvents } from '../lib-jitsi-meet'; import { JitsiTrackErrors, JitsiTrackEvents } from '../lib-jitsi-meet';
import { import {
CAMERA_FACING_MODE, CAMERA_FACING_MODE,
@ -217,7 +220,7 @@ export function replaceLocalTrack(oldTrack, newTrack, conference) {
: setAudioMuted; : setAudioMuted;
const isMuted = newTrack.isMuted(); const isMuted = newTrack.isMuted();
sendAnalyticsEvent(`replacetrack.${ sendAnalyticsEvent(`${REPLACE_TRACK_}.${
newTrack.getType()}.${ newTrack.getType()}.${
isMuted ? 'muted' : 'unmuted'}`); isMuted ? 'muted' : 'unmuted'}`);
logger.log(`Replace ${newTrack.getType()} track - ${ logger.log(`Replace ${newTrack.getType()} track - ${

View File

@ -6,7 +6,10 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react'; import React, { Component } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { sendAnalyticsEvent } from '../../analytics'; import {
FEEDBACK_OPEN,
sendAnalyticsEvent
} from '../../analytics';
import { Dialog } from '../../base/dialog'; import { Dialog } from '../../base/dialog';
import { translate } from '../../base/i18n'; import { translate } from '../../base/i18n';
@ -145,7 +148,7 @@ class FeedbackDialog extends Component {
* @inheritdoc * @inheritdoc
*/ */
componentDidMount() { componentDidMount() {
sendAnalyticsEvent('feedback.open'); sendAnalyticsEvent(FEEDBACK_OPEN);
} }
/** /**

View File

@ -2,7 +2,10 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react'; import React, { Component } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { sendAnalyticsEvent } from '../../analytics'; import {
TOOLBAR_INVITE_CLOSE,
sendAnalyticsEvent
} from '../../analytics';
import { getInviteURL } from '../../base/connection'; import { getInviteURL } from '../../base/connection';
import { Dialog } from '../../base/dialog'; import { Dialog } from '../../base/dialog';
import { translate } from '../../base/i18n'; import { translate } from '../../base/i18n';
@ -51,7 +54,7 @@ class InviteDialog extends Component {
* @inheritdoc * @inheritdoc
*/ */
componentWillUnmount() { componentWillUnmount() {
sendAnalyticsEvent('toolbar.invite.close'); sendAnalyticsEvent(TOOLBAR_INVITE_CLOSE);
} }
/** /**

View File

@ -1,6 +1,9 @@
/* @flow */ /* @flow */
import { sendAnalyticsEvent } from '../../analytics'; import {
CALLKIT_BACKGROUND_VIDEO_MUTED,
sendAnalyticsEvent
} from '../../analytics';
import { setLastN } from '../../base/conference'; import { setLastN } from '../../base/conference';
import { setVideoMuted, VIDEO_MUTISM_AUTHORITY } from '../../base/media'; import { setVideoMuted, VIDEO_MUTISM_AUTHORITY } from '../../base/media';
@ -43,7 +46,7 @@ export function _setBackgroundVideoMuted(muted: boolean) {
audioOnly || dispatch(setLastN(muted ? 0 : undefined)); audioOnly || dispatch(setLastN(muted ? 0 : undefined));
sendAnalyticsEvent('callkit.background.video.muted'); sendAnalyticsEvent(CALLKIT_BACKGROUND_VIDEO_MUTED);
dispatch(setVideoMuted(muted, VIDEO_MUTISM_AUTHORITY.BACKGROUND)); dispatch(setVideoMuted(muted, VIDEO_MUTISM_AUTHORITY.BACKGROUND));
}; };

View File

@ -3,7 +3,10 @@
import { NativeModules } from 'react-native'; import { NativeModules } from 'react-native';
import uuid from 'uuid'; import uuid from 'uuid';
import { sendAnalyticsEvent } from '../../analytics'; import {
CALLKIT_AUDIO_,
sendAnalyticsEvent
} from '../../analytics';
import { APP_WILL_MOUNT, APP_WILL_UNMOUNT, appNavigate } from '../../app'; import { APP_WILL_MOUNT, APP_WILL_UNMOUNT, appNavigate } from '../../app';
import { import {
CONFERENCE_FAILED, CONFERENCE_FAILED,
@ -276,7 +279,8 @@ function _onPerformSetMutedCallAction({ callUUID, muted: newValue }) {
if (oldValue !== newValue) { if (oldValue !== newValue) {
const value = Boolean(newValue); const value = Boolean(newValue);
sendAnalyticsEvent(`callkit.audio.${value ? 'muted' : 'unmuted'}`); sendAnalyticsEvent(`${CALLKIT_AUDIO_}.${
value ? 'muted' : 'unmuted'}`);
dispatch(setAudioMuted(value)); dispatch(setAudioMuted(value));
} }
} }

View File

@ -3,6 +3,7 @@
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import React, { Component } from 'react'; import React, { Component } from 'react';
import { PAGE_RELOAD } from '../../analytics';
import { import {
isFatalJitsiConferenceError, isFatalJitsiConferenceError,
isFatalJitsiConnectionError isFatalJitsiConnectionError
@ -156,7 +157,7 @@ export default class AbstractPageReloadOverlay extends Component<*, *> {
// sent to the backed. // sent to the backed.
// FIXME: We should dispatch action for this. // FIXME: We should dispatch action for this.
APP.conference.logEvent( APP.conference.logEvent(
'page.reload', PAGE_RELOAD,
/* value */ undefined, /* value */ undefined,
/* label */ this.props.reason); /* label */ this.props.reason);
logger.info( logger.info(

View File

@ -2,7 +2,10 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react'; import React, { Component } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { sendAnalyticsEvent } from '../../analytics'; import {
REMOTE_VIDEO_MENU_KICK,
sendAnalyticsEvent
} from '../../analytics';
import { translate } from '../../base/i18n'; import { translate } from '../../base/i18n';
import { kickParticipant } from '../../base/participants'; import { kickParticipant } from '../../base/participants';
@ -84,7 +87,7 @@ class KickButton extends Component {
const { dispatch, onClick, participantID } = this.props; const { dispatch, onClick, participantID } = this.props;
sendAnalyticsEvent( sendAnalyticsEvent(
'remotevideomenu.kick', REMOTE_VIDEO_MENU_KICK,
{ {
value: 1, value: 1,
label: participantID label: participantID

View File

@ -2,7 +2,10 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react'; import React, { Component } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { sendAnalyticsEvent } from '../../analytics'; import {
REMOTE_VIDEO_MENU_MUTE_CLICKED,
sendAnalyticsEvent
} from '../../analytics';
import { translate } from '../../base/i18n'; import { translate } from '../../base/i18n';
import { openDialog } from '../../base/dialog'; import { openDialog } from '../../base/dialog';
@ -99,7 +102,7 @@ class MuteButton extends Component {
const { dispatch, onClick, participantID } = this.props; const { dispatch, onClick, participantID } = this.props;
sendAnalyticsEvent( sendAnalyticsEvent(
'remotevideomenu.mute.clicked', REMOTE_VIDEO_MENU_MUTE_CLICKED,
{ {
value: 1, value: 1,
label: participantID label: participantID

View File

@ -5,7 +5,10 @@ import { connect } from 'react-redux';
import { Dialog } from '../../base/dialog'; import { Dialog } from '../../base/dialog';
import { translate } from '../../base/i18n'; import { translate } from '../../base/i18n';
import { sendAnalyticsEvent } from '../../analytics'; import {
REMOTE_VIDEO_MENU_MUTE_CONFIRMED,
sendAnalyticsEvent
} from '../../analytics';
import { muteRemoteParticipant } from '../../base/participants'; import { muteRemoteParticipant } from '../../base/participants';
/** /**
@ -80,7 +83,7 @@ class MuteRemoteParticipantDialog extends Component {
const { dispatch, participantID } = this.props; const { dispatch, participantID } = this.props;
sendAnalyticsEvent( sendAnalyticsEvent(
'remotevideomenu.mute.confirmed', REMOTE_VIDEO_MENU_MUTE_CONFIRMED,
{ {
value: 1, value: 1,
label: participantID label: participantID

View File

@ -1,7 +1,10 @@
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import React, { Component } from 'react'; import React, { Component } from 'react';
import { sendAnalyticsEvent } from '../../analytics'; import {
REMOTE_VIDEO_MENU_REMOTE_CONTROL_,
sendAnalyticsEvent
} from '../../analytics';
import { translate } from '../../base/i18n'; import { translate } from '../../base/i18n';
import RemoteVideoMenuButton from './RemoteVideoMenuButton'; import RemoteVideoMenuButton from './RemoteVideoMenuButton';
@ -131,7 +134,7 @@ class RemoteControlButton extends Component {
if (eventName) { if (eventName) {
sendAnalyticsEvent( sendAnalyticsEvent(
`remotevideomenu.remotecontrol.${eventName}`, `${REMOTE_VIDEO_MENU_REMOTE_CONTROL_}.${eventName}`,
{ {
value: 1, value: 1,
label: participantID label: participantID

View File

@ -4,7 +4,7 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react'; import React, { Component } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { sendAnalyticsEvent } from '../../analytics'; import { TOOLBAR_PROFILE_TOGGLED, sendAnalyticsEvent } from '../../analytics';
import { DEFAULT_AVATAR_RELATIVE_PATH } from '../../base/participants'; import { DEFAULT_AVATAR_RELATIVE_PATH } from '../../base/participants';
import UIEvents from '../../../../service/UI/UIEvents'; import UIEvents from '../../../../service/UI/UIEvents';
@ -102,7 +102,7 @@ class ProfileButton extends Component<*> {
*/ */
_onClick() { _onClick() {
if (!this.props._unclickable) { if (!this.props._unclickable) {
sendAnalyticsEvent('toolbar.profile.toggled'); sendAnalyticsEvent(TOOLBAR_PROFILE_TOGGLED);
APP.UI.emitEvent(UIEvents.TOGGLE_PROFILE); APP.UI.emitEvent(UIEvents.TOGGLE_PROFILE);
} }
} }

View File

@ -3,7 +3,12 @@ import React, { Component } from 'react';
import { View } from 'react-native'; import { View } from 'react-native';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { sendAnalyticsEvent } from '../../analytics'; import {
TOOLBAR_AUDIO_MUTED,
TOOLBAR_AUDIO_UNMUTED,
TOOLBAR_VIDEO_,
sendAnalyticsEvent
} from '../../analytics';
import { import {
isNarrowAspectRatio, isNarrowAspectRatio,
makeAspectRatioAware makeAspectRatioAware
@ -183,7 +188,7 @@ class Toolbox extends Component {
_onToggleAudio() { _onToggleAudio() {
const mute = !this.props._audioMuted; const mute = !this.props._audioMuted;
sendAnalyticsEvent(`toolbar.audio.${mute ? 'muted' : 'unmuted'}`); sendAnalyticsEvent(mute ? TOOLBAR_AUDIO_MUTED : TOOLBAR_AUDIO_UNMUTED);
// The user sees the reality i.e. the state of base/tracks and intends // The user sees the reality i.e. the state of base/tracks and intends
// to change reality by tapping on the respective button i.e. the user // to change reality by tapping on the respective button i.e. the user
@ -206,7 +211,7 @@ class Toolbox extends Component {
_onToggleVideo() { _onToggleVideo() {
const mute = !this.props._videoMuted; const mute = !this.props._videoMuted;
sendAnalyticsEvent(`toolbar.video.${mute ? 'muted' : 'unmuted'}`); sendAnalyticsEvent(`${TOOLBAR_VIDEO_}.${mute ? 'muted' : 'unmuted'}`);
// The user sees the reality i.e. the state of base/tracks and intends // The user sees the reality i.e. the state of base/tracks and intends
// to change reality by tapping on the respective button i.e. the user // to change reality by tapping on the respective button i.e. the user

View File

@ -2,7 +2,31 @@
import React from 'react'; import React from 'react';
import { sendAnalyticsEvent } from '../analytics'; import {
SHORTCUT_AUDIO_MUTE_TOGGLED,
SHORTCUT_CHAT_TOGGLED,
SHORTCUT_RAISE_HAND_CLICKED,
SHORTCUT_SCREEN_TOGGLED,
SHORTCUT_VIDEO_MUTE_TOGGLED,
TOOLBAR_AUDIO_MUTED,
TOOLBAR_AUDIO_UNMUTED,
TOOLBAR_CHAT_TOGGLED,
TOOLBAR_CONTACTS_TOGGLED,
TOOLBAR_ETHERPACK_CLICKED,
TOOLBAR_FILMSTRIP_ONLY_DEVICE_SELECTION_TOGGLED,
TOOLBAR_FULLSCREEN_ENABLED,
TOOLBAR_HANGUP,
TOOLBAR_INVITE_CLICKED,
TOOLBAR_RAISE_HAND_CLICKED,
TOOLBAR_SCREEN_DISABLED,
TOOLBAR_SCREEN_ENABLED,
TOOLBAR_SETTINGS_TOGGLED,
TOOLBAR_SHARED_VIDEO_CLICKED,
TOOLBAR_SIP_DIALPAD_CLICKED,
TOOLBAR_VIDEO_DISABLED,
TOOLBAR_VIDEO_ENABLED,
sendAnalyticsEvent
} from '../analytics';
import { ParticipantCounter } from '../contact-list'; import { ParticipantCounter } from '../contact-list';
import { openDeviceSelectionDialog } from '../device-selection'; import { openDeviceSelectionDialog } from '../device-selection';
import { InfoDialogButton, openInviteDialog } from '../invite'; import { InfoDialogButton, openInviteDialog } from '../invite';
@ -42,9 +66,9 @@ export default function getDefaultButtons() {
const newVideoMutedState = !APP.conference.isLocalVideoMuted(); const newVideoMutedState = !APP.conference.isLocalVideoMuted();
if (newVideoMutedState) { if (newVideoMutedState) {
sendAnalyticsEvent('toolbar.video.enabled'); sendAnalyticsEvent(TOOLBAR_VIDEO_ENABLED);
} else { } else {
sendAnalyticsEvent('toolbar.video.disabled'); sendAnalyticsEvent(TOOLBAR_VIDEO_DISABLED);
} }
APP.UI.emitEvent(UIEvents.VIDEO_MUTED, newVideoMutedState); APP.UI.emitEvent(UIEvents.VIDEO_MUTED, newVideoMutedState);
}, },
@ -64,7 +88,7 @@ export default function getDefaultButtons() {
return; return;
} }
sendAnalyticsEvent('shortcut.videomute.toggled'); sendAnalyticsEvent(SHORTCUT_VIDEO_MUTE_TOGGLED);
APP.conference.toggleVideoMuted(); APP.conference.toggleVideoMuted();
}, },
shortcutDescription: 'keyboardShortcuts.videoMute', shortcutDescription: 'keyboardShortcuts.videoMute',
@ -81,13 +105,13 @@ export default function getDefaultButtons() {
<span id = 'unreadMessages' /></span>, <span id = 'unreadMessages' /></span>,
id: 'toolbar_button_chat', id: 'toolbar_button_chat',
onClick() { onClick() {
sendAnalyticsEvent('toolbar.chat.toggled'); sendAnalyticsEvent(TOOLBAR_CHAT_TOGGLED);
APP.UI.emitEvent(UIEvents.TOGGLE_CHAT); APP.UI.emitEvent(UIEvents.TOGGLE_CHAT);
}, },
shortcut: 'C', shortcut: 'C',
shortcutAttr: 'toggleChatPopover', shortcutAttr: 'toggleChatPopover',
shortcutFunc() { shortcutFunc() {
sendAnalyticsEvent('shortcut.chat.toggled'); sendAnalyticsEvent(SHORTCUT_CHAT_TOGGLED);
APP.UI.toggleChat(); APP.UI.toggleChat();
}, },
shortcutDescription: 'keyboardShortcuts.toggleChat', shortcutDescription: 'keyboardShortcuts.toggleChat',
@ -104,8 +128,7 @@ export default function getDefaultButtons() {
enabled: true, enabled: true,
id: 'toolbar_contact_list', id: 'toolbar_contact_list',
onClick() { onClick() {
sendAnalyticsEvent( sendAnalyticsEvent(TOOLBAR_CONTACTS_TOGGLED);
'toolbar.contacts.toggled');
APP.UI.emitEvent(UIEvents.TOGGLE_CONTACT_LIST); APP.UI.emitEvent(UIEvents.TOGGLE_CONTACT_LIST);
}, },
sideContainerId: 'contacts_container', sideContainerId: 'contacts_container',
@ -121,9 +144,9 @@ export default function getDefaultButtons() {
id: 'toolbar_button_desktopsharing', id: 'toolbar_button_desktopsharing',
onClick() { onClick() {
if (APP.conference.isSharingScreen) { if (APP.conference.isSharingScreen) {
sendAnalyticsEvent('toolbar.screen.disabled'); sendAnalyticsEvent(TOOLBAR_SCREEN_DISABLED);
} else { } else {
sendAnalyticsEvent('toolbar.screen.enabled'); sendAnalyticsEvent(TOOLBAR_SCREEN_ENABLED);
} }
APP.UI.emitEvent(UIEvents.TOGGLE_SCREENSHARING); APP.UI.emitEvent(UIEvents.TOGGLE_SCREENSHARING);
}, },
@ -137,7 +160,7 @@ export default function getDefaultButtons() {
shortcut: 'D', shortcut: 'D',
shortcutAttr: 'toggleDesktopSharingPopover', shortcutAttr: 'toggleDesktopSharingPopover',
shortcutFunc() { shortcutFunc() {
sendAnalyticsEvent('shortcut.screen.toggled'); sendAnalyticsEvent(SHORTCUT_SCREEN_TOGGLED);
// eslint-disable-next-line no-empty-function // eslint-disable-next-line no-empty-function
APP.conference.toggleScreenSharing().catch(() => {}); APP.conference.toggleScreenSharing().catch(() => {});
@ -158,7 +181,7 @@ export default function getDefaultButtons() {
id: 'toolbar_button_fodeviceselection', id: 'toolbar_button_fodeviceselection',
onClick(dispatch: Function) { onClick(dispatch: Function) {
sendAnalyticsEvent( sendAnalyticsEvent(
'toolbar.fodeviceselection.toggled'); TOOLBAR_FILMSTRIP_ONLY_DEVICE_SELECTION_TOGGLED);
dispatch(openDeviceSelectionDialog()); dispatch(openDeviceSelectionDialog());
}, },
@ -177,7 +200,7 @@ export default function getDefaultButtons() {
hidden: true, hidden: true,
id: 'toolbar_button_dialpad', id: 'toolbar_button_dialpad',
onClick() { onClick() {
sendAnalyticsEvent('toolbar.sip.dialpad.clicked'); sendAnalyticsEvent(TOOLBAR_SIP_DIALPAD_CLICKED);
}, },
tooltipKey: 'toolbar.dialpad' tooltipKey: 'toolbar.dialpad'
}, },
@ -191,7 +214,7 @@ export default function getDefaultButtons() {
hidden: true, hidden: true,
id: 'toolbar_button_etherpad', id: 'toolbar_button_etherpad',
onClick() { onClick() {
sendAnalyticsEvent('toolbar.etherpad.clicked'); sendAnalyticsEvent(TOOLBAR_ETHERPACK_CLICKED);
APP.UI.emitEvent(UIEvents.ETHERPAD_CLICKED); APP.UI.emitEvent(UIEvents.ETHERPAD_CLICKED);
}, },
tooltipKey: 'toolbar.etherpad' tooltipKey: 'toolbar.etherpad'
@ -205,7 +228,7 @@ export default function getDefaultButtons() {
enabled: true, enabled: true,
id: 'toolbar_button_fullScreen', id: 'toolbar_button_fullScreen',
onClick() { onClick() {
sendAnalyticsEvent('toolbar.fullscreen.enabled'); sendAnalyticsEvent(TOOLBAR_FULLSCREEN_ENABLED);
APP.UI.emitEvent(UIEvents.TOGGLE_FULLSCREEN); APP.UI.emitEvent(UIEvents.TOGGLE_FULLSCREEN);
}, },
@ -229,7 +252,7 @@ export default function getDefaultButtons() {
isDisplayed: () => true, isDisplayed: () => true,
id: 'toolbar_button_hangup', id: 'toolbar_button_hangup',
onClick() { onClick() {
sendAnalyticsEvent('toolbar.hangup'); sendAnalyticsEvent(TOOLBAR_HANGUP);
APP.UI.emitEvent(UIEvents.HANGUP); APP.UI.emitEvent(UIEvents.HANGUP);
}, },
tooltipKey: 'toolbar.hangup' tooltipKey: 'toolbar.hangup'
@ -252,7 +275,7 @@ export default function getDefaultButtons() {
enabled: true, enabled: true,
id: 'toolbar_button_link', id: 'toolbar_button_link',
onClick(dispatch: Function) { onClick(dispatch: Function) {
sendAnalyticsEvent('toolbar.invite.clicked'); sendAnalyticsEvent(TOOLBAR_INVITE_CLICKED);
dispatch(openInviteDialog()); dispatch(openInviteDialog());
}, },
@ -280,11 +303,11 @@ export default function getDefaultButtons() {
APP.UI.showCustomToolbarPopup( APP.UI.showCustomToolbarPopup(
'microphone', 'unableToUnmutePopup', true, 5000); 'microphone', 'unableToUnmutePopup', true, 5000);
} else { } else {
sendAnalyticsEvent('toolbar.audio.unmuted'); sendAnalyticsEvent(TOOLBAR_AUDIO_UNMUTED);
APP.UI.emitEvent(UIEvents.AUDIO_MUTED, false, true); APP.UI.emitEvent(UIEvents.AUDIO_MUTED, false, true);
} }
} else { } else {
sendAnalyticsEvent('toolbar.audio.muted'); sendAnalyticsEvent(TOOLBAR_AUDIO_MUTED);
APP.UI.emitEvent(UIEvents.AUDIO_MUTED, true, true); APP.UI.emitEvent(UIEvents.AUDIO_MUTED, true, true);
} }
}, },
@ -305,7 +328,7 @@ export default function getDefaultButtons() {
shortcut: 'M', shortcut: 'M',
shortcutAttr: 'mutePopover', shortcutAttr: 'mutePopover',
shortcutFunc() { shortcutFunc() {
sendAnalyticsEvent('shortcut.audiomute.toggled'); sendAnalyticsEvent(SHORTCUT_AUDIO_MUTE_TOGGLED);
APP.conference.toggleAudioMuted(); APP.conference.toggleAudioMuted();
}, },
shortcutDescription: 'keyboardShortcuts.mute', shortcutDescription: 'keyboardShortcuts.mute',
@ -328,14 +351,14 @@ export default function getDefaultButtons() {
enabled: true, enabled: true,
id: 'toolbar_button_raisehand', id: 'toolbar_button_raisehand',
onClick() { onClick() {
sendAnalyticsEvent('toolbar.raiseHand.clicked'); sendAnalyticsEvent(TOOLBAR_RAISE_HAND_CLICKED);
APP.conference.maybeToggleRaisedHand(); APP.conference.maybeToggleRaisedHand();
}, },
shortcut: 'R', shortcut: 'R',
shortcutAttr: 'raiseHandPopover', shortcutAttr: 'raiseHandPopover',
shortcutDescription: 'keyboardShortcuts.raiseHand', shortcutDescription: 'keyboardShortcuts.raiseHand',
shortcutFunc() { shortcutFunc() {
sendAnalyticsEvent('shortcut.raisehand.clicked'); sendAnalyticsEvent(SHORTCUT_RAISE_HAND_CLICKED);
APP.conference.maybeToggleRaisedHand(); APP.conference.maybeToggleRaisedHand();
}, },
tooltipKey: 'toolbar.raiseHand' tooltipKey: 'toolbar.raiseHand'
@ -363,7 +386,7 @@ export default function getDefaultButtons() {
enabled: true, enabled: true,
id: 'toolbar_button_settings', id: 'toolbar_button_settings',
onClick() { onClick() {
sendAnalyticsEvent('toolbar.settings.toggled'); sendAnalyticsEvent(TOOLBAR_SETTINGS_TOGGLED);
APP.UI.emitEvent(UIEvents.TOGGLE_SETTINGS); APP.UI.emitEvent(UIEvents.TOGGLE_SETTINGS);
}, },
sideContainerId: 'settings_container', sideContainerId: 'settings_container',
@ -378,7 +401,7 @@ export default function getDefaultButtons() {
enabled: true, enabled: true,
id: 'toolbar_button_sharedvideo', id: 'toolbar_button_sharedvideo',
onClick() { onClick() {
sendAnalyticsEvent('toolbar.sharedvideo.clicked'); sendAnalyticsEvent(TOOLBAR_SHARED_VIDEO_CLICKED);
APP.UI.emitEvent(UIEvents.SHARED_VIDEO_CLICKED); APP.UI.emitEvent(UIEvents.SHARED_VIDEO_CLICKED);
}, },
popups: [ popups: [

View File

@ -3,7 +3,13 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react'; import React, { Component } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { sendAnalyticsEvent } from '../../analytics'; import {
TOOLBAR_AUDIO_ONLY_ENABLED,
TOOLBAR_VIDEO_QUALITY_HIGH,
TOOLBAR_VIDEO_QUALITY_LOW,
TOOLBAR_VIDEO_QUALITY_STANDARD,
sendAnalyticsEvent
} from '../../analytics';
import { import {
setAudioOnly, setAudioOnly,
setReceiveVideoQuality, setReceiveVideoQuality,
@ -249,7 +255,7 @@ class VideoQualityDialog extends Component {
* @returns {void} * @returns {void}
*/ */
_enableAudioOnly() { _enableAudioOnly() {
sendAnalyticsEvent('toolbar.audioonly.enabled'); sendAnalyticsEvent(TOOLBAR_AUDIO_ONLY_ENABLED);
logger.log('Video quality: audio only enabled'); logger.log('Video quality: audio only enabled');
this.props.dispatch(setAudioOnly(true)); this.props.dispatch(setAudioOnly(true));
} }
@ -262,7 +268,7 @@ class VideoQualityDialog extends Component {
* @returns {void} * @returns {void}
*/ */
_enableHighDefinition() { _enableHighDefinition() {
sendAnalyticsEvent('toolbar.videoquality.high'); sendAnalyticsEvent(TOOLBAR_VIDEO_QUALITY_HIGH);
logger.log('Video quality: high enabled'); logger.log('Video quality: high enabled');
this.props.dispatch(setReceiveVideoQuality(HIGH)); this.props.dispatch(setReceiveVideoQuality(HIGH));
} }
@ -275,7 +281,7 @@ class VideoQualityDialog extends Component {
* @returns {void} * @returns {void}
*/ */
_enableLowDefinition() { _enableLowDefinition() {
sendAnalyticsEvent('toolbar.videoquality.low'); sendAnalyticsEvent(TOOLBAR_VIDEO_QUALITY_LOW);
logger.log('Video quality: low enabled'); logger.log('Video quality: low enabled');
this.props.dispatch(setReceiveVideoQuality(LOW)); this.props.dispatch(setReceiveVideoQuality(LOW));
} }
@ -288,7 +294,7 @@ class VideoQualityDialog extends Component {
* @returns {void} * @returns {void}
*/ */
_enableStandardDefinition() { _enableStandardDefinition() {
sendAnalyticsEvent('toolbar.videoquality.standard'); sendAnalyticsEvent(TOOLBAR_VIDEO_QUALITY_STANDARD);
logger.log('Video quality: standard enabled'); logger.log('Video quality: standard enabled');
this.props.dispatch(setReceiveVideoQuality(STANDARD)); this.props.dispatch(setReceiveVideoQuality(STANDARD));
} }