Skip to content

Commit b5a251e

Browse files
authored
feature: Add logger to VoicePlayer and VoiceRecorder (#453)
[UIKIT-3260](https://sendbird.atlassian.net/browse/UIKIT-3260) * Add a logger to VoicePlayer and VoiceRecorder * Add a logger to sending voice message
1 parent 1e79a41 commit b5a251e

File tree

4 files changed

+29
-24
lines changed

4 files changed

+29
-24
lines changed

src/hooks/VoicePlayer/index.tsx

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
VOICE_PLAYER_AUDIO_ID,
2020
VOICE_PLAYER_ROOT_ID,
2121
} from '../../utils/consts';
22+
import useSendbirdStateContext from '../useSendbirdStateContext';
2223

2324
// VoicePlayerProvider interface
2425
export interface VoicePlayerProps {
@@ -59,15 +60,19 @@ export const VoicePlayerProvider = ({
5960
currentPlayer,
6061
audioStorage,
6162
} = voicePlayerStore;
63+
const { config } = useSendbirdStateContext();
64+
const { logger } = config;
6265

6366
const stop = (text = '') => {
6467
if (currentGroupKey.includes(text)) {
68+
logger.info('VoicePlayer: Pause playing(by text).');
6569
pause(currentGroupKey);
6670
}
6771
};
6872

6973
const pause = (groupKey: string) => {
7074
if (currentGroupKey === groupKey && currentPlayer !== null) {
75+
logger.info('VoicePlayer: Pause playing(by group key).');
7176
currentPlayer?.pause();
7277
}
7378
};
@@ -97,9 +102,7 @@ export const VoicePlayerProvider = ({
97102
}
98103
voicePlayerDispatcher({
99104
type: INITIALIZE_AUDIO_UNIT,
100-
payload: {
101-
groupKey,
102-
},
105+
payload: { groupKey },
103106
});
104107
fetch(audioFileUrl)
105108
.then((res) => res.blob())
@@ -111,48 +114,42 @@ export const VoicePlayerProvider = ({
111114
resolve(audioFile);
112115
});
113116
}).then((audioFile: File) => {
117+
logger.info('VoicePlayer: Succeeded getting audio file.', audioFile);
114118
const currentAudioUnit = audioStorage[groupKey] || AudioUnitDefaultValue() as AudioStorageUnit;
115119
const audioPlayer = new Audio(URL?.createObjectURL?.(audioFile));
116120
audioPlayer.id = VOICE_PLAYER_AUDIO_ID;
117121
audioPlayer.currentTime = currentAudioUnit.playbackTime;
118122
audioPlayer.volume = 1;
119123
audioPlayer.loop = false;
120124
audioPlayer.onplaying = () => {
125+
logger.info('VoicePlayer: OnPlaying event is called from audioPlayer', { groupKey, audioPlayer });
121126
voicePlayerDispatcher({
122127
type: ON_VOICE_PLAYER_PLAY,
123-
payload: {
124-
groupKey,
125-
audioFile,
126-
},
128+
payload: { groupKey, audioFile },
127129
});
128130
};
129131
audioPlayer.onpause = () => {
132+
logger.info('VoicePlayer: OnPause event is called from audioPlayer', { groupKey, audioPlayer });
130133
voicePlayerDispatcher({
131134
type: ON_VOICE_PLAYER_PAUSE,
132-
payload: {
133-
groupKey,
134-
},
135+
payload: { groupKey },
135136
});
136137
};
137138
audioPlayer.ontimeupdate = () => {
138139
voicePlayerDispatcher({
139140
type: ON_CURRENT_TIME_UPDATE,
140-
payload: {
141-
groupKey,
142-
},
141+
payload: { groupKey },
143142
});
144143
};
145144
audioPlayer?.play();
146145
const voicePlayerRoot = document.getElementById(VOICE_PLAYER_ROOT_ID);
147146
voicePlayerRoot.appendChild(audioPlayer);
148147
voicePlayerDispatcher({
149148
type: SET_CURRENT_PLAYER,
150-
payload: {
151-
groupKey,
152-
audioPlayer,
153-
},
149+
payload: { groupKey, audioPlayer },
154150
});
155-
})
151+
logger.info('VoicePlayer: Succeeded playing audio player.', { groupKey, audioPlayer });
152+
});
156153
};
157154

