@onyx-p/imlib-web 1.9.9 → 2.0.1
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 +62 -44
- package/index.umd.js +62 -44
- package/package.json +1 -1
package/index.esm.js
CHANGED
@@ -28376,7 +28376,8 @@ function getMessageSentTime() {
|
|
28376
28376
|
class MessageCache {
|
28377
28377
|
static instance;
|
28378
28378
|
messageCache = new Map();
|
28379
|
-
|
28379
|
+
loadedEndMap = new Map();
|
28380
|
+
maxCacheCount = 1000;
|
28380
28381
|
constructor() {}
|
28381
28382
|
static get() {
|
28382
28383
|
if (!MessageCache.instance) {
|
@@ -28389,41 +28390,41 @@ class MessageCache {
|
|
28389
28390
|
this.maxCacheCount = count;
|
28390
28391
|
}
|
28391
28392
|
}
|
28392
|
-
addMessages(messages) {
|
28393
|
+
addMessages(messages, toConversation, isEnd = undefined) {
|
28393
28394
|
if (!messages || messages.length === 0) {
|
28394
28395
|
return;
|
28395
28396
|
}
|
28396
|
-
const
|
28397
|
-
|
28398
|
-
|
28399
|
-
|
28400
|
-
|
28401
|
-
|
28402
|
-
|
28403
|
-
|
28404
|
-
|
28405
|
-
|
28406
|
-
|
28407
|
-
|
28408
|
-
|
28409
|
-
|
28410
|
-
|
28411
|
-
const cachedMessages = this.messageCache.get(dialogId) || [];
|
28412
|
-
const allMessages = [...cachedMessages, ...dialogMessages];
|
28413
|
-
if (allMessages.length > this.maxCacheCount) {
|
28414
|
-
allMessages.splice(0, allMessages.length - this.maxCacheCount);
|
28415
|
-
}
|
28416
|
-
this.messageCache.set(dialogId, allMessages);
|
28417
|
-
});
|
28397
|
+
const dialogId = getFullDialogId(toConversation);
|
28398
|
+
if (isEnd !== undefined) {
|
28399
|
+
this.loadedEndMap.set(dialogId, isEnd);
|
28400
|
+
}
|
28401
|
+
if (!this.messageCache.has(dialogId)) {
|
28402
|
+
this.messageCache.set(dialogId, []);
|
28403
|
+
}
|
28404
|
+
const cachedMessages = this.messageCache.get(dialogId) || [];
|
28405
|
+
const existingMessageIds = new Set(cachedMessages.map(msg => msg.messageUId));
|
28406
|
+
const newMessages = messages.filter(msg => !existingMessageIds.has(msg.messageUId));
|
28407
|
+
const allMessages = [...cachedMessages, ...newMessages].sort((a, b) => Long.fromString(a.sentTime).compare(Long.fromString(b.sentTime)));
|
28408
|
+
if (allMessages.length > this.maxCacheCount) {
|
28409
|
+
allMessages.splice(0, allMessages.length - this.maxCacheCount);
|
28410
|
+
}
|
28411
|
+
this.messageCache.set(dialogId, allMessages);
|
28418
28412
|
}
|
28419
28413
|
getPreviousMessages(conversation, timestamp = "0", count = 20) {
|
28420
28414
|
const dialogId = getFullDialogId(conversation);
|
28421
28415
|
const cachedMessages = this.messageCache.get(dialogId) || [];
|
28422
28416
|
if (cachedMessages.length === 0) {
|
28423
|
-
return
|
28417
|
+
return {
|
28418
|
+
messages: [],
|
28419
|
+
hasMore: !this.loadedEndMap.get(dialogId)
|
28420
|
+
};
|
28424
28421
|
}
|
28425
28422
|
if (timestamp === "0") {
|
28426
|
-
|
28423
|
+
const messages = cachedMessages.slice(-count);
|
28424
|
+
return {
|
28425
|
+
messages,
|
28426
|
+
hasMore: cachedMessages.length > count || !this.loadedEndMap.get(dialogId)
|
28427
|
+
};
|
28427
28428
|
}
|
28428
28429
|
const timestampLong = Long.fromString(timestamp);
|
28429
28430
|
let endIndex = cachedMessages.length - 1;
|
@@ -28434,17 +28435,25 @@ class MessageCache {
|
|
28434
28435
|
endIndex--;
|
28435
28436
|
}
|
28436
28437
|
if (endIndex < 0) {
|
28437
|
-
return
|
28438
|
+
return {
|
28439
|
+
messages: [],
|
28440
|
+
hasMore: !this.loadedEndMap.get(dialogId)
|
28441
|
+
};
|
28438
28442
|
}
|
28439
28443
|
const startIndex = Math.max(0, endIndex - count + 1);
|
28440
|
-
return
|
28444
|
+
return {
|
28445
|
+
messages: cachedMessages.slice(startIndex, endIndex + 1),
|
28446
|
+
hasMore: startIndex > 0 || !this.loadedEndMap.get(dialogId)
|
28447
|
+
};
|
28441
28448
|
}
|
28442
28449
|
clearConversationCache(conversation) {
|
28443
28450
|
const dialogId = getFullDialogId(conversation);
|
28444
28451
|
this.messageCache.delete(dialogId);
|
28452
|
+
this.loadedEndMap.set(dialogId, true);
|
28445
28453
|
}
|
28446
28454
|
clearAllCache() {
|
28447
28455
|
this.messageCache.clear();
|
28456
|
+
this.loadedEndMap.clear();
|
28448
28457
|
}
|
28449
28458
|
removeMessagesByUId(messageUIds) {
|
28450
28459
|
if (!messageUIds || messageUIds.length === 0) {
|
@@ -28579,7 +28588,12 @@ class IMClient extends EventEmitter {
|
|
28579
28588
|
this.emit(Events.SUSPEND, this.libLoader.getConnectionStatus());
|
28580
28589
|
},
|
28581
28590
|
batchMessage: messages => {
|
28582
|
-
|
28591
|
+
if (messages.length) {
|
28592
|
+
MessageCache.get().addMessages(messages, {
|
28593
|
+
conversationType: messages[0].content,
|
28594
|
+
targetId: messages[0].targetId
|
28595
|
+
});
|
28596
|
+
}
|
28583
28597
|
const filteredMessages = messages.filter(m => {
|
28584
28598
|
if (m.messageDirection === MessageDirection.SEND && m.messageId && SentMessageStore.has(m.messageId)) {
|
28585
28599
|
SentMessageStore.remove(m.messageId);
|
@@ -28653,11 +28667,13 @@ class IMClient extends EventEmitter {
|
|
28653
28667
|
return result;
|
28654
28668
|
}
|
28655
28669
|
async getRemoteHistoryMessages(conversation, options) {
|
28670
|
+
const timestamp = options.timestamp ?? '0';
|
28671
|
+
const count = options.count ?? 20;
|
28656
28672
|
const dialogId = getFullDialogId(conversation);
|
28657
28673
|
return getRemoteMessages({
|
28658
28674
|
dialogId,
|
28659
|
-
offset:
|
28660
|
-
count
|
28675
|
+
offset: timestamp,
|
28676
|
+
count,
|
28661
28677
|
newToOld: options.order === 0
|
28662
28678
|
}).then(({
|
28663
28679
|
code,
|
@@ -28676,9 +28692,6 @@ class IMClient extends EventEmitter {
|
|
28676
28692
|
}, (_, outputMsgs) => {
|
28677
28693
|
const messageList = outputMsgs.get(dialogId) ?? [];
|
28678
28694
|
messageList.sort((e1, e2) => Long.fromString(e1.sentTime).lessThan(Long.fromString(e2.sentTime)) ? -1 : 1);
|
28679
|
-
if (options.order === 0 && !options.timestamp) {
|
28680
|
-
ConversationManager$1.get().refreshLatestMessage(conversation, messageList[messageList.length - 1]);
|
28681
|
-
}
|
28682
28695
|
resolve({
|
28683
28696
|
code: ErrorCode.SUCCESS,
|
28684
28697
|
data: {
|
@@ -28691,31 +28704,36 @@ class IMClient extends EventEmitter {
|
|
28691
28704
|
});
|
28692
28705
|
}
|
28693
28706
|
async getPreviousHistoryMessages(conversation, timestamp, count = 20) {
|
28694
|
-
const
|
28695
|
-
if (!timestamp &&
|
28696
|
-
ConversationManager$1.get().refreshLatestMessage(conversation,
|
28707
|
+
const cachedResult = MessageCache.get().getPreviousMessages(conversation, timestamp ?? '0', count);
|
28708
|
+
if (!timestamp && cachedResult.messages.length) {
|
28709
|
+
ConversationManager$1.get().refreshLatestMessage(conversation, cachedResult.messages[cachedResult.messages.length - 1]);
|
28697
28710
|
}
|
28698
|
-
if (
|
28711
|
+
if (cachedResult.messages.length >= count || !cachedResult.hasMore) {
|
28699
28712
|
return {
|
28700
28713
|
code: ErrorCode.SUCCESS,
|
28701
28714
|
data: {
|
28702
|
-
list:
|
28703
|
-
hasMore:
|
28715
|
+
list: cachedResult.messages,
|
28716
|
+
hasMore: cachedResult.hasMore
|
28704
28717
|
}
|
28705
28718
|
};
|
28706
28719
|
}
|
28707
28720
|
const remotesResult = await this.getRemoteHistoryMessages(conversation, {
|
28708
|
-
timestamp:
|
28709
|
-
count: count -
|
28721
|
+
timestamp: cachedResult.messages[0]?.sentTime ?? timestamp,
|
28722
|
+
count: count - cachedResult.messages.length,
|
28710
28723
|
order: 0
|
28711
28724
|
});
|
28712
28725
|
if (remotesResult.code !== ErrorCode.SUCCESS) {
|
28713
28726
|
return remotesResult;
|
28714
28727
|
}
|
28728
|
+
const remotesMessages = remotesResult.data.list;
|
28729
|
+
if (!timestamp && remotesMessages.length) {
|
28730
|
+
ConversationManager$1.get().refreshLatestMessage(conversation, remotesMessages[remotesMessages.length - 1]);
|
28731
|
+
}
|
28732
|
+
MessageCache.get().addMessages(remotesMessages, conversation, !remotesResult.data.hasMore);
|
28715
28733
|
return {
|
28716
28734
|
code: ErrorCode.SUCCESS,
|
28717
28735
|
data: {
|
28718
|
-
list: [...remotesResult.data.list, ...
|
28736
|
+
list: [...remotesResult.data.list, ...cachedResult.messages],
|
28719
28737
|
hasMore: remotesResult.data.hasMore
|
28720
28738
|
}
|
28721
28739
|
};
|
@@ -28758,7 +28776,7 @@ class IMClient extends EventEmitter {
|
|
28758
28776
|
if (isDef(conversationObj.latestMessage)) {
|
28759
28777
|
conversationObj.updateTime = parseInt(conversationObj.latestMessage.sentTime);
|
28760
28778
|
} else {
|
28761
|
-
conversationObj.updateTime = (contentList[contentList.length - 1]
|
28779
|
+
conversationObj.updateTime = (contentList[contentList.length - 1]?.updateTime ?? 0) + 1;
|
28762
28780
|
}
|
28763
28781
|
ConversationManager$1.get().addLocalConversation(conversationObj);
|
28764
28782
|
const localConversation = ConversationManager$1.get().get(conOpt);
|
package/index.umd.js
CHANGED
@@ -28382,7 +28382,8 @@
|
|
28382
28382
|
class MessageCache {
|
28383
28383
|
static instance;
|
28384
28384
|
messageCache = new Map();
|
28385
|
-
|
28385
|
+
loadedEndMap = new Map();
|
28386
|
+
maxCacheCount = 1000;
|
28386
28387
|
constructor() {}
|
28387
28388
|
static get() {
|
28388
28389
|
if (!MessageCache.instance) {
|
@@ -28395,41 +28396,41 @@
|
|
28395
28396
|
this.maxCacheCount = count;
|
28396
28397
|
}
|
28397
28398
|
}
|
28398
|
-
addMessages(messages) {
|
28399
|
+
addMessages(messages, toConversation, isEnd = undefined) {
|
28399
28400
|
if (!messages || messages.length === 0) {
|
28400
28401
|
return;
|
28401
28402
|
}
|
28402
|
-
const
|
28403
|
-
|
28404
|
-
|
28405
|
-
|
28406
|
-
|
28407
|
-
|
28408
|
-
|
28409
|
-
|
28410
|
-
|
28411
|
-
|
28412
|
-
|
28413
|
-
|
28414
|
-
|
28415
|
-
|
28416
|
-
|
28417
|
-
const cachedMessages = this.messageCache.get(dialogId) || [];
|
28418
|
-
const allMessages = [...cachedMessages, ...dialogMessages];
|
28419
|
-
if (allMessages.length > this.maxCacheCount) {
|
28420
|
-
allMessages.splice(0, allMessages.length - this.maxCacheCount);
|
28421
|
-
}
|
28422
|
-
this.messageCache.set(dialogId, allMessages);
|
28423
|
-
});
|
28403
|
+
const dialogId = getFullDialogId(toConversation);
|
28404
|
+
if (isEnd !== undefined) {
|
28405
|
+
this.loadedEndMap.set(dialogId, isEnd);
|
28406
|
+
}
|
28407
|
+
if (!this.messageCache.has(dialogId)) {
|
28408
|
+
this.messageCache.set(dialogId, []);
|
28409
|
+
}
|
28410
|
+
const cachedMessages = this.messageCache.get(dialogId) || [];
|
28411
|
+
const existingMessageIds = new Set(cachedMessages.map(msg => msg.messageUId));
|
28412
|
+
const newMessages = messages.filter(msg => !existingMessageIds.has(msg.messageUId));
|
28413
|
+
const allMessages = [...cachedMessages, ...newMessages].sort((a, b) => Long.fromString(a.sentTime).compare(Long.fromString(b.sentTime)));
|
28414
|
+
if (allMessages.length > this.maxCacheCount) {
|
28415
|
+
allMessages.splice(0, allMessages.length - this.maxCacheCount);
|
28416
|
+
}
|
28417
|
+
this.messageCache.set(dialogId, allMessages);
|
28424
28418
|
}
|
28425
28419
|
getPreviousMessages(conversation, timestamp = "0", count = 20) {
|
28426
28420
|
const dialogId = getFullDialogId(conversation);
|
28427
28421
|
const cachedMessages = this.messageCache.get(dialogId) || [];
|
28428
28422
|
if (cachedMessages.length === 0) {
|
28429
|
-
return
|
28423
|
+
return {
|
28424
|
+
messages: [],
|
28425
|
+
hasMore: !this.loadedEndMap.get(dialogId)
|
28426
|
+
};
|
28430
28427
|
}
|
28431
28428
|
if (timestamp === "0") {
|
28432
|
-
|
28429
|
+
const messages = cachedMessages.slice(-count);
|
28430
|
+
return {
|
28431
|
+
messages,
|
28432
|
+
hasMore: cachedMessages.length > count || !this.loadedEndMap.get(dialogId)
|
28433
|
+
};
|
28433
28434
|
}
|
28434
28435
|
const timestampLong = Long.fromString(timestamp);
|
28435
28436
|
let endIndex = cachedMessages.length - 1;
|
@@ -28440,17 +28441,25 @@
|
|
28440
28441
|
endIndex--;
|
28441
28442
|
}
|
28442
28443
|
if (endIndex < 0) {
|
28443
|
-
return
|
28444
|
+
return {
|
28445
|
+
messages: [],
|
28446
|
+
hasMore: !this.loadedEndMap.get(dialogId)
|
28447
|
+
};
|
28444
28448
|
}
|
28445
28449
|
const startIndex = Math.max(0, endIndex - count + 1);
|
28446
|
-
return
|
28450
|
+
return {
|
28451
|
+
messages: cachedMessages.slice(startIndex, endIndex + 1),
|
28452
|
+
hasMore: startIndex > 0 || !this.loadedEndMap.get(dialogId)
|
28453
|
+
};
|
28447
28454
|
}
|
28448
28455
|
clearConversationCache(conversation) {
|
28449
28456
|
const dialogId = getFullDialogId(conversation);
|
28450
28457
|
this.messageCache.delete(dialogId);
|
28458
|
+
this.loadedEndMap.set(dialogId, true);
|
28451
28459
|
}
|
28452
28460
|
clearAllCache() {
|
28453
28461
|
this.messageCache.clear();
|
28462
|
+
this.loadedEndMap.clear();
|
28454
28463
|
}
|
28455
28464
|
removeMessagesByUId(messageUIds) {
|
28456
28465
|
if (!messageUIds || messageUIds.length === 0) {
|
@@ -28585,7 +28594,12 @@
|
|
28585
28594
|
this.emit(exports.Events.SUSPEND, this.libLoader.getConnectionStatus());
|
28586
28595
|
},
|
28587
28596
|
batchMessage: messages => {
|
28588
|
-
|
28597
|
+
if (messages.length) {
|
28598
|
+
MessageCache.get().addMessages(messages, {
|
28599
|
+
conversationType: messages[0].content,
|
28600
|
+
targetId: messages[0].targetId
|
28601
|
+
});
|
28602
|
+
}
|
28589
28603
|
const filteredMessages = messages.filter(m => {
|
28590
28604
|
if (m.messageDirection === exports.MessageDirection.SEND && m.messageId && SentMessageStore.has(m.messageId)) {
|
28591
28605
|
SentMessageStore.remove(m.messageId);
|
@@ -28659,11 +28673,13 @@
|
|
28659
28673
|
return result;
|
28660
28674
|
}
|
28661
28675
|
async getRemoteHistoryMessages(conversation, options) {
|
28676
|
+
const timestamp = options.timestamp ?? '0';
|
28677
|
+
const count = options.count ?? 20;
|
28662
28678
|
const dialogId = getFullDialogId(conversation);
|
28663
28679
|
return getRemoteMessages({
|
28664
28680
|
dialogId,
|
28665
|
-
offset:
|
28666
|
-
count
|
28681
|
+
offset: timestamp,
|
28682
|
+
count,
|
28667
28683
|
newToOld: options.order === 0
|
28668
28684
|
}).then(({
|
28669
28685
|
code,
|
@@ -28682,9 +28698,6 @@
|
|
28682
28698
|
}, (_, outputMsgs) => {
|
28683
28699
|
const messageList = outputMsgs.get(dialogId) ?? [];
|
28684
28700
|
messageList.sort((e1, e2) => Long.fromString(e1.sentTime).lessThan(Long.fromString(e2.sentTime)) ? -1 : 1);
|
28685
|
-
if (options.order === 0 && !options.timestamp) {
|
28686
|
-
ConversationManager$1.get().refreshLatestMessage(conversation, messageList[messageList.length - 1]);
|
28687
|
-
}
|
28688
28701
|
resolve({
|
28689
28702
|
code: exports.ErrorCode.SUCCESS,
|
28690
28703
|
data: {
|
@@ -28697,31 +28710,36 @@
|
|
28697
28710
|
});
|
28698
28711
|
}
|
28699
28712
|
async getPreviousHistoryMessages(conversation, timestamp, count = 20) {
|
28700
|
-
const
|
28701
|
-
if (!timestamp &&
|
28702
|
-
ConversationManager$1.get().refreshLatestMessage(conversation,
|
28713
|
+
const cachedResult = MessageCache.get().getPreviousMessages(conversation, timestamp ?? '0', count);
|
28714
|
+
if (!timestamp && cachedResult.messages.length) {
|
28715
|
+
ConversationManager$1.get().refreshLatestMessage(conversation, cachedResult.messages[cachedResult.messages.length - 1]);
|
28703
28716
|
}
|
28704
|
-
if (
|
28717
|
+
if (cachedResult.messages.length >= count || !cachedResult.hasMore) {
|
28705
28718
|
return {
|
28706
28719
|
code: exports.ErrorCode.SUCCESS,
|
28707
28720
|
data: {
|
28708
|
-
list:
|
28709
|
-
hasMore:
|
28721
|
+
list: cachedResult.messages,
|
28722
|
+
hasMore: cachedResult.hasMore
|
28710
28723
|
}
|
28711
28724
|
};
|
28712
28725
|
}
|
28713
28726
|
const remotesResult = await this.getRemoteHistoryMessages(conversation, {
|
28714
|
-
timestamp:
|
28715
|
-
count: count -
|
28727
|
+
timestamp: cachedResult.messages[0]?.sentTime ?? timestamp,
|
28728
|
+
count: count - cachedResult.messages.length,
|
28716
28729
|
order: 0
|
28717
28730
|
});
|
28718
28731
|
if (remotesResult.code !== exports.ErrorCode.SUCCESS) {
|
28719
28732
|
return remotesResult;
|
28720
28733
|
}
|
28734
|
+
const remotesMessages = remotesResult.data.list;
|
28735
|
+
if (!timestamp && remotesMessages.length) {
|
28736
|
+
ConversationManager$1.get().refreshLatestMessage(conversation, remotesMessages[remotesMessages.length - 1]);
|
28737
|
+
}
|
28738
|
+
MessageCache.get().addMessages(remotesMessages, conversation, !remotesResult.data.hasMore);
|
28721
28739
|
return {
|
28722
28740
|
code: exports.ErrorCode.SUCCESS,
|
28723
28741
|
data: {
|
28724
|
-
list: [...remotesResult.data.list, ...
|
28742
|
+
list: [...remotesResult.data.list, ...cachedResult.messages],
|
28725
28743
|
hasMore: remotesResult.data.hasMore
|
28726
28744
|
}
|
28727
28745
|
};
|
@@ -28764,7 +28782,7 @@
|
|
28764
28782
|
if (isDef(conversationObj.latestMessage)) {
|
28765
28783
|
conversationObj.updateTime = parseInt(conversationObj.latestMessage.sentTime);
|
28766
28784
|
} else {
|
28767
|
-
conversationObj.updateTime = (contentList[contentList.length - 1]
|
28785
|
+
conversationObj.updateTime = (contentList[contentList.length - 1]?.updateTime ?? 0) + 1;
|
28768
28786
|
}
|
28769
28787
|
ConversationManager$1.get().addLocalConversation(conversationObj);
|
28770
28788
|
const localConversation = ConversationManager$1.get().get(conOpt);
|