@onyx-p/imlib-web 1.8.6 → 1.8.8
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 +132 -3
- package/index.umd.js +132 -3
- package/package.json +1 -1
package/index.esm.js
CHANGED
@@ -20610,6 +20610,7 @@ let manager;
|
|
20610
20610
|
var MessageReceiptManager$1 = {
|
20611
20611
|
create(appkey, currentUserId) {
|
20612
20612
|
manager = new MessageReceiptManager(appkey, currentUserId);
|
20613
|
+
manager.cleanExpiredMessages();
|
20613
20614
|
},
|
20614
20615
|
get() {
|
20615
20616
|
return manager;
|
@@ -28328,6 +28329,93 @@ function getMessageSentTime() {
|
|
28328
28329
|
return UniqueSentTime;
|
28329
28330
|
}
|
28330
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
|
+
|
28331
28419
|
class IMClient extends EventEmitter {
|
28332
28420
|
options;
|
28333
28421
|
static imClient;
|
@@ -28375,6 +28463,7 @@ class IMClient extends EventEmitter {
|
|
28375
28463
|
this.emit(Events.SUSPEND, this.libLoader.getConnectionStatus());
|
28376
28464
|
},
|
28377
28465
|
batchMessage: messages => {
|
28466
|
+
MessageCache.get().addMessages(messages);
|
28378
28467
|
this.emit(Events.MESSAGES, {
|
28379
28468
|
messages
|
28380
28469
|
});
|
@@ -28394,6 +28483,7 @@ class IMClient extends EventEmitter {
|
|
28394
28483
|
});
|
28395
28484
|
},
|
28396
28485
|
onRecall: messageUids => {
|
28486
|
+
MessageCache.get().removeMessagesByUId(messageUids);
|
28397
28487
|
messageUids.forEach(messageUId => {
|
28398
28488
|
this.emit(Events.RECALL, messageUId);
|
28399
28489
|
});
|
@@ -28436,7 +28526,7 @@ class IMClient extends EventEmitter {
|
|
28436
28526
|
const dialogId = getFullDialogId(conversation);
|
28437
28527
|
return getRemoteMessages({
|
28438
28528
|
dialogId,
|
28439
|
-
offset: options.timestamp ??
|
28529
|
+
offset: options.timestamp ?? '0',
|
28440
28530
|
count: options.count ?? 20,
|
28441
28531
|
newToOld: options.order === 0
|
28442
28532
|
}).then(({
|
@@ -28470,10 +28560,42 @@ class IMClient extends EventEmitter {
|
|
28470
28560
|
});
|
28471
28561
|
});
|
28472
28562
|
}
|
28563
|
+
async getPreviousHistoryMessages(conversation, timestamp, count = 20) {
|
28564
|
+
const cachedMessages = MessageCache.get().getPreviousMessages(conversation, timestamp ?? "0", count);
|
28565
|
+
if (!timestamp && cachedMessages.length) {
|
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
|
+
}
|
28473
28593
|
async deleteRemoteMessage(conversation, list) {
|
28594
|
+
MessageCache.get().removeMessagesByUId(list.map(e => e.messageUId));
|
28474
28595
|
return deleteMessages$1(getFullDialogId(conversation), list.map(e => e.messageUId)).then(result => result.code);
|
28475
28596
|
}
|
28476
28597
|
async deleteRemoteMessageByTimestamp(conversation, timestamp) {
|
28598
|
+
MessageCache.get().clearConversationCache(conversation);
|
28477
28599
|
ConversationManager$1.get().clearHistoryMessages(conversation);
|
28478
28600
|
return clearHistoryMessage(getFullDialogId(conversation), timestamp === 0 ? Number.MAX_VALUE : timestamp).then(result => result.code);
|
28479
28601
|
}
|
@@ -29851,7 +29973,6 @@ const getHistoryMessages = async (conversation, options) => {
|
|
29851
29973
|
return response;
|
29852
29974
|
};
|
29853
29975
|
const getRemoteHistoryMessages = async (conversation, options) => {
|
29854
|
-
assert('options.timestamp', options.timestamp ?? 0, AssertRules.NUMBER);
|
29855
29976
|
assert('options.count', options.count ?? 0, AssertRules.NUMBER);
|
29856
29977
|
assert('options.order', options.order ?? 0, value => {
|
29857
29978
|
return value === 0 || value === 1;
|
@@ -29859,7 +29980,15 @@ const getRemoteHistoryMessages = async (conversation, options) => {
|
|
29859
29980
|
assert('conversation', conversation, AssertRules.CONVERSATION, true);
|
29860
29981
|
const paramsStr = 'conversationType:' + conversation.conversationType + ',targetId:' + conversation.targetId;
|
29861
29982
|
logger.debug('get remote history message ->' + paramsStr);
|
29862
|
-
|
29983
|
+
if (isDef(options.timestamp)) {
|
29984
|
+
options.timestamp = options.timestamp.toString();
|
29985
|
+
}
|
29986
|
+
let response;
|
29987
|
+
if (!options.order) {
|
29988
|
+
response = await imClient.getPreviousHistoryMessages(conversation, options.timestamp, options.count);
|
29989
|
+
} else {
|
29990
|
+
response = await imClient.getRemoteHistoryMessages(conversation, options);
|
29991
|
+
}
|
29863
29992
|
if (response.code !== ErrorCode.SUCCESS) {
|
29864
29993
|
logger.warn('get remote history message fail ->' + response.code + ':' + ErrorDesc(response.code) + ',' + paramsStr);
|
29865
29994
|
}
|
package/index.umd.js
CHANGED
@@ -20616,6 +20616,7 @@
|
|
20616
20616
|
var MessageReceiptManager$1 = {
|
20617
20617
|
create(appkey, currentUserId) {
|
20618
20618
|
manager = new MessageReceiptManager(appkey, currentUserId);
|
20619
|
+
manager.cleanExpiredMessages();
|
20619
20620
|
},
|
20620
20621
|
get() {
|
20621
20622
|
return manager;
|
@@ -28334,6 +28335,93 @@
|
|
28334
28335
|
return UniqueSentTime;
|
28335
28336
|
}
|
28336
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
|
+
|
28337
28425
|
class IMClient extends EventEmitter {
|
28338
28426
|
options;
|
28339
28427
|
static imClient;
|
@@ -28381,6 +28469,7 @@
|
|
28381
28469
|
this.emit(exports.Events.SUSPEND, this.libLoader.getConnectionStatus());
|
28382
28470
|
},
|
28383
28471
|
batchMessage: messages => {
|
28472
|
+
MessageCache.get().addMessages(messages);
|
28384
28473
|
this.emit(exports.Events.MESSAGES, {
|
28385
28474
|
messages
|
28386
28475
|
});
|
@@ -28400,6 +28489,7 @@
|
|
28400
28489
|
});
|
28401
28490
|
},
|
28402
28491
|
onRecall: messageUids => {
|
28492
|
+
MessageCache.get().removeMessagesByUId(messageUids);
|
28403
28493
|
messageUids.forEach(messageUId => {
|
28404
28494
|
this.emit(exports.Events.RECALL, messageUId);
|
28405
28495
|
});
|
@@ -28442,7 +28532,7 @@
|
|
28442
28532
|
const dialogId = getFullDialogId(conversation);
|
28443
28533
|
return getRemoteMessages({
|
28444
28534
|
dialogId,
|
28445
|
-
offset: options.timestamp ??
|
28535
|
+
offset: options.timestamp ?? '0',
|
28446
28536
|
count: options.count ?? 20,
|
28447
28537
|
newToOld: options.order === 0
|
28448
28538
|
}).then(({
|
@@ -28476,10 +28566,42 @@
|
|
28476
28566
|
});
|
28477
28567
|
});
|
28478
28568
|
}
|
28569
|
+
async getPreviousHistoryMessages(conversation, timestamp, count = 20) {
|
28570
|
+
const cachedMessages = MessageCache.get().getPreviousMessages(conversation, timestamp ?? "0", count);
|
28571
|
+
if (!timestamp && cachedMessages.length) {
|
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
|
+
}
|
28479
28599
|
async deleteRemoteMessage(conversation, list) {
|
28600
|
+
MessageCache.get().removeMessagesByUId(list.map(e => e.messageUId));
|
28480
28601
|
return deleteMessages$1(getFullDialogId(conversation), list.map(e => e.messageUId)).then(result => result.code);
|
28481
28602
|
}
|
28482
28603
|
async deleteRemoteMessageByTimestamp(conversation, timestamp) {
|
28604
|
+
MessageCache.get().clearConversationCache(conversation);
|
28483
28605
|
ConversationManager$1.get().clearHistoryMessages(conversation);
|
28484
28606
|
return clearHistoryMessage(getFullDialogId(conversation), timestamp === 0 ? Number.MAX_VALUE : timestamp).then(result => result.code);
|
28485
28607
|
}
|
@@ -29857,7 +29979,6 @@
|
|
29857
29979
|
return response;
|
29858
29980
|
};
|
29859
29981
|
const getRemoteHistoryMessages = async (conversation, options) => {
|
29860
|
-
assert('options.timestamp', options.timestamp ?? 0, AssertRules.NUMBER);
|
29861
29982
|
assert('options.count', options.count ?? 0, AssertRules.NUMBER);
|
29862
29983
|
assert('options.order', options.order ?? 0, value => {
|
29863
29984
|
return value === 0 || value === 1;
|
@@ -29865,7 +29986,15 @@
|
|
29865
29986
|
assert('conversation', conversation, AssertRules.CONVERSATION, true);
|
29866
29987
|
const paramsStr = 'conversationType:' + conversation.conversationType + ',targetId:' + conversation.targetId;
|
29867
29988
|
logger.debug('get remote history message ->' + paramsStr);
|
29868
|
-
|
29989
|
+
if (isDef(options.timestamp)) {
|
29990
|
+
options.timestamp = options.timestamp.toString();
|
29991
|
+
}
|
29992
|
+
let response;
|
29993
|
+
if (!options.order) {
|
29994
|
+
response = await imClient.getPreviousHistoryMessages(conversation, options.timestamp, options.count);
|
29995
|
+
} else {
|
29996
|
+
response = await imClient.getRemoteHistoryMessages(conversation, options);
|
29997
|
+
}
|
29869
29998
|
if (response.code !== exports.ErrorCode.SUCCESS) {
|
29870
29999
|
logger.warn('get remote history message fail ->' + response.code + ':' + ErrorDesc(response.code) + ',' + paramsStr);
|
29871
30000
|
}
|