158155
return (

src/hooks/VoiceRecorder/index.tsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
VOICE_RECORDER_AUDIO_BITS,
77
VOICE_RECORDER_MIME_TYPE,
88
} from '../../utils/consts';
9+
import useSendbirdStateContext from '../useSendbirdStateContext';
910

1011
// Input props of VoiceRecorder
1112
export interface VoiceRecorderProps {
@@ -31,23 +32,28 @@ const VoiceRecorderContext = createContext<VoiceRecorderContext>({
3132
});
3233

3334
export const VoiceRecorderProvider = (props: VoiceRecorderProps): React.ReactElement => {
35+
const { children } = props;
36+
const { config } = useSendbirdStateContext();
37+
const { logger } = config;
3438
const [mediaRecorder, setMediaRecorder] = useState<MediaRecorder>(null);
3539
const [isRecordable, setIsRecordable] = useState<boolean>(false);
3640

37-
const { children } = props;
38-
3941
const start = useCallback((eventHandler: VoiceRecorderEventHandler): void => {
42+
logger.info('VoiceRecorder: Start recording.');
4043
if (mediaRecorder) {
4144
stop();
45+
logger.info('VoiceRecorder: Previous mediaRecorder is stopped.');
4246
}
4347
navigator?.mediaDevices?.getUserMedia?.({ audio: true })
4448
.then((stream) => {
49+
logger.info('VoiceRecorder: Succeeded getting media stream.', stream);
4550
setIsRecordable(true);
4651
const mediaRecorder = new MediaRecorder(stream, {
4752
mimeType: VOICE_RECORDER_MIME_TYPE,
4853
audioBitsPerSecond: VOICE_RECORDER_AUDIO_BITS,
4954
});
5055
mediaRecorder.ondataavailable = (e) => {// when recording stops
56+
logger.info('VoiceRecorder: Succeeded getting an available data.', e.data);
5157
const audioFile = new File([e.data], VOICE_MESSAGE_FILE_NAME, {
5258
lastModified: new Date().getTime(),
5359
type: VOICE_MESSAGE_MIME_TYPE,
@@ -60,6 +66,7 @@ export const VoiceRecorderProvider = (props: VoiceRecorderProps): React.ReactEle
6066
type: VOICE_MESSAGE_MIME_TYPE,
6167
});
6268
eventHandler?.onRecordingEnded(convertedAudioFile);
69+
logger.info('VoiceRecorder: Succeeded converting audio file.', convertedAudioFile);
6370
});
6471
stream?.getAudioTracks?.().forEach?.(track => track?.stop());
6572
setIsRecordable(false);
@@ -68,8 +75,8 @@ export const VoiceRecorderProvider = (props: VoiceRecorderProps): React.ReactEle
6875
setMediaRecorder(mediaRecorder);
6976
eventHandler?.onRecordingStarted();
7077
})
71-
.catch(() => {
72-
// error
78+
.catch((err) => {
79+
logger.error('VoiceRecorder: Failed getting media stream.', err);
7380
setMediaRecorder(null);
7481
});
7582
}, [mediaRecorder]);
@@ -79,7 +86,7 @@ export const VoiceRecorderProvider = (props: VoiceRecorderProps): React.ReactEle
7986
mediaRecorder?.stop();
8087
setMediaRecorder(null);
8188
setIsRecordable(false);
82-
// TODO: logger
89+
logger.info('VoiceRecorder: Stop recording.');
8390
}, [mediaRecorder]);
8491

8592
return (

src/smart-components/Channel/context/hooks/useSendVoiceMessageCallback.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ export const useSendVoiceMessageCallback = ({
6060
messageParams.isReplyToChannel = true;
6161
messageParams.parentMessageId = quoteMessage.messageId;
6262
}
63+
logger.info('Channel: Start sending voice message', messageParams);
6364
currentGroupChannel.sendFileMessage(messageParams)
6465
.onPending((pendingMessage) => {
6566
pubSub.publish(topics.SEND_MESSAGE_START, {

src/smart-components/Thread/context/hooks/useSendVoiceMessageCallback.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export const useSendVoiceMessageCallback = ({
6262
messageParams.isReplyToChannel = true;
6363
messageParams.parentMessageId = quoteMessage.messageId;
6464
}
65-
65+
logger.info('Thread | useSendVoiceMessageCallback: Start sending voice message', messageParams);
6666
currentChannel?.sendFileMessage(messageParams)
6767
.onPending((pendingMessage) => {
6868
threadDispatcher({

0 commit comments

Comments
 (0)