@onyx-p/imlib-web 1.7.0 → 1.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.esm.js CHANGED
@@ -134,6 +134,7 @@ var Events;
134
134
  Events["PULL_OFFLINE_MESSAGE_FINISHED"] = "PULL_OFFLINE_MESSAGE_FINISHED";
135
135
  Events["CONVERSATION"] = "CONVERSATION";
136
136
  Events["PUSH"] = "PUSH";
137
+ Events["RECALL"] = "RECALL";
137
138
  })(Events || (Events = {}));
138
139
 
139
140
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
@@ -19019,7 +19020,7 @@ class ConversationStore {
19019
19020
  }
19020
19021
  if (messageType === MessageTypes.RECALL && conversationType === ConversationType.GROUP) {
19021
19022
  const recallContent = content;
19022
- const index = localMentionedUIdList.indexOf(recallContent.msgId.toString());
19023
+ const index = localMentionedUIdList.indexOf(recallContent.messageUId.toString());
19023
19024
  if (index >= 0) {
19024
19025
  localMentionedUIdList.splice(index, 1);
19025
19026
  }
@@ -19644,7 +19645,6 @@ const parseSingleDialogMessages = (dialogId, originalMessageList, aesKey) => {
19644
19645
  return [];
19645
19646
  }
19646
19647
  const localConversation = ConversationManager$1.get().get(conversation);
19647
- const recallMessageUIds = new Set();
19648
19648
  let contentList = [];
19649
19649
  originalMessageList.forEach(item => {
19650
19650
  const dialogMessage = item;
@@ -19661,7 +19661,6 @@ const parseSingleDialogMessages = (dialogId, originalMessageList, aesKey) => {
19661
19661
  };
19662
19662
  mediaConstructor = MessageTypes.RECALL;
19663
19663
  mediaAttributeJson = recallContent;
19664
- recallMessageUIds.add(msgId);
19665
19664
  }
19666
19665
  const messageInstance = decodeMessage(mediaConstructor, mediaAttributeJson);
19667
19666
  if (isDef(messageInstance)) {
@@ -19690,9 +19689,6 @@ const parseSingleDialogMessages = (dialogId, originalMessageList, aesKey) => {
19690
19689
  contentList.push(receivedMessage);
19691
19690
  }
19692
19691
  });
19693
- if (recallMessageUIds.size) {
19694
- contentList = contentList.filter(e => !recallMessageUIds.has(e.messageUId));
19695
- }
19696
19692
  return contentList;
19697
19693
  };
