profile
viewpoint
If you are wondering where the data of this site comes from, please visit https://api.github.com/users/AgoraIO-Community/events. GitMemory does not store any data, but only uses NGINX to cache data for a period of time. The idea behind GitMemory is simply to give users a better reading experience.
Agora.io Community AgoraIO-Community https://agora.io For & by the community 🤓

AgoraIO-Community/Agora-Flutter-Quickstart 479

Quickstart guide for the Agora Flutter SDK(Android/iOS)

AgoraIO-Community/Agora-Electron-Quickstart 51

Quickstart for Agora Electron SDK(Windows/macOS) https://github.com/AgoraIO/Electron-SDK

AgoraIO-Community/Agora-Python-SDK 51

Use Agora RTC SDK with Python!

AgoraIO-Community/2019-Hackathon-Works-CoderLane 27

Coderlane is an online real-time programming environment, a high-fidelity REPL environment. It also supports multi-person programming.

AgoraIO-Community/Agora-C_Sharp-SDK 9

The simple ways to use Agora RTC SDK with C#

AgoraIO-Community/Agora-iOS-Swift-Example 6

Example of creating a multi-broadcasting channel with Agora.io

Pull request review commentAgoraIO-Community/app-builder-core

Private notification toast

 export interface messageStoreInterface {   msg: string; } +export interface messageEventInterface extends messageStoreInterface {+  type: mType;+  source: mSourceType;+}++export enum mSourceType {
export enum messageSourceType {
SupriyaAdep

comment created time in 3 minutes

PullRequestReviewEvent

Pull request review commentAgoraIO-Community/app-builder-core

Private notification toast

 export interface messageStoreInterface {   msg: string; } +export interface messageEventInterface extends messageStoreInterface {+  type: mType;
  type: messageType;
SupriyaAdep

comment created time in 3 minutes

PullRequestReviewEvent
PullRequestReviewEvent

Pull request review commentAgoraIO-Community/app-builder-core

Private notification toast

 export interface messageStoreInterface {   msg: string; } +export interface messageEventInterface extends messageStoreInterface {+  type: mType;+  source: mSourceType;+}++export enum mSourceType {+  Core = 'core',+}++export enum mChannelType {

what's m ?

export enum channelMessageType {
SupriyaAdep

comment created time in 4 minutes

Pull request review commentAgoraIO-Community/app-builder-core

Private notification toast

 const RtmConfigure = (props: any) => {   };    const sendMessage = async (msg: string) => {-    if (msg !== '') {-      await (engine.current as RtmEngine).sendMessageByChannelId(-        rtcProps.channel,-        mType.Normal + msg,-      );-    }-    let ts = new Date().getTime();-    if (msg !== '') {-      addMessageToStore(localUid.current, mType.Normal + msg, ts);-    }+    if (msg.trim() === '') return;+    const text = stringifyPayload(mSourceType.Core, mType.Normal, msg);+    await (engine.current as RtmEngine).sendMessageByChannelId(+      rtcProps.channel,+      text,+    );+    addMessageToStore(localUid.current, mType.Normal + msg, timeNow());

use destructuring while calling function with multiple arguments, be verboes with the names

    addMessageToStore({ uid: localUid.current, messageType: mType.Normal + msg, timeStamp: timeNow()});
SupriyaAdep

comment created time in 7 minutes

PullRequestReviewEvent

Pull request review commentAgoraIO-Community/app-builder-core

Private notification toast

 const RtmConfigure = (props: any) => {     engine.current.on('channelMemberLeft', (data: any) => {       console.log('user left', data);       // Chat of left user becomes undefined. So don't cleanup-      //-      // let arr = new Int32Array(1);-      // arr[0] = parseInt(data.uid);-      // setUserList((prevState) => {-      //   const uid: number = Platform.OS === 'android' ? arr[0] : data.uid;-      //   const screenuid: number = prevState[uid].screenUid;-      //   const {[uid]: _user, [screenuid]: _screen, ...newState} = prevState;-      //   return newState;-      // });     });     engine.current.on('messageReceived', (evt: any) => {-      let {text} = evt;-      // console.log('messageReceived: ', evt);-      if (text[0] === mType.Control) {-        console.log('Control: ', text);-        if (text.slice(1) === controlMessageEnum.muteVideo) {-          // console.log('dispatch', dispatch);-          dispatch({-            type: 'LocalMuteVideo',-            value: [true],-          });-        } else if (text.slice(1) === controlMessageEnum.muteAudio) {-          dispatch({-            type: 'LocalMuteAudio',-            value: [true],-          });-        } else if (text.slice(1) === controlMessageEnum.kickUser) {-          dispatch({-            type: 'EndCall',-            value: [],+      const {peerId, ts, text} = evt;+      const textObj = parsePayload(text);+      const {type, msg} = textObj;++      let arr = new Int32Array(1);+      arr[0] = parseInt(peerId);++      const inHours = new Date(ts).getHours();+      const timestamp = isNaN(inHours) ? timeNow() : inHours;+      const userUID = Platform.OS === 'android' ? arr[0] : peerId;++      if (type === mType.Control) {+        try {+          switch (msg) {+            case controlMessageEnum.muteVideo:+              dispatch({+                type: 'LocalMuteVideo',+                value: [true],+              });+              break;+            case controlMessageEnum.muteAudio:+              dispatch({+                type: 'LocalMuteAudio',+                value: [true],+              });+              break;+            case controlMessageEnum.kickUser:+              dispatch({+                type: 'EndCall',+                value: [],+              });+              break;+            default:+              break;+          }+        } catch (e) {+          events.emit(mChannelType.Private, null, {+            msg: `Error while dispatching ${mChannelType.Private} control message`,+            cause: e,           });+          return;         }-      } else if (text[0] === mType.Normal) {-        let arr = new Int32Array(1);-        arr[0] = parseInt(evt.peerId);-        // console.log(evt);-        let hours = new Date(evt.ts).getHours;-        if (isNaN(hours)) {-          evt.ts = new Date().getTime();+      } else if (type === mType.Normal) {+        try {+          addMessageToPrivateStore(+            userUID,+            `${type}${msg}`,+            timestamp.toString(),+            false,+          );+        } catch (e) {+          events.emit(mChannelType.Private, null, {+            msg: `Error while adding ${mChannelType.Private} message to store`,+            cause: e,
            error: e,
SupriyaAdep

comment created time in 11 minutes

PullRequestReviewEvent
PullRequestReviewEvent

Pull request review commentAgoraIO-Community/app-builder-core

Private notification toast

 const RtmConfigure = (props: any) => {     engine.current.on('channelMemberLeft', (data: any) => {       console.log('user left', data);       // Chat of left user becomes undefined. So don't cleanup-      //-      // let arr = new Int32Array(1);-      // arr[0] = parseInt(data.uid);-      // setUserList((prevState) => {-      //   const uid: number = Platform.OS === 'android' ? arr[0] : data.uid;-      //   const screenuid: number = prevState[uid].screenUid;-      //   const {[uid]: _user, [screenuid]: _screen, ...newState} = prevState;-      //   return newState;-      // });     });     engine.current.on('messageReceived', (evt: any) => {-      let {text} = evt;-      // console.log('messageReceived: ', evt);-      if (text[0] === mType.Control) {-        console.log('Control: ', text);-        if (text.slice(1) === controlMessageEnum.muteVideo) {-          // console.log('dispatch', dispatch);-          dispatch({-            type: 'LocalMuteVideo',-            value: [true],-          });-        } else if (text.slice(1) === controlMessageEnum.muteAudio) {-          dispatch({-            type: 'LocalMuteAudio',-            value: [true],-          });-        } else if (text.slice(1) === controlMessageEnum.kickUser) {-          dispatch({-            type: 'EndCall',-            value: [],+      const {peerId, ts, text} = evt;+      const textObj = parsePayload(text);+      const {type, msg} = textObj;++      let arr = new Int32Array(1);+      arr[0] = parseInt(peerId);++      const inHours = new Date(ts).getHours();+      const timestamp = isNaN(inHours) ? timeNow() : inHours;+      const userUID = Platform.OS === 'android' ? arr[0] : peerId;++      if (type === mType.Control) {+        try {+          switch (msg) {+            case controlMessageEnum.muteVideo:+              dispatch({+                type: 'LocalMuteVideo',+                value: [true],+              });+              break;+            case controlMessageEnum.muteAudio:+              dispatch({+                type: 'LocalMuteAudio',+                value: [true],+              });+              break;+            case controlMessageEnum.kickUser:+              dispatch({+                type: 'EndCall',+                value: [],+              });+              break;+            default:+              break;+          }+        } catch (e) {+          events.emit(mChannelType.Private, null, {+            msg: `Error while dispatching ${mChannelType.Private} control message`,+            cause: e,
            error: e,
SupriyaAdep

comment created time in 11 minutes

delete branch AgoraIO-Community/app-builder-core

delete branch : toast-notification-private-message

delete time in 2 hours

PR closed AgoraIO-Community/app-builder-core

Toast notification private message

Show notification toast when user receives a direct message.

  • If the user is NOT sharing his screen, message is visible
  • If the user IS sharing his screen, message content is hidden
+159 -75

0 comment

4 changed files

SupriyaAdep

pr closed time in 2 hours

PR opened AgoraIO-Community/app-builder-core

Private notification toast

Related Issue

  • Generate toast notifications for private messages
  • Clickup Issue: https://app.clickup.com/t/51hvqy

Proposed changes/Fix

  • Expose an API to subscribe, emit, destroy the listeners when a private or public message is received.
  • Export this API in RTM(chatContext) provider, so that all the descendants of this component have access to this API.
  • In Videocall component subscribe to private or public message events and register the callback to perform necessary actions.
  • Add additional metadata when text is being sent over transport layer.

Additional Info

  • RTMConfigure.tsx had lot of changes and the message passing through the transport layer now has changed and contains additional information, source and type of the message being sent.

Checklist

  • [ ] Tested on local/dev branch for all major platforms (Android, IOS, Desktop, Web).
  • [ ] No commented out code
  • [ ] Is any third party library, service used
  • [ ] Tests
  • [ ] If this change requires updates outside of the code, like updates in core, react-ui-kit, RTM/RTC configure.

Dependent PRs

  • NA

Screenshots

Original Updated
original screenshot updated screenshot
+297 -139

0 comment

4 changed files

pr created time in 3 hours

create barnchAgoraIO-Community/app-builder-core

branch : private-notification-toast

created branch time in 3 hours

push eventAgoraIO-Community/NG-APIExamples

LiuQiang

commit sha 5be05bd8909059da3511a585df9a54d07830a69d

[FEAT] update target SDK version to 31, better support Android 12.

view details

LiuQiang

commit sha adcb4a64dd8956444610ff5ec8a954763ed4113a

[OPT] add unsubscribe logic to demo fragment.

view details

push time in 4 hours

push eventAgoraIO-Community/app-builder-core

Nitesh Tiwari

commit sha ba194720bd56459f602e04f6df3e5e828aed10a6

Added PR template

view details

push time in 4 hours

issue commentAgoraIO-Community/react-native-agora

Microphone Permissions: Privacy concerns

I have tested it, it works fine, joining the channel as an audience without microphone permission.

jfbourne

comment created time in 5 hours

startedAgoraIO-Community/Solo

started time in 6 hours

issue openedAgoraIO-Community/RTE-Workshop

[建议] 增加云市场插件集成活动

目标

基于 SimpleFilter 示例项目,引导开发者集成现在云市场的插件,包括向芯、云知声等。

参考资料

created time in 6 hours

push eventAgoraIO-Community/CloudClass-iOS

lixm1988

commit sha d1b5a5b3d641edf8151ba656b23d4228d36265b5

[FIX]: upate emoji image && update barrage renderer

view details

李小明

commit sha e33315486426f03df79e6bcda03cf8be54ba0911

Update ChatWidget.m

view details

Yakamoz

commit sha 516b94aa79ed3cdf0cb8049c90a69438f2691d9d

Merge pull request #55 from lixm1988/dev/apaas/1.1.4-jh [FIX]: upate emoji image && update barrage renderer

view details

push time in 6 hours

issue commentAgoraIO-Community/Agora-Unreal-SDK

Packaging error on iOS

Hello, is there any news?

jlu787

comment created time in 8 hours

PR opened AgoraIO-Community/RTE-Workshop

[FEAT] Android is ready for dev.
+179453 -0

0 comment

501 changed files

pr created time in 9 hours

startedAgoraIO-Community/CloudClass-Desktop

started time in 10 hours

issue commentAgoraIO-Community/react-native-agora

setBeautyEffectOptions not working

If you want to use third-party beauty SDK, I think you should have some knowledge about native.

chellongCoder

comment created time in 11 hours

issue commentAgoraIO-Community/react-native-agora

setBeautyEffectOptions not working

@LichKing-2234 image Excuse me! Can you suggest some hint to custom videoFrame ? I do not have more knowledge about swift, I extremely needed some code to custom func onCapture. Example: I want to insert any icon image to video stream thread. 😅

chellongCoder

comment created time in 11 hours