@onyx-p/imlib-web 1.8.5 → 1.8.7
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 +152 -8
- package/index.umd.js +152 -8
- package/package.json +1 -1
- package/types/model/iReceivedConversation.d.ts +4 -0
package/index.esm.js
CHANGED
@@ -20059,6 +20059,7 @@ class ConversationManager {
|
|
20059
20059
|
};
|
20060
20060
|
}
|
20061
20061
|
if (isPersited) {
|
20062
|
+
updateConOptions.conversation.updateTime = parseInt(message.sentTime);
|
20062
20063
|
updateConOptions.conversation.latestMessage = message;
|
20063
20064
|
updateConOptions.updatedItems.latestMessage = {
|
20064
20065
|
time: message.sentTime,
|
@@ -20498,16 +20499,26 @@ const UNREADMESSAGEUIDS_KEY = 'unreadMessageUids';
|
|
20498
20499
|
class MessageReceiptManager {
|
20499
20500
|
localStore;
|
20500
20501
|
constructor(appkey, currentUserId) {
|
20501
|
-
const suffix = `receipt-${appkey}-${currentUserId}`;
|
20502
|
+
const suffix = `receipt-v2-${appkey}-${currentUserId}`;
|
20502
20503
|
this.localStore = new AppStorage(suffix);
|
20503
20504
|
}
|
20504
20505
|
storeUnreadMessageUids(messageList) {
|
20505
20506
|
const validMessages = messageList.filter(m => m.isCounted && m.messageDirection !== MessageDirection.SEND);
|
20506
|
-
const
|
20507
|
-
|
20508
|
-
|
20507
|
+
const messageUidsWithTimestamp = validMessages.map(m => ({
|
20508
|
+
uid: m.messageUId,
|
20509
|
+
timestamp: Date.now()
|
20510
|
+
}));
|
20511
|
+
const existingUidsWithTimestamp = this.localStore.get(UNREADMESSAGEUIDS_KEY) || [];
|
20512
|
+
const updatedUids = [...existingUidsWithTimestamp, ...messageUidsWithTimestamp];
|
20509
20513
|
this.localStore.set(UNREADMESSAGEUIDS_KEY, updatedUids);
|
20510
20514
|
}
|
20515
|
+
cleanExpiredMessages() {
|
20516
|
+
const storedMessages = this.localStore.get(UNREADMESSAGEUIDS_KEY) || [];
|
20517
|
+
const twoDaysInMs = 2 * 24 * 60 * 60 * 1000;
|
20518
|
+
const currentTime = Date.now();
|
20519
|
+
const filteredMessages = storedMessages.filter(item => currentTime - item.timestamp <= twoDaysInMs);
|
20520
|
+
this.localStore.set(UNREADMESSAGEUIDS_KEY, filteredMessages);
|
20521
|
+
}
|
20511
20522
|
formatReceiptMessages(messages) {
|
20512
20523
|
const privateMessages = [];
|
20513
20524
|
const groupMessages = [];
|
@@ -20569,7 +20580,7 @@ class MessageReceiptManager {
|
|
20569
20580
|
}
|
20570
20581
|
async sendReadReceipts(messageList) {
|
20571
20582
|
const storedUnreadUids = this.localStore.get(UNREADMESSAGEUIDS_KEY) || [];
|
20572
|
-
const validMessages = this.filterValidMessages(messageList).filter(m => storedUnreadUids.
|
20583
|
+
const validMessages = this.filterValidMessages(messageList).filter(m => storedUnreadUids.some(item => item.uid === m.messageUId));
|
20573
20584
|
try {
|
20574
20585
|
const {
|
20575
20586
|
privateReceiptMessages,
|
@@ -20587,7 +20598,7 @@ class MessageReceiptManager {
|
|
20587
20598
|
}
|
20588
20599
|
const latestUnreadUids = this.localStore.get(UNREADMESSAGEUIDS_KEY) || [];
|
20589
20600
|
const sentMessageUids = validMessages.map(m => m.messageUId);
|
20590
|
-
const remainingUids = latestUnreadUids.filter(
|
20601
|
+
const remainingUids = latestUnreadUids.filter(item => !sentMessageUids.includes(item.uid));
|
20591
20602
|
this.localStore.set(UNREADMESSAGEUIDS_KEY, remainingUids);
|
20592
20603
|
} catch (error) {
|
20593
20604
|
console.error('发送已读回执失败:', error);
|
@@ -20599,6 +20610,7 @@ let manager;
|
|
20599
20610
|
var MessageReceiptManager$1 = {
|
20600
20611
|
create(appkey, currentUserId) {
|
20601
20612
|
manager = new MessageReceiptManager(appkey, currentUserId);
|
20613
|
+
manager.cleanExpiredMessages();
|
20602
20614
|
},
|
20603
20615
|
get() {
|
20604
20616
|
return manager;
|
@@ -28317,6 +28329,93 @@ function getMessageSentTime() {
|
|
28317
28329
|
return UniqueSentTime;
|
28318
28330
|
}
|
28319
28331
|
|
28332
|
+
class MessageCache {
|
28333
|
+
static instance;
|
28334
|
+
messageCache = new Map();
|
28335
|
+
maxCacheCount = 100;
|
28336
|
+
constructor() {}
|
28337
|
+
static get() {
|
28338
|
+
if (!MessageCache.instance) {
|
28339
|
+
MessageCache.instance = new MessageCache();
|
28340
|
+
}
|
28341
|
+
return MessageCache.instance;
|
28342
|
+
}
|
28343
|
+
setMaxCacheCount(count) {
|
28344
|
+
if (count > 0) {
|
28345
|
+
this.maxCacheCount = count;
|
28346
|
+
}
|
28347
|
+
}
|
28348
|
+
addMessages(messages) {
|
28349
|
+
if (!messages || messages.length === 0) {
|
28350
|
+
return;
|
28351
|
+
}
|
28352
|
+
const messagesByDialog = new Map();
|
28353
|
+
messages.forEach(message => {
|
28354
|
+
const dialogId = getFullDialogId({
|
28355
|
+
conversationType: message.conversationType,
|
28356
|
+
targetId: message.targetId
|
28357
|
+
});
|
28358
|
+
if (!messagesByDialog.has(dialogId)) {
|
28359
|
+
messagesByDialog.set(dialogId, []);
|
28360
|
+
}
|
28361
|
+
messagesByDialog.get(dialogId)?.push(message);
|
28362
|
+
});
|
28363
|
+
messagesByDialog.forEach((dialogMessages, dialogId) => {
|
28364
|
+
if (!this.messageCache.has(dialogId)) {
|
28365
|
+
this.messageCache.set(dialogId, []);
|
28366
|
+
}
|
28367
|
+
const cachedMessages = this.messageCache.get(dialogId) || [];
|
28368
|
+
const allMessages = [...cachedMessages, ...dialogMessages];
|
28369
|
+
if (allMessages.length > this.maxCacheCount) {
|
28370
|
+
allMessages.splice(0, allMessages.length - this.maxCacheCount);
|
28371
|
+
}
|
28372
|
+
this.messageCache.set(dialogId, allMessages);
|
28373
|
+
});
|
28374
|
+
}
|
28375
|
+
getPreviousMessages(conversation, timestamp = "0", count = 20) {
|
28376
|
+
const dialogId = getFullDialogId(conversation);
|
28377
|
+
const cachedMessages = this.messageCache.get(dialogId) || [];
|
28378
|
+
if (cachedMessages.length === 0) {
|
28379
|
+
return [];
|
28380
|
+
}
|
28381
|
+
if (timestamp === "0") {
|
28382
|
+
return cachedMessages.slice(-count);
|
28383
|
+
}
|
28384
|
+
const timestampLong = Long.fromString(timestamp);
|
28385
|
+
let endIndex = cachedMessages.length - 1;
|
28386
|
+
while (endIndex >= 0) {
|
28387
|
+
if (Long.fromString(cachedMessages[endIndex].sentTime).lessThanOrEqual(timestampLong)) {
|
28388
|
+
break;
|
28389
|
+
}
|
28390
|
+
endIndex--;
|
28391
|
+
}
|
28392
|
+
if (endIndex < 0) {
|
28393
|
+
return [];
|
28394
|
+
}
|
28395
|
+
const startIndex = Math.max(0, endIndex - count + 1);
|
28396
|
+
return cachedMessages.slice(startIndex, endIndex + 1);
|
28397
|
+
}
|
28398
|
+
clearConversationCache(conversation) {
|
28399
|
+
const dialogId = getFullDialogId(conversation);
|
28400
|
+
this.messageCache.delete(dialogId);
|
28401
|
+
}
|
28402
|
+
clearAllCache() {
|
28403
|
+
this.messageCache.clear();
|
28404
|
+
}
|
28405
|
+
removeMessagesByUId(messageUIds) {
|
28406
|
+
if (!messageUIds || messageUIds.length === 0) {
|
28407
|
+
return;
|
28408
|
+
}
|
28409
|
+
const messageUIdSet = new Set(messageUIds);
|
28410
|
+
this.messageCache.forEach((messages, dialogId) => {
|
28411
|
+
const filteredMessages = messages.filter(msg => !messageUIdSet.has(msg.messageUId));
|
28412
|
+
if (filteredMessages.length !== messages.length) {
|
28413
|
+
this.messageCache.set(dialogId, filteredMessages);
|
28414
|
+
}
|
28415
|
+
});
|
28416
|
+
}
|
28417
|
+
}
|
28418
|
+
|
28320
28419
|
class IMClient extends EventEmitter {
|
28321
28420
|
options;
|
28322
28421
|
static imClient;
|
@@ -28364,6 +28463,7 @@ class IMClient extends EventEmitter {
|
|
28364
28463
|
this.emit(Events.SUSPEND, this.libLoader.getConnectionStatus());
|
28365
28464
|
},
|
28366
28465
|
batchMessage: messages => {
|
28466
|
+
MessageCache.get().addMessages(messages);
|
28367
28467
|
this.emit(Events.MESSAGES, {
|
28368
28468
|
messages
|
28369
28469
|
});
|
@@ -28383,6 +28483,7 @@ class IMClient extends EventEmitter {
|
|
28383
28483
|
});
|
28384
28484
|
},
|
28385
28485
|
onRecall: messageUids => {
|
28486
|
+
MessageCache.get().removeMessagesByUId(messageUids);
|
28386
28487
|
messageUids.forEach(messageUId => {
|
28387
28488
|
this.emit(Events.RECALL, messageUId);
|
28388
28489
|
});
|
@@ -28425,7 +28526,7 @@ class IMClient extends EventEmitter {
|
|
28425
28526
|
const dialogId = getFullDialogId(conversation);
|
28426
28527
|
return getRemoteMessages({
|
28427
28528
|
dialogId,
|
28428
|
-
offset: options.timestamp ??
|
28529
|
+
offset: options.timestamp ?? '0',
|
28429
28530
|
count: options.count ?? 20,
|
28430
28531
|
newToOld: options.order === 0
|
28431
28532
|
}).then(({
|
@@ -28459,10 +28560,42 @@ class IMClient extends EventEmitter {
|
|
28459
28560
|
});
|
28460
28561
|
});
|
28461
28562
|
}
|
28563
|
+
async getPreviousHistoryMessages(conversation, timestamp, count = 20) {
|
28564
|
+
const cachedMessages = MessageCache.get().getPreviousMessages(conversation, timestamp, count);
|
28565
|
+
if (!timestamp) {
|
28566
|
+
ConversationManager$1.get().refreshLatestMessage(conversation, cachedMessages[cachedMessages.length - 1]);
|
28567
|
+
}
|
28568
|
+
if (cachedMessages.length >= count) {
|
28569
|
+
return {
|
28570
|
+
code: ErrorCode.SUCCESS,
|
28571
|
+
data: {
|
28572
|
+
list: cachedMessages,
|
28573
|
+
hasMore: true
|
28574
|
+
}
|
28575
|
+
};
|
28576
|
+
}
|
28577
|
+
const remotesResult = await this.getRemoteHistoryMessages(conversation, {
|
28578
|
+
timestamp: cachedMessages[0].sentTime ?? timestamp,
|
28579
|
+
count: count - cachedMessages.length,
|
28580
|
+
order: 0
|
28581
|
+
});
|
28582
|
+
if (remotesResult.code !== ErrorCode.SUCCESS) {
|
28583
|
+
return remotesResult;
|
28584
|
+
}
|
28585
|
+
return {
|
28586
|
+
code: ErrorCode.SUCCESS,
|
28587
|
+
data: {
|
28588
|
+
list: [...remotesResult.data.list, ...cachedMessages],
|
28589
|
+
hasMore: remotesResult.data.hasMore
|
28590
|
+
}
|
28591
|
+
};
|
28592
|
+
}
|
28462
28593
|
async deleteRemoteMessage(conversation, list) {
|
28594
|
+
MessageCache.get().removeMessagesByUId(list.map(e => e.messageUId));
|
28463
28595
|
return deleteMessages$1(getFullDialogId(conversation), list.map(e => e.messageUId)).then(result => result.code);
|
28464
28596
|
}
|
28465
28597
|
async deleteRemoteMessageByTimestamp(conversation, timestamp) {
|
28598
|
+
MessageCache.get().clearConversationCache(conversation);
|
28466
28599
|
ConversationManager$1.get().clearHistoryMessages(conversation);
|
28467
28600
|
return clearHistoryMessage(getFullDialogId(conversation), timestamp === 0 ? Number.MAX_VALUE : timestamp).then(result => result.code);
|
28468
28601
|
}
|
@@ -28492,6 +28625,11 @@ class IMClient extends EventEmitter {
|
|
28492
28625
|
conversationType: conversationObj.conversationType,
|
28493
28626
|
targetId: conversationObj.targetId
|
28494
28627
|
};
|
28628
|
+
if (isDef(conversationObj.latestMessage)) {
|
28629
|
+
conversationObj.updateTime = parseInt(conversationObj.latestMessage.sentTime);
|
28630
|
+
} else {
|
28631
|
+
conversationObj.updateTime = (contentList[contentList.length - 1].updateTime ?? 0) + 1;
|
28632
|
+
}
|
28495
28633
|
ConversationManager$1.get().addLocalConversation(conversationObj);
|
28496
28634
|
const localConversation = ConversationManager$1.get().get(conOpt);
|
28497
28635
|
Object.assign(conversationObj, localConversation);
|
@@ -28540,6 +28678,7 @@ class IMClient extends EventEmitter {
|
|
28540
28678
|
const conversation = {
|
28541
28679
|
...conOpt,
|
28542
28680
|
...localConversation,
|
28681
|
+
updateTime: isDef(latestMessage?.sentTime) ? parseInt(latestMessage.sentTime) : undefined,
|
28543
28682
|
latestMessage: latestMessage
|
28544
28683
|
};
|
28545
28684
|
return {
|
@@ -29842,7 +29981,12 @@ const getRemoteHistoryMessages = async (conversation, options) => {
|
|
29842
29981
|
assert('conversation', conversation, AssertRules.CONVERSATION, true);
|
29843
29982
|
const paramsStr = 'conversationType:' + conversation.conversationType + ',targetId:' + conversation.targetId;
|
29844
29983
|
logger.debug('get remote history message ->' + paramsStr);
|
29845
|
-
|
29984
|
+
let response;
|
29985
|
+
if (options.order === 0) {
|
29986
|
+
response = await imClient.getPreviousHistoryMessages(conversation, options.timestamp, options.count);
|
29987
|
+
} else {
|
29988
|
+
response = await imClient.getRemoteHistoryMessages(conversation, options);
|
29989
|
+
}
|
29846
29990
|
if (response.code !== ErrorCode.SUCCESS) {
|
29847
29991
|
logger.warn('get remote history message fail ->' + response.code + ':' + ErrorDesc(response.code) + ',' + paramsStr);
|
29848
29992
|
}
|
package/index.umd.js
CHANGED
@@ -20065,6 +20065,7 @@
|
|
20065
20065
|
};
|
20066
20066
|
}
|
20067
20067
|
if (isPersited) {
|
20068
|
+
updateConOptions.conversation.updateTime = parseInt(message.sentTime);
|
20068
20069
|
updateConOptions.conversation.latestMessage = message;
|
20069
20070
|
updateConOptions.updatedItems.latestMessage = {
|
20070
20071
|
time: message.sentTime,
|
@@ -20504,16 +20505,26 @@
|
|
20504
20505
|
class MessageReceiptManager {
|
20505
20506
|
localStore;
|
20506
20507
|
constructor(appkey, currentUserId) {
|
20507
|
-
const suffix = `receipt-${appkey}-${currentUserId}`;
|
20508
|
+
const suffix = `receipt-v2-${appkey}-${currentUserId}`;
|
20508
20509
|
this.localStore = new AppStorage(suffix);
|
20509
20510
|
}
|
20510
20511
|
storeUnreadMessageUids(messageList) {
|
20511
20512
|
const validMessages = messageList.filter(m => m.isCounted && m.messageDirection !== exports.MessageDirection.SEND);
|
20512
|
-
const
|
20513
|
-
|
20514
|
-
|
20513
|
+
const messageUidsWithTimestamp = validMessages.map(m => ({
|
20514
|
+
uid: m.messageUId,
|
20515
|
+
timestamp: Date.now()
|
20516
|
+
}));
|
20517
|
+
const existingUidsWithTimestamp = this.localStore.get(UNREADMESSAGEUIDS_KEY) || [];
|
20518
|
+
const updatedUids = [...existingUidsWithTimestamp, ...messageUidsWithTimestamp];
|
20515
20519
|
this.localStore.set(UNREADMESSAGEUIDS_KEY, updatedUids);
|
20516
20520
|
}
|
20521
|
+
cleanExpiredMessages() {
|
20522
|
+
const storedMessages = this.localStore.get(UNREADMESSAGEUIDS_KEY) || [];
|
20523
|
+
const twoDaysInMs = 2 * 24 * 60 * 60 * 1000;
|
20524
|
+
const currentTime = Date.now();
|
20525
|
+
const filteredMessages = storedMessages.filter(item => currentTime - item.timestamp <= twoDaysInMs);
|
20526
|
+
this.localStore.set(UNREADMESSAGEUIDS_KEY, filteredMessages);
|
20527
|
+
}
|
20517
20528
|
formatReceiptMessages(messages) {
|
20518
20529
|
const privateMessages = [];
|
20519
20530
|
const groupMessages = [];
|
@@ -20575,7 +20586,7 @@
|
|
20575
20586
|
}
|
20576
20587
|
async sendReadReceipts(messageList) {
|
20577
20588
|
const storedUnreadUids = this.localStore.get(UNREADMESSAGEUIDS_KEY) || [];
|
20578
|
-
const validMessages = this.filterValidMessages(messageList).filter(m => storedUnreadUids.
|
20589
|
+
const validMessages = this.filterValidMessages(messageList).filter(m => storedUnreadUids.some(item => item.uid === m.messageUId));
|
20579
20590
|
try {
|
20580
20591
|
const {
|
20581
20592
|
privateReceiptMessages,
|
@@ -20593,7 +20604,7 @@
|
|
20593
20604
|
}
|
20594
20605
|
const latestUnreadUids = this.localStore.get(UNREADMESSAGEUIDS_KEY) || [];
|
20595
20606
|
const sentMessageUids = validMessages.map(m => m.messageUId);
|
20596
|
-
const remainingUids = latestUnreadUids.filter(
|
20607
|
+
const remainingUids = latestUnreadUids.filter(item => !sentMessageUids.includes(item.uid));
|
20597
20608
|
this.localStore.set(UNREADMESSAGEUIDS_KEY, remainingUids);
|
20598
20609
|
} catch (error) {
|
20599
20610
|
console.error('发送已读回执失败:', error);
|
@@ -20605,6 +20616,7 @@
|
|
20605
20616
|
var MessageReceiptManager$1 = {
|
20606
20617
|
create(appkey, currentUserId) {
|
20607
20618
|
manager = new MessageReceiptManager(appkey, currentUserId);
|
20619
|
+
manager.cleanExpiredMessages();
|
20608
20620
|
},
|
20609
20621
|
get() {
|
20610
20622
|
return manager;
|
@@ -28323,6 +28335,93 @@
|
|
28323
28335
|
return UniqueSentTime;
|
28324
28336
|
}
|
28325
28337
|
|
28338
|
+
class MessageCache {
|
28339
|
+
static instance;
|
28340
|
+
messageCache = new Map();
|
28341
|
+
maxCacheCount = 100;
|
28342
|
+
constructor() {}
|
28343
|
+
static get() {
|
28344
|
+
if (!MessageCache.instance) {
|
28345
|
+
MessageCache.instance = new MessageCache();
|
28346
|
+
}
|
28347
|
+
return MessageCache.instance;
|
28348
|
+
}
|
28349
|
+
setMaxCacheCount(count) {
|
28350
|
+
if (count > 0) {
|
28351
|
+
this.maxCacheCount = count;
|
28352
|
+
}
|
28353
|
+
}
|
28354
|
+
addMessages(messages) {
|
28355
|
+
if (!messages || messages.length === 0) {
|
28356
|
+
return;
|
28357
|
+
}
|
28358
|
+
const messagesByDialog = new Map();
|
28359
|
+
messages.forEach(message => {
|
28360
|
+
const dialogId = getFullDialogId({
|
28361
|
+
conversationType: message.conversationType,
|
28362
|
+
targetId: message.targetId
|
28363
|
+
});
|
28364
|
+
if (!messagesByDialog.has(dialogId)) {
|
28365
|
+
messagesByDialog.set(dialogId, []);
|
28366
|
+
}
|
28367
|
+
messagesByDialog.get(dialogId)?.push(message);
|
28368
|
+
});
|
28369
|
+
messagesByDialog.forEach((dialogMessages, dialogId) => {
|
28370
|
+
if (!this.messageCache.has(dialogId)) {
|
28371
|
+
this.messageCache.set(dialogId, []);
|
28372
|
+
}
|
28373
|
+
const cachedMessages = this.messageCache.get(dialogId) || [];
|
28374
|
+
const allMessages = [...cachedMessages, ...dialogMessages];
|
28375
|
+
if (allMessages.length > this.maxCacheCount) {
|
28376
|
+
allMessages.splice(0, allMessages.length - this.maxCacheCount);
|
28377
|
+
}
|
28378
|
+
this.messageCache.set(dialogId, allMessages);
|
28379
|
+
});
|
28380
|
+
}
|
28381
|
+
getPreviousMessages(conversation, timestamp = "0", count = 20) {
|
28382
|
+
const dialogId = getFullDialogId(conversation);
|
28383
|
+
const cachedMessages = this.messageCache.get(dialogId) || [];
|
28384
|
+
if (cachedMessages.length === 0) {
|
28385
|
+
return [];
|
28386
|
+
}
|
28387
|
+
if (timestamp === "0") {
|
28388
|
+
return cachedMessages.slice(-count);
|
28389
|
+
}
|
28390
|
+
const timestampLong = Long.fromString(timestamp);
|
28391
|
+
let endIndex = cachedMessages.length - 1;
|
28392
|
+
while (endIndex >= 0) {
|
28393
|
+
if (Long.fromString(cachedMessages[endIndex].sentTime).lessThanOrEqual(timestampLong)) {
|
28394
|
+
break;
|
28395
|
+
}
|
28396
|
+
endIndex--;
|
28397
|
+
}
|
28398
|
+
if (endIndex < 0) {
|
28399
|
+
return [];
|
28400
|
+
}
|
28401
|
+
const startIndex = Math.max(0, endIndex - count + 1);
|
28402
|
+
return cachedMessages.slice(startIndex, endIndex + 1);
|
28403
|
+
}
|
28404
|
+
clearConversationCache(conversation) {
|
28405
|
+
const dialogId = getFullDialogId(conversation);
|
28406
|
+
this.messageCache.delete(dialogId);
|
28407
|
+
}
|
28408
|
+
clearAllCache() {
|
28409
|
+
this.messageCache.clear();
|
28410
|
+
}
|
28411
|
+
removeMessagesByUId(messageUIds) {
|
28412
|
+
if (!messageUIds || messageUIds.length === 0) {
|
28413
|
+
return;
|
28414
|
+
}
|
28415
|
+
const messageUIdSet = new Set(messageUIds);
|
28416
|
+
this.messageCache.forEach((messages, dialogId) => {
|
28417
|
+
const filteredMessages = messages.filter(msg => !messageUIdSet.has(msg.messageUId));
|
28418
|
+
if (filteredMessages.length !== messages.length) {
|
28419
|
+
this.messageCache.set(dialogId, filteredMessages);
|
28420
|
+
}
|
28421
|
+
});
|
28422
|
+
}
|
28423
|
+
}
|
28424
|
+
|
28326
28425
|
class IMClient extends EventEmitter {
|
28327
28426
|
options;
|
28328
28427
|
static imClient;
|
@@ -28370,6 +28469,7 @@
|
|
28370
28469
|
this.emit(exports.Events.SUSPEND, this.libLoader.getConnectionStatus());
|
28371
28470
|
},
|
28372
28471
|
batchMessage: messages => {
|
28472
|
+
MessageCache.get().addMessages(messages);
|
28373
28473
|
this.emit(exports.Events.MESSAGES, {
|
28374
28474
|
messages
|
28375
28475
|
});
|
@@ -28389,6 +28489,7 @@
|
|
28389
28489
|
});
|
28390
28490
|
},
|
28391
28491
|
onRecall: messageUids => {
|
28492
|
+
MessageCache.get().removeMessagesByUId(messageUids);
|
28392
28493
|
messageUids.forEach(messageUId => {
|
28393
28494
|
this.emit(exports.Events.RECALL, messageUId);
|
28394
28495
|
});
|
@@ -28431,7 +28532,7 @@
|
|
28431
28532
|
const dialogId = getFullDialogId(conversation);
|
28432
28533
|
return getRemoteMessages({
|
28433
28534
|
dialogId,
|
28434
|
-
offset: options.timestamp ??
|
28535
|
+
offset: options.timestamp ?? '0',
|
28435
28536
|
count: options.count ?? 20,
|
28436
28537
|
newToOld: options.order === 0
|
28437
28538
|
}).then(({
|
@@ -28465,10 +28566,42 @@
|
|
28465
28566
|
});
|
28466
28567
|
});
|
28467
28568
|
}
|
28569
|
+
async getPreviousHistoryMessages(conversation, timestamp, count = 20) {
|
28570
|
+
const cachedMessages = MessageCache.get().getPreviousMessages(conversation, timestamp, count);
|
28571
|
+
if (!timestamp) {
|
28572
|
+
ConversationManager$1.get().refreshLatestMessage(conversation, cachedMessages[cachedMessages.length - 1]);
|
28573
|
+
}
|
28574
|
+
if (cachedMessages.length >= count) {
|
28575
|
+
return {
|
28576
|
+
code: exports.ErrorCode.SUCCESS,
|
28577
|
+
data: {
|
28578
|
+
list: cachedMessages,
|
28579
|
+
hasMore: true
|
28580
|
+
}
|
28581
|
+
};
|
28582
|
+
}
|
28583
|
+
const remotesResult = await this.getRemoteHistoryMessages(conversation, {
|
28584
|
+
timestamp: cachedMessages[0].sentTime ?? timestamp,
|
28585
|
+
count: count - cachedMessages.length,
|
28586
|
+
order: 0
|
28587
|
+
});
|
28588
|
+
if (remotesResult.code !== exports.ErrorCode.SUCCESS) {
|
28589
|
+
return remotesResult;
|
28590
|
+
}
|
28591
|
+
return {
|
28592
|
+
code: exports.ErrorCode.SUCCESS,
|
28593
|
+
data: {
|
28594
|
+
list: [...remotesResult.data.list, ...cachedMessages],
|
28595
|
+
hasMore: remotesResult.data.hasMore
|
28596
|
+
}
|
28597
|
+
};
|
28598
|
+
}
|
28468
28599
|
async deleteRemoteMessage(conversation, list) {
|
28600
|
+
MessageCache.get().removeMessagesByUId(list.map(e => e.messageUId));
|
28469
28601
|
return deleteMessages$1(getFullDialogId(conversation), list.map(e => e.messageUId)).then(result => result.code);
|
28470
28602
|
}
|
28471
28603
|
async deleteRemoteMessageByTimestamp(conversation, timestamp) {
|
28604
|
+
MessageCache.get().clearConversationCache(conversation);
|
28472
28605
|
ConversationManager$1.get().clearHistoryMessages(conversation);
|
28473
28606
|
return clearHistoryMessage(getFullDialogId(conversation), timestamp === 0 ? Number.MAX_VALUE : timestamp).then(result => result.code);
|
28474
28607
|
}
|
@@ -28498,6 +28631,11 @@
|
|
28498
28631
|
conversationType: conversationObj.conversationType,
|
28499
28632
|
targetId: conversationObj.targetId
|
28500
28633
|
};
|
28634
|
+
if (isDef(conversationObj.latestMessage)) {
|
28635
|
+
conversationObj.updateTime = parseInt(conversationObj.latestMessage.sentTime);
|
28636
|
+
} else {
|
28637
|
+
conversationObj.updateTime = (contentList[contentList.length - 1].updateTime ?? 0) + 1;
|
28638
|
+
}
|
28501
28639
|
ConversationManager$1.get().addLocalConversation(conversationObj);
|
28502
28640
|
const localConversation = ConversationManager$1.get().get(conOpt);
|
28503
28641
|
Object.assign(conversationObj, localConversation);
|
@@ -28546,6 +28684,7 @@
|
|
28546
28684
|
const conversation = {
|
28547
28685
|
...conOpt,
|
28548
28686
|
...localConversation,
|
28687
|
+
updateTime: isDef(latestMessage?.sentTime) ? parseInt(latestMessage.sentTime) : undefined,
|
28549
28688
|
latestMessage: latestMessage
|
28550
28689
|
};
|
28551
28690
|
return {
|
@@ -29848,7 +29987,12 @@
|
|
29848
29987
|
assert('conversation', conversation, AssertRules.CONVERSATION, true);
|
29849
29988
|
const paramsStr = 'conversationType:' + conversation.conversationType + ',targetId:' + conversation.targetId;
|
29850
29989
|
logger.debug('get remote history message ->' + paramsStr);
|
29851
|
-
|
29990
|
+
let response;
|
29991
|
+
if (options.order === 0) {
|
29992
|
+
response = await imClient.getPreviousHistoryMessages(conversation, options.timestamp, options.count);
|
29993
|
+
} else {
|
29994
|
+
response = await imClient.getRemoteHistoryMessages(conversation, options);
|
29995
|
+
}
|
29852
29996
|
if (response.code !== exports.ErrorCode.SUCCESS) {
|
29853
29997
|
logger.warn('get remote history message fail ->' + response.code + ':' + ErrorDesc(response.code) + ',' + paramsStr);
|
29854
29998
|
}
|
package/package.json
CHANGED