19698
19694
  const decodeMessageContent = (dialogMessage, aesKey) => {
@@ -19718,11 +19714,12 @@ const decodeMessageContent = (dialogMessage, aesKey) => {
19718
19714
  };
19719
19715
  const parseMediaAttributeJson = (mediaConstructor, mediaAttribute, msgPostContent) => {
19720
19716
  let mediaAttributeJson = {};
19721
- if (mediaAttribute?.length) {
19722
- mediaAttributeJson = JSON.parse(mediaAttribute);
19723
- }
19724
19717
  if (mediaConstructor == MessageTypes.TEXT && msgPostContent) {
19725
19718
  mediaAttributeJson.content = msgPostContent;
19719
+ } else {
19720
+ if (mediaAttribute?.length) {
19721
+ mediaAttributeJson = JSON.parse(mediaAttribute);
19722
+ }
19726
19723
  }
19727
19724
  return mediaAttributeJson;
19728
19725
  };
@@ -19861,9 +19858,10 @@ class MessageLoader {
19861
19858
  await ConversationManager$1.get().loadConvsationsIfNotExist(cons);
19862
19859
  serverMessageParser.parse(msg, (done, outputMsgs) => {
19863
19860
  const messages = [];
19861
+ const recallMessageIndexes = [];
19864
19862
  const isOffLineMessage = !this.pullOfflineFinished;
19865
19863
  outputMsgs.forEach((l, dialogId) => {
19866
- const messageList = [];
19864
+ let messageList = [];
19867
19865
  l.forEach(m => {
19868
19866
  if (m.messageDirection === MessageDirection.SEND && m.messageId && SentMessageStore.has(m.messageId)) {
19869
19867
  SentMessageStore.remove(m.messageId);
@@ -19873,12 +19871,33 @@ class MessageLoader {
19873
19871
  m.isOffLineMessage = isOffLineMessage;
19874
19872
  ConversationManager$1.get().setConversationCacheByMessage(m);
19875
19873
  messageList.push(m);
19874
+ if (m.messageType === MessageTypes.RECALL) {
19875
+ recallMessageIndexes.push(messageList.length - 1);
19876
+ }
19876
19877
  }
19877
19878
  });
19879
+ let recallMessageUIds = [];
19880
+ let deletedMessageIndexes = [];
19881
+ for (let i = recallMessageIndexes.length - 1; i >= 0; i--) {
19882
+ const index = recallMessageIndexes[i];
19883
+ const recallMessage = messageList[index];
19884
+ const recallContent = recallMessage.content;
19885
+ const messageIndex = messageList.findIndex(m => m.messageUId === recallContent.messageUId);
19886
+ if (messageIndex !== -1) {
19887
+ deletedMessageIndexes.push(messageIndex);
19888
+ } else {
19889
+ recallMessageUIds.push(recallContent.messageUId);
19890
+ deletedMessageIndexes.push(index);
19891
+ }
19892
+ }
19893
+ messageList = messageList.filter((m, index) => !deletedMessageIndexes.includes(index));
19878
19894
  messages.push(...messageList);
19879
19895
  if (this.isExistPersistedMessage(messageList)) {
19880
19896
  splitFullDialog(dialogId);
19881
19897
  }
19898
+ if (recallMessageUIds.length) {
19899
+ this.watcher.onRecall?.(recallMessageUIds);
19900
+ }
19882
19901
  });
19883
19902
  if (messages.length) {
19884
19903
  this.watcher.batchMessage?.(messages);
@@ -19973,7 +19992,8 @@ class LibLoader {
19973
19992
  pullFinished: undefined,
19974
19993
  batchMessage: undefined,
19975
19994
  conversationState: undefined,
19976
- onPush: undefined
19995
+ onPush: undefined,
19996
+ onRecall: undefined
19977
19997
  };
19978
19998
  webSocketServer.setServerInfo(this.getWebSocketUrl());
19979
19999
  webSocketServer.setCallback({
@@ -27438,6 +27458,11 @@ class IMClient extends EventEmitter {
27438
27458
  cmdId,
27439
27459
  body
27440
27460
  });
27461
+ },
27462
+ onRecall: messageUids => {
27463
+ messageUids.forEach(messageUId => {
27464
+ this.emit(Events.RECALL, messageUId);
27465
+ });
27441
27466
  }
27442
27467
  });
27443
27468
  }
package/index.umd.js CHANGED
@@ -140,6 +140,7 @@
140
140
  Events["PULL_OFFLINE_MESSAGE_FINISHED"] = "PULL_OFFLINE_MESSAGE_FINISHED";
141
141
  Events["CONVERSATION"] = "CONVERSATION";
142
142
  Events["PUSH"] = "PUSH";
143
+ Events["RECALL"] = "RECALL";
143
144
  })(exports.Events || (exports.Events = {}));
144
145
 
145
146
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
@@ -19025,7 +19026,7 @@
19025
19026
  }
19026
19027
  if (messageType === MessageTypes.RECALL && conversationType === exports.ConversationType.GROUP) {
19027
19028
  const recallContent = content;
19028
- const index = localMentionedUIdList.indexOf(recallContent.msgId.toString());
19029
+ const index = localMentionedUIdList.indexOf(recallContent.messageUId.toString());
19029
19030
  if (index >= 0) {
19030
19031
  localMentionedUIdList.splice(index, 1);
19031
19032
  }
@@ -19650,7 +19651,6 @@
19650
19651
  return [];
19651
19652
  }
19652
19653
  const localConversation = ConversationManager$1.get().get(conversation);
19653
- const recallMessageUIds = new Set();
19654
19654
  let contentList = [];
19655
19655
  originalMessageList.forEach(item => {
19656
19656
  const dialogMessage = item;
@@ -19667,7 +19667,6 @@
19667
19667
  };
19668
19668
  mediaConstructor = MessageTypes.RECALL;
19669
19669
  mediaAttributeJson = recallContent;
19670
- recallMessageUIds.add(msgId);
19671
19670
  }
19672
19671
  const messageInstance = decodeMessage(mediaConstructor, mediaAttributeJson);
19673
19672
  if (isDef(messageInstance)) {
@@ -19696,9 +19695,6 @@
19696
19695
  contentList.push(receivedMessage);
19697
19696
  }
19698
19697
  });
19699
- if (recallMessageUIds.size) {
19700
- contentList = contentList.filter(e => !recallMessageUIds.has(e.messageUId));
19701
- }
19702
19698
  return contentList;
19703
19699
  };
19704
19700
  const decodeMessageContent = (dialogMessage, aesKey) => {
@@ -19724,11 +19720,12 @@
19724
19720
  };
19725
19721
  const parseMediaAttributeJson = (mediaConstructor, mediaAttribute, msgPostContent) => {
19726
19722
  let mediaAttributeJson = {};
19727
- if (mediaAttribute?.length) {
19728
- mediaAttributeJson = JSON.parse(mediaAttribute);
19729
- }
19730
19723
  if (mediaConstructor == MessageTypes.TEXT && msgPostContent) {
19731
19724
  mediaAttributeJson.content = msgPostContent;
19725
+ } else {
19726
+ if (mediaAttribute?.length) {
19727
+ mediaAttributeJson = JSON.parse(mediaAttribute);
19728
+ }
19732
19729
  }
19733
19730
  return mediaAttributeJson;
19734
19731
  };
