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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,6 +1,12 @@
/* @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 { parseURLParams } from '../config';
import JitsiMeetJS from '../lib-jitsi-meet';
@ -87,9 +93,9 @@ function _setRoom({ dispatch, getState }, next, action) {
// Apply the config.
sendAnalyticsEvent(
`startmuted.client.audio.${audioMuted ? 'muted' : 'unmuted'}`);
`${START_MUTED_CLIENT_AUDIO_}.${audioMuted ? 'muted' : 'unmuted'}`);
sendAnalyticsEvent(
`startmuted.client.video.${videoMuted ? 'muted' : 'unmuted'}`);
`${START_MUTED_CLIENT_VIDEO_}.${videoMuted ? 'muted' : 'unmuted'}`);
logger.log(`Start muted: ${audioMuted ? 'audio, ' : ''}${
videoMuted ? 'video' : ''}`);
@ -123,7 +129,7 @@ function _setRoom({ dispatch, getState }, next, action) {
}
sendAnalyticsEvent(
`startaudioonly.${audioOnly ? 'enabled' : 'disabled'}`);
`${START_AUDIO_ONLY_}.${audioOnly ? 'enabled' : 'disabled'}`);
logger.log(`Start audio only set to ${audioOnly.toString()}`);
dispatch(setAudioOnly(audioOnly));
}
@ -150,7 +156,8 @@ function _syncTrackMutedState({ getState }, track) {
// fired before track gets to state.
if (track.muted !== muted) {
sendAnalyticsEvent(
`synctrackstate.${track.mediaType}.${muted ? 'muted' : 'unmuted'}`);
`${SYNC_TRACK_STATE_}.${track.mediaType}.${
muted ? 'muted' : 'unmuted'}`);
logger.log(`Sync ${track.mediaType} track muted state to ${
muted ? 'muted' : 'unmuted'}`);
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 {
CAMERA_FACING_MODE,
@ -217,7 +220,7 @@ export function replaceLocalTrack(oldTrack, newTrack, conference) {
: setAudioMuted;
const isMuted = newTrack.isMuted();
sendAnalyticsEvent(`replacetrack.${
sendAnalyticsEvent(`${REPLACE_TRACK_}.${
newTrack.getType()}.${
isMuted ? 'muted' : 'unmuted'}`);
logger.log(`Replace ${newTrack.getType()} track - ${

View File

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

View File

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

View File

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

View File

@ -3,7 +3,10 @@
import { NativeModules } from 'react-native';
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 {
CONFERENCE_FAILED,
@ -276,7 +279,8 @@ function _onPerformSetMutedCallAction({ callUUID, muted: newValue }) {
if (oldValue !== newValue) {
const value = Boolean(newValue);
sendAnalyticsEvent(`callkit.audio.${value ? 'muted' : 'unmuted'}`);
sendAnalyticsEvent(`${CALLKIT_AUDIO_}.${
value ? 'muted' : 'unmuted'}`);
dispatch(setAudioMuted(value));
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,7 +3,12 @@ import React, { Component } from 'react';
import { View } from 'react-native';
import { connect } from 'react-redux';
import { sendAnalyticsEvent } from '../../analytics';
import {
TOOLBAR_AUDIO_MUTED,
TOOLBAR_AUDIO_UNMUTED,
TOOLBAR_VIDEO_,
sendAnalyticsEvent
} from '../../analytics';
import {
isNarrowAspectRatio,
makeAspectRatioAware
@ -183,7 +188,7 @@ class Toolbox extends Component {
_onToggleAudio() {
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
// to change reality by tapping on the respective button i.e. the user
@ -206,7 +211,7 @@ class Toolbox extends Component {
_onToggleVideo() {
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
// to change reality by tapping on the respective button i.e. the user

View File

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

View File

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