@@ -19867,9 +19864,10 @@
19867
19864
  await ConversationManager$1.get().loadConvsationsIfNotExist(cons);
19868
19865
  serverMessageParser.parse(msg, (done, outputMsgs) => {
19869
19866
  const messages = [];
19867
+ const recallMessageIndexes = [];
19870
19868
  const isOffLineMessage = !this.pullOfflineFinished;
19871
19869
  outputMsgs.forEach((l, dialogId) => {
19872
- const messageList = [];
19870
+ let messageList = [];
19873
19871
  l.forEach(m => {
19874
19872
  if (m.messageDirection === exports.MessageDirection.SEND && m.messageId && SentMessageStore.has(m.messageId)) {
19875
19873
  SentMessageStore.remove(m.messageId);
@@ -19879,12 +19877,33 @@
19879
19877
  m.isOffLineMessage = isOffLineMessage;
19880
19878
  ConversationManager$1.get().setConversationCacheByMessage(m);
19881
19879
  messageList.push(m);
19880
+ if (m.messageType === MessageTypes.RECALL) {
19881
+ recallMessageIndexes.push(messageList.length - 1);
19882
+ }
19882
19883
  }
19883
19884
  });
19885
+ let recallMessageUIds = [];
19886
+ let deletedMessageIndexes = [];
19887
+ for (let i = recallMessageIndexes.length - 1; i >= 0; i--) {
19888
+ const index = recallMessageIndexes[i];
19889
+ const recallMessage = messageList[index];
19890
+ const recallContent = recallMessage.content;
19891
+ const messageIndex = messageList.findIndex(m => m.messageUId === recallContent.messageUId);
19892
+ if (messageIndex !== -1) {
19893
+ deletedMessageIndexes.push(messageIndex);
19894
+ } else {
19895
+ recallMessageUIds.push(recallContent.messageUId);
19896
+ deletedMessageIndexes.push(index);
19897
+ }
19898
+ }
19899
+ messageList = messageList.filter((m, index) => !deletedMessageIndexes.includes(index));
19884
19900
  messages.push(...messageList);
19885
19901
  if (this.isExistPersistedMessage(messageList)) {
19886
19902
  splitFullDialog(dialogId);
19887
19903
  }
19904
+ if (recallMessageUIds.length) {
19905
+ this.watcher.onRecall?.(recallMessageUIds);
19906
+ }
19888
19907
  });
19889
19908
  if (messages.length) {
19890
19909
  this.watcher.batchMessage?.(messages);
@@ -19979,7 +19998,8 @@
19979
19998
  pullFinished: undefined,
19980
19999
  batchMessage: undefined,
19981
20000
  conversationState: undefined,
19982
- onPush: undefined
20001
+ onPush: undefined,
20002
+ onRecall: undefined
19983
20003
  };
19984
20004
  webSocketServer.setServerInfo(this.getWebSocketUrl());
19985
20005
  webSocketServer.setCallback({
@@ -27444,6 +27464,11 @@
27444
27464
  cmdId,
27445
27465
  body
27446
27466
  });
27467
+ },
27468
+ onRecall: messageUids => {
27469
+ messageUids.forEach(messageUId => {
27470
+ this.emit(exports.Events.RECALL, messageUId);
27471
+ });
27447
27472
  }
27448
27473
  });
27449
27474
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onyx-p/imlib-web",
3
- "version": "1.7.0",
3
+ "version": "1.7.3",
4
4
  "main": "index.umd.js",
5
5
  "module": "index.esm.js",
6
6
  "types": "types/index.d.ts",
package/types/types.d.ts CHANGED
@@ -38,7 +38,8 @@ export declare enum Events {
38
38
  MESSAGES = "MESSAGES",
39
39
  PULL_OFFLINE_MESSAGE_FINISHED = "PULL_OFFLINE_MESSAGE_FINISHED",
40
40
  CONVERSATION = "CONVERSATION",
41
- PUSH = "PUSH"
41
+ PUSH = "PUSH",
42
+ RECALL = "RECALL"
42
43
  }
43
44
  export type EventListeners = {
44
45
  [Events.CONNECTING]: () => void;
@@ -56,6 +57,7 @@ export type EventListeners = {
56
57
  cmdId: number;
57
58
  body: Uint8Array;
58
59
  }) => void;
60
+ [Events.RECALL]: (messageUId: string) => void;
59
61
  };
60
62
  export interface IBaseConversationInfo {
61
63
  conversationType: ConversationType;