@onyx-p/imlib-web 2.1.0 → 2.1.2
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 +181 -79
- package/index.umd.js +181 -79
- package/package.json +1 -1
- package/types/index.d.ts +1 -1
- package/types/model/iReceivedConversation.d.ts +1 -1
- package/types/types.d.ts +2 -1
package/index.esm.js
CHANGED
@@ -9516,7 +9516,7 @@ var CmdIds;
|
|
9516
9516
|
CmdIds[CmdIds["GetRemoteMessages"] = 1610682419] = "GetRemoteMessages";
|
9517
9517
|
CmdIds[CmdIds["GetSuperGroupRemoteMessages"] = 1610776956] = "GetSuperGroupRemoteMessages";
|
9518
9518
|
CmdIds[CmdIds["DeleteChatMessages"] = 1610682381] = "DeleteChatMessages";
|
9519
|
-
CmdIds[CmdIds["ClearChatHistoryMessage"] =
|
9519
|
+
CmdIds[CmdIds["ClearChatHistoryMessage"] = 1610682421] = "ClearChatHistoryMessage";
|
9520
9520
|
CmdIds[CmdIds["GetDialogList"] = 1610711096] = "GetDialogList";
|
9521
9521
|
CmdIds[CmdIds["GetBriefDialogList"] = 1610682399] = "GetBriefDialogList";
|
9522
9522
|
CmdIds[CmdIds["UpdatePrivateChatMuteConfig"] = 1610682379] = "UpdatePrivateChatMuteConfig";
|
@@ -15446,9 +15446,10 @@ const CleanHistoryMessageReq = $root$2.CleanHistoryMessageReq = (() => {
|
|
15446
15446
|
* Properties of a CleanHistoryMessageReq.
|
15447
15447
|
* @exports ICleanHistoryMessageReq
|
15448
15448
|
* @interface ICleanHistoryMessageReq
|
15449
|
-
* @property {
|
15450
|
-
* @property {
|
15451
|
-
* @property {Long
|
15449
|
+
* @property {string|null} [destId] CleanHistoryMessageReq destId
|
15450
|
+
* @property {Long|null} [msgId] CleanHistoryMessageReq msgId
|
15451
|
+
* @property {Array.<Long>|null} [msgIdList] CleanHistoryMessageReq msgIdList
|
15452
|
+
* @property {Array.<string>|null} [destIdList] CleanHistoryMessageReq destIdList
|
15452
15453
|
*/
|
15453
15454
|
|
15454
15455
|
/**
|
@@ -15460,32 +15461,42 @@ const CleanHistoryMessageReq = $root$2.CleanHistoryMessageReq = (() => {
|
|
15460
15461
|
* @param {ICleanHistoryMessageReq=} [properties] Properties to set
|
15461
15462
|
*/
|
15462
15463
|
function CleanHistoryMessageReq(properties) {
|
15464
|
+
this.msgIdList = [];
|
15465
|
+
this.destIdList = [];
|
15463
15466
|
if (properties) for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
|
15464
15467
|
}
|
15465
15468
|
|
15466
15469
|
/**
|
15467
15470
|
* CleanHistoryMessageReq destId.
|
15468
|
-
* @member {
|
15471
|
+
* @member {string} destId
|
15469
15472
|
* @memberof CleanHistoryMessageReq
|
15470
15473
|
* @instance
|
15471
15474
|
*/
|
15472
|
-
CleanHistoryMessageReq.prototype.destId =
|
15475
|
+
CleanHistoryMessageReq.prototype.destId = "";
|
15473
15476
|
|
15474
15477
|
/**
|
15475
|
-
* CleanHistoryMessageReq
|
15476
|
-
* @member {
|
15478
|
+
* CleanHistoryMessageReq msgId.
|
15479
|
+
* @member {Long} msgId
|
15480
|
+
* @memberof CleanHistoryMessageReq
|
15481
|
+
* @instance
|
15482
|
+
*/
|
15483
|
+
CleanHistoryMessageReq.prototype.msgId = $util$2.Long ? $util$2.Long.fromBits(0, 0, false) : 0;
|
15484
|
+
|
15485
|
+
/**
|
15486
|
+
* CleanHistoryMessageReq msgIdList.
|
15487
|
+
* @member {Array.<Long>} msgIdList
|
15477
15488
|
* @memberof CleanHistoryMessageReq
|
15478
15489
|
* @instance
|
15479
15490
|
*/
|
15480
|
-
CleanHistoryMessageReq.prototype.
|
15491
|
+
CleanHistoryMessageReq.prototype.msgIdList = $util$2.emptyArray;
|
15481
15492
|
|
15482
15493
|
/**
|
15483
|
-
* CleanHistoryMessageReq
|
15484
|
-
* @member {
|
15494
|
+
* CleanHistoryMessageReq destIdList.
|
15495
|
+
* @member {Array.<string>} destIdList
|
15485
15496
|
* @memberof CleanHistoryMessageReq
|
15486
15497
|
* @instance
|
15487
15498
|
*/
|
15488
|
-
CleanHistoryMessageReq.prototype.
|
15499
|
+
CleanHistoryMessageReq.prototype.destIdList = $util$2.emptyArray;
|
15489
15500
|
|
15490
15501
|
/**
|
15491
15502
|
* Encodes the specified CleanHistoryMessageReq message. Does not implicitly {@link CleanHistoryMessageReq.verify|verify} messages.
|
@@ -15498,9 +15509,14 @@ const CleanHistoryMessageReq = $root$2.CleanHistoryMessageReq = (() => {
|
|
15498
15509
|
*/
|
15499
15510
|
CleanHistoryMessageReq.encode = function encode(message, writer) {
|
15500
15511
|
if (!writer) writer = $Writer$2.create();
|
15501
|
-
if (message.destId != null && Object.hasOwnProperty.call(message, "destId")) writer.uint32(/* id 1, wireType
|
15502
|
-
if (message.
|
15503
|
-
if (message.
|
15512
|
+
if (message.destId != null && Object.hasOwnProperty.call(message, "destId")) writer.uint32(/* id 1, wireType 2 =*/10).string(message.destId);
|
15513
|
+
if (message.msgId != null && Object.hasOwnProperty.call(message, "msgId")) writer.uint32(/* id 2, wireType 0 =*/16).int64(message.msgId);
|
15514
|
+
if (message.msgIdList != null && message.msgIdList.length) {
|
15515
|
+
writer.uint32(/* id 3, wireType 2 =*/26).fork();
|
15516
|
+
for (let i = 0; i < message.msgIdList.length; ++i) writer.int64(message.msgIdList[i]);
|
15517
|
+
writer.ldelim();
|
15518
|
+
}
|
15519
|
+
if (message.destIdList != null && message.destIdList.length) for (let i = 0; i < message.destIdList.length; ++i) writer.uint32(/* id 4, wireType 2 =*/34).string(message.destIdList[i]);
|
15504
15520
|
return writer;
|
15505
15521
|
};
|
15506
15522
|
|
@@ -15524,17 +15540,27 @@ const CleanHistoryMessageReq = $root$2.CleanHistoryMessageReq = (() => {
|
|
15524
15540
|
switch (tag >>> 3) {
|
15525
15541
|
case 1:
|
15526
15542
|
{
|
15527
|
-
message.destId = reader.
|
15543
|
+
message.destId = reader.string();
|
15528
15544
|
break;
|
15529
15545
|
}
|
15530
15546
|
case 2:
|
15531
15547
|
{
|
15532
|
-
message.
|
15548
|
+
message.msgId = reader.int64();
|
15533
15549
|
break;
|
15534
15550
|
}
|
15535
15551
|
case 3:
|
15536
15552
|
{
|
15537
|
-
message.
|
15553
|
+
if (!(message.msgIdList && message.msgIdList.length)) message.msgIdList = [];
|
15554
|
+
if ((tag & 7) === 2) {
|
15555
|
+
let end2 = reader.uint32() + reader.pos;
|
15556
|
+
while (reader.pos < end2) message.msgIdList.push(reader.int64());
|
15557
|
+
} else message.msgIdList.push(reader.int64());
|
15558
|
+
break;
|
15559
|
+
}
|
15560
|
+
case 4:
|
15561
|
+
{
|
15562
|
+
if (!(message.destIdList && message.destIdList.length)) message.destIdList = [];
|
15563
|
+
message.destIdList.push(reader.string());
|
15538
15564
|
break;
|
15539
15565
|
}
|
15540
15566
|
default:
|
@@ -19247,11 +19273,9 @@ const deleteMessages$1 = (dialogId, messageUIds) => {
|
|
19247
19273
|
});
|
19248
19274
|
return reqPromise;
|
19249
19275
|
};
|
19250
|
-
const clearHistoryMessage =
|
19276
|
+
const clearHistoryMessage = dialogId => {
|
19251
19277
|
return webSocketServer.send(CmdIds$1.ClearChatHistoryMessage, {
|
19252
|
-
destId:
|
19253
|
-
type: extractConversationType(dialogId) == ConversationType.GROUP ? 1 : 0,
|
19254
|
-
msgTime: Long.fromNumber(timestamp)
|
19278
|
+
destId: dialogId
|
19255
19279
|
}, {
|
19256
19280
|
encoder: CleanHistoryMessageReq,
|
19257
19281
|
decoder: BaseResp
|
@@ -19641,6 +19665,10 @@ const ConversationKey2StorageKey = {
|
|
19641
19665
|
burnAfterReadingTime: {
|
19642
19666
|
keyName: 'brt',
|
19643
19667
|
defaultVal: 0
|
19668
|
+
},
|
19669
|
+
updateTime: {
|
19670
|
+
keyName: 'ut',
|
19671
|
+
defaultVal: 0
|
19644
19672
|
}
|
19645
19673
|
};
|
19646
19674
|
class ConversationStore {
|
@@ -19747,6 +19775,12 @@ class ConversationStore {
|
|
19747
19775
|
this.localStore.remove(key);
|
19748
19776
|
}
|
19749
19777
|
}
|
19778
|
+
updateUpdateTime(conOpt, updateTime) {
|
19779
|
+
const key = this.getStoreKey(conOpt);
|
19780
|
+
const local = this.localStore.get(key) || {};
|
19781
|
+
local[ConversationKey2StorageKey.updateTime.keyName] = updateTime;
|
19782
|
+
this.localStore.set(key, local);
|
19783
|
+
}
|
19750
19784
|
set(conOpt, conversation) {
|
19751
19785
|
const key = this.getStoreKey(conOpt);
|
19752
19786
|
const local = this.localStore.get(key) || {};
|
@@ -19968,7 +20002,8 @@ class ConversationManager {
|
|
19968
20002
|
dialogTitle,
|
19969
20003
|
smallAvatarUrl,
|
19970
20004
|
burnAfterReadingFlag,
|
19971
|
-
burnAfterReadingTime
|
20005
|
+
burnAfterReadingTime,
|
20006
|
+
updateTime
|
19972
20007
|
} = conversation;
|
19973
20008
|
this.localConversationSet.add(this.getConversationKey(conversation));
|
19974
20009
|
this.addStatus({
|
@@ -19980,7 +20015,8 @@ class ConversationManager {
|
|
19980
20015
|
dialogTitle,
|
19981
20016
|
smallAvatarUrl,
|
19982
20017
|
burnAfterReadingFlag,
|
19983
|
-
burnAfterReadingTime
|
20018
|
+
burnAfterReadingTime,
|
20019
|
+
updateTime
|
19984
20020
|
}, false);
|
19985
20021
|
}
|
19986
20022
|
addStatus(statusItem, shouldNotify = false) {
|
@@ -19993,13 +20029,14 @@ class ConversationManager {
|
|
19993
20029
|
dialogTitle,
|
19994
20030
|
smallAvatarUrl,
|
19995
20031
|
burnAfterReadingFlag,
|
19996
|
-
burnAfterReadingTime
|
20032
|
+
burnAfterReadingTime,
|
20033
|
+
updateTime
|
19997
20034
|
} = statusItem;
|
19998
20035
|
const conOpt = {
|
19999
20036
|
conversationType,
|
20000
20037
|
targetId
|
20001
20038
|
};
|
20002
|
-
const updatedTime = getServerTime$1()
|
20039
|
+
const updatedTime = getServerTime$1();
|
20003
20040
|
const storageConversation = this.store.get(conOpt);
|
20004
20041
|
const updatedItems = {};
|
20005
20042
|
if (isDef(notificationLevel) && storageConversation.notificationLevel !== notificationLevel) {
|
@@ -20051,7 +20088,8 @@ class ConversationManager {
|
|
20051
20088
|
dialogTitle,
|
20052
20089
|
smallAvatarUrl,
|
20053
20090
|
burnAfterReadingFlag,
|
20054
|
-
burnAfterReadingTime
|
20091
|
+
burnAfterReadingTime,
|
20092
|
+
updateTime
|
20055
20093
|
});
|
20056
20094
|
if (Object.keys(updatedItems).length && shouldNotify) {
|
20057
20095
|
this.setUpdatedConversation({
|
@@ -20077,22 +20115,23 @@ class ConversationManager {
|
|
20077
20115
|
const oldLocalConversation = deepClone(this.get(conOpt));
|
20078
20116
|
this.store.updateUnreadCount(message);
|
20079
20117
|
this.store.updateMentionedData(message);
|
20118
|
+
this.store.updateUpdateTime(conOpt, parseInt(message.sentTime));
|
20080
20119
|
const newLocalConversation = this.get(conOpt);
|
20081
20120
|
if (oldLocalConversation.unreadMessageCount !== newLocalConversation.unreadMessageCount) {
|
20082
20121
|
updateConOptions.updatedItems.unreadMessageCount = {
|
20083
|
-
time: message.sentTime,
|
20122
|
+
time: parseInt(message.sentTime),
|
20084
20123
|
val: newLocalConversation.unreadMessageCount
|
20085
20124
|
};
|
20086
20125
|
}
|
20087
20126
|
if (oldLocalConversation.hasMentioned !== newLocalConversation.hasMentioned) {
|
20088
20127
|
updateConOptions.updatedItems.hasMentioned = {
|
20089
|
-
time: message.sentTime,
|
20128
|
+
time: parseInt(message.sentTime),
|
20090
20129
|
val: newLocalConversation.hasMentioned
|
20091
20130
|
};
|
20092
20131
|
}
|
20093
20132
|
if (oldLocalConversation.unreadMentionedCount !== newLocalConversation.unreadMentionedCount) {
|
20094
20133
|
updateConOptions.updatedItems.unreadMentionedCount = {
|
20095
|
-
time: message.sentTime,
|
20134
|
+
time: parseInt(message.sentTime),
|
20096
20135
|
val: newLocalConversation.unreadMentionedCount
|
20097
20136
|
};
|
20098
20137
|
}
|
@@ -20100,7 +20139,7 @@ class ConversationManager {
|
|
20100
20139
|
updateConOptions.conversation.updateTime = parseInt(message.sentTime);
|
20101
20140
|
updateConOptions.conversation.latestMessage = message;
|
20102
20141
|
updateConOptions.updatedItems.latestMessage = {
|
20103
|
-
time: message.sentTime,
|
20142
|
+
time: parseInt(message.sentTime),
|
20104
20143
|
val: message
|
20105
20144
|
};
|
20106
20145
|
}
|
@@ -20237,7 +20276,8 @@ class ConversationManager {
|
|
20237
20276
|
notificationStatus,
|
20238
20277
|
isTop,
|
20239
20278
|
dialogTitle,
|
20240
|
-
smallAvatarUrl
|
20279
|
+
smallAvatarUrl,
|
20280
|
+
updateTime
|
20241
20281
|
} = val;
|
20242
20282
|
return {
|
20243
20283
|
...conOpt,
|
@@ -20247,7 +20287,8 @@ class ConversationManager {
|
|
20247
20287
|
notificationStatus,
|
20248
20288
|
isTop,
|
20249
20289
|
dialogTitle,
|
20250
|
-
smallAvatarUrl
|
20290
|
+
smallAvatarUrl,
|
20291
|
+
updateTime: updateTime
|
20251
20292
|
};
|
20252
20293
|
}
|
20253
20294
|
return null;
|
@@ -20263,7 +20304,8 @@ class ConversationManager {
|
|
20263
20304
|
notificationStatus,
|
20264
20305
|
isTop,
|
20265
20306
|
dialogTitle,
|
20266
|
-
smallAvatarUrl
|
20307
|
+
smallAvatarUrl,
|
20308
|
+
updateTime
|
20267
20309
|
}) => ({
|
20268
20310
|
conversationType,
|
20269
20311
|
targetId,
|
@@ -20273,7 +20315,8 @@ class ConversationManager {
|
|
20273
20315
|
notificationStatus,
|
20274
20316
|
isTop,
|
20275
20317
|
dialogTitle,
|
20276
|
-
smallAvatarUrl
|
20318
|
+
smallAvatarUrl,
|
20319
|
+
updateTime: updateTime
|
20277
20320
|
}));
|
20278
20321
|
}
|
20279
20322
|
remove(conOpt) {
|
@@ -20289,19 +20332,27 @@ class ConversationManager {
|
|
20289
20332
|
updateConOptions.conversation.latestMessage = undefined;
|
20290
20333
|
updateConOptions.updatedItems.latestMessage = {
|
20291
20334
|
val: null,
|
20292
|
-
time: getServerTime$1()
|
20335
|
+
time: getServerTime$1()
|
20293
20336
|
};
|
20294
20337
|
this.setUpdatedConversation(updateConOptions);
|
20295
20338
|
}
|
20296
|
-
|
20339
|
+
updateLatestMessage(conOpt, message) {
|
20340
|
+
if (isDef(message)) {
|
20341
|
+
this.store.set(conOpt, {
|
20342
|
+
updateTime: parseInt(message.sentTime)
|
20343
|
+
});
|
20344
|
+
}
|
20297
20345
|
const updateConOptions = {
|
20298
20346
|
conversation: conOpt,
|
20299
20347
|
updatedItems: {}
|
20300
20348
|
};
|
20349
|
+
if (isDef(message)) {
|
20350
|
+
updateConOptions.conversation.updateTime = parseInt(message.sentTime);
|
20351
|
+
}
|
20301
20352
|
updateConOptions.conversation.latestMessage = message;
|
20302
20353
|
updateConOptions.updatedItems.latestMessage = {
|
20303
20354
|
val: message,
|
20304
|
-
time:
|
20355
|
+
time: getServerTime$1()
|
20305
20356
|
};
|
20306
20357
|
this.setUpdatedConversation(updateConOptions);
|
20307
20358
|
}
|
@@ -20312,6 +20363,7 @@ class ConversationManager {
|
|
20312
20363
|
const nullConversationManager = {
|
20313
20364
|
addStatus: function (statusItem, shouldNotify) {},
|
20314
20365
|
setConversationCacheByMessage: function (message) {},
|
20366
|
+
updateLatestMessage: function (conOpt, message) {},
|
20315
20367
|
get: function (conOpt) {
|
20316
20368
|
return null;
|
20317
20369
|
},
|
@@ -20359,8 +20411,7 @@ const nullConversationManager = {
|
|
20359
20411
|
destroyed() {},
|
20360
20412
|
syncConversationStatus: function () {},
|
20361
20413
|
remove: function (conOpt) {},
|
20362
|
-
clearHistoryMessages: function (conOpt) {}
|
20363
|
-
refreshLatestMessage: function (conOpt, message) {}
|
20414
|
+
clearHistoryMessages: function (conOpt) {}
|
20364
20415
|
};
|
20365
20416
|
let manager$1;
|
20366
20417
|
var ConversationManager$1 = {
|
@@ -21520,6 +21571,43 @@ class MessageCache {
|
|
21520
21571
|
await this.checkAndResetDatabase();
|
21521
21572
|
await this.initDatabase();
|
21522
21573
|
}
|
21574
|
+
async getLatestMessage(conversation) {
|
21575
|
+
const dialogId = getFullDialogId(conversation);
|
21576
|
+
if (!this.db) {
|
21577
|
+
return null;
|
21578
|
+
}
|
21579
|
+
return new Promise((resolve, reject) => {
|
21580
|
+
const transaction = this.db.transaction(this.STORE_NAME, 'readonly');
|
21581
|
+
const store = transaction.objectStore(this.STORE_NAME);
|
21582
|
+
const index = store.index('dialogId_sentTime');
|
21583
|
+
const range = IDBKeyRange.bound([dialogId, ''], [dialogId, '\uffff']);
|
21584
|
+
const direction = 'prev';
|
21585
|
+
const cursorRequest = index.openCursor(range, direction);
|
21586
|
+
cursorRequest.onsuccess = event => {
|
21587
|
+
const cursor = event.target.result;
|
21588
|
+
if (cursor) {
|
21589
|
+
const message = {
|
21590
|
+
...cursor.value
|
21591
|
+
};
|
21592
|
+
if (typeof message.content === 'string' && message.content) {
|
21593
|
+
try {
|
21594
|
+
message.content = this.decryptContent(message.content);
|
21595
|
+
} catch (error) {
|
21596
|
+
console.error('解密消息内容失败', error);
|
21597
|
+
message.content = null;
|
21598
|
+
}
|
21599
|
+
}
|
21600
|
+
resolve(message);
|
21601
|
+
} else {
|
21602
|
+
resolve(null);
|
21603
|
+
}
|
21604
|
+
};
|
21605
|
+
cursorRequest.onerror = event => {
|
21606
|
+
console.error('获取最新消息失败', event);
|
21607
|
+
reject(new Error('获取最新消息失败'));
|
21608
|
+
};
|
21609
|
+
});
|
21610
|
+
}
|
21523
21611
|
}
|
21524
21612
|
let cache;
|
21525
21613
|
var MessageCache$1 = {
|
@@ -29131,10 +29219,9 @@ class IMClient extends EventEmitter {
|
|
29131
29219
|
});
|
29132
29220
|
}
|
29133
29221
|
async getPreviousHistoryMessages(conversation, timestamp, count = 20) {
|
29134
|
-
debugger;
|
29135
29222
|
const cachedResult = await MessageCache$1.get().getPreviousMessages(conversation, timestamp ?? '0', count);
|
29136
29223
|
if (!timestamp && cachedResult.messages.length) {
|
29137
|
-
ConversationManager$1.get().
|
29224
|
+
ConversationManager$1.get().updateLatestMessage(conversation, cachedResult.messages[cachedResult.messages.length - 1]);
|
29138
29225
|
}
|
29139
29226
|
if (cachedResult.messages.length >= count || !cachedResult.hasMore) {
|
29140
29227
|
return {
|
@@ -29156,7 +29243,7 @@ class IMClient extends EventEmitter {
|
|
29156
29243
|
}
|
29157
29244
|
const remotesMessages = remotesResult.data.list;
|
29158
29245
|
if (!remotesTimestamp) {
|
29159
|
-
ConversationManager$1.get().
|
29246
|
+
ConversationManager$1.get().updateLatestMessage(conversation, remotesMessages[remotesMessages.length - 1]);
|
29160
29247
|
}
|
29161
29248
|
MessageCache$1.get().addMessages(remotesMessages, conversation, !remotesResult.data.hasMore);
|
29162
29249
|
return {
|
@@ -29168,13 +29255,23 @@ class IMClient extends EventEmitter {
|
|
29168
29255
|
};
|
29169
29256
|
}
|
29170
29257
|
async deleteRemoteMessage(conversation, list) {
|
29171
|
-
|
29172
|
-
|
29258
|
+
const result = await deleteMessages$1(getFullDialogId(conversation), list.map(e => e.messageUId)).then(result => result.code);
|
29259
|
+
if (result === ErrorCode.SUCCESS) {
|
29260
|
+
const latestMessage = await MessageCache$1.get()?.getLatestMessage(conversation);
|
29261
|
+
await MessageCache$1.get()?.removeMessagesByUId(list.map(e => e.messageUId));
|
29262
|
+
if (latestMessage && list.some(e => {
|
29263
|
+
e.messageUId === latestMessage.messageUId;
|
29264
|
+
})) {
|
29265
|
+
const latestMessage2 = await MessageCache$1.get()?.getLatestMessage(conversation);
|
29266
|
+
ConversationManager$1.get().updateLatestMessage(conversation, latestMessage2);
|
29267
|
+
}
|
29268
|
+
}
|
29269
|
+
return result;
|
29173
29270
|
}
|
29174
|
-
async
|
29271
|
+
async deleteHistoryMessages(conversation) {
|
29175
29272
|
MessageCache$1.get()?.clearConversationCache(conversation);
|
29176
29273
|
ConversationManager$1.get().clearHistoryMessages(conversation);
|
29177
|
-
return clearHistoryMessage(getFullDialogId(conversation)
|
29274
|
+
return clearHistoryMessage(getFullDialogId(conversation)).then(result => result.code);
|
29178
29275
|
}
|
29179
29276
|
async getConversationList(count, conversationType, startTime, order) {
|
29180
29277
|
const params = {
|
@@ -29197,22 +29294,30 @@ class IMClient extends EventEmitter {
|
|
29197
29294
|
const contentList = [];
|
29198
29295
|
for (const dialogInfo of data.fullDialog) {
|
29199
29296
|
const conversationObj = this.formatConversation(dialogInfo);
|
29200
|
-
if (conversationObj) {
|
29201
|
-
|
29202
|
-
|
29203
|
-
|
29204
|
-
|
29205
|
-
|
29206
|
-
|
29207
|
-
|
29208
|
-
|
29209
|
-
|
29210
|
-
|
29211
|
-
|
29212
|
-
|
29213
|
-
|
29297
|
+
if (!conversationObj) {
|
29298
|
+
continue;
|
29299
|
+
}
|
29300
|
+
const conOpt = {
|
29301
|
+
conversationType: conversationObj.conversationType,
|
29302
|
+
targetId: conversationObj.targetId
|
29303
|
+
};
|
29304
|
+
if (!conversationObj.latestMessage) {
|
29305
|
+
conversationObj.latestMessage = await MessageCache$1.get()?.getLatestMessage(conOpt);
|
29306
|
+
}
|
29307
|
+
ConversationManager$1.get().addLocalConversation(conversationObj);
|
29308
|
+
const localConversation = ConversationManager$1.get().get(conOpt);
|
29309
|
+
Object.assign(conversationObj, localConversation);
|
29310
|
+
if (isDef(conversationObj.latestMessage) && !conversationObj.updateTime) {
|
29311
|
+
conversationObj.updateTime = parseInt(conversationObj.latestMessage.sentTime);
|
29312
|
+
}
|
29313
|
+
if (!conversationObj.updateTime) {
|
29314
|
+
conversationObj.updateTime = 10000;
|
29214
29315
|
}
|
29316
|
+
contentList.push(conversationObj);
|
29215
29317
|
}
|
29318
|
+
contentList.sort((a, b) => {
|
29319
|
+
return (a.updateTime ?? 0) - (b.updateTime ?? 0);
|
29320
|
+
});
|
29216
29321
|
return {
|
29217
29322
|
code: ErrorCode.SUCCESS,
|
29218
29323
|
data: contentList
|
@@ -29239,19 +29344,7 @@ class IMClient extends EventEmitter {
|
|
29239
29344
|
code: ErrorCode.CONVER_GET_ERROR
|
29240
29345
|
};
|
29241
29346
|
}
|
29242
|
-
const
|
29243
|
-
code,
|
29244
|
-
data
|
29245
|
-
} = await this.getRemoteHistoryMessages(conOpt, {
|
29246
|
-
count: 1,
|
29247
|
-
order: 0
|
29248
|
-
});
|
29249
|
-
if (code !== ErrorCode.SUCCESS) {
|
29250
|
-
return {
|
29251
|
-
code: ErrorCode.CONVER_GET_ERROR
|
29252
|
-
};
|
29253
|
-
}
|
29254
|
-
const latestMessage = data?.list[0];
|
29347
|
+
const latestMessage = await MessageCache$1.get()?.getLatestMessage(conOpt);
|
29255
29348
|
const conversation = {
|
29256
29349
|
...conOpt,
|
29257
29350
|
...localConversation,
|
@@ -29357,8 +29450,18 @@ class IMClient extends EventEmitter {
|
|
29357
29450
|
}
|
29358
29451
|
return conversationObj;
|
29359
29452
|
}
|
29360
|
-
clearBurnAfterReadingExpiredMessages(conversation) {
|
29361
|
-
|
29453
|
+
async clearBurnAfterReadingExpiredMessages(conversation) {
|
29454
|
+
const cache = MessageCache$1.get();
|
29455
|
+
if (!cache) {
|
29456
|
+
return Promise.resolve([]);
|
29457
|
+
}
|
29458
|
+
const latestMessage = await cache.getLatestMessage(conversation);
|
29459
|
+
const removedMsgUids = await cache.clearBurnAfterReadingExpiredMessages(conversation);
|
29460
|
+
if (latestMessage && removedMsgUids.includes(latestMessage.messageUId)) {
|
29461
|
+
const latestMessage2 = await cache.getLatestMessage(conversation);
|
29462
|
+
ConversationManager$1.get().updateLatestMessage(conversation, latestMessage2);
|
29463
|
+
}
|
29464
|
+
return removedMsgUids;
|
29362
29465
|
}
|
29363
29466
|
}
|
29364
29467
|
|
@@ -30574,12 +30677,11 @@ const deleteMessages = async (conversation, messages) => {
|
|
30574
30677
|
code: ErrorCode.SUCCESS
|
30575
30678
|
};
|
30576
30679
|
};
|
30577
|
-
const clearHistoryMessages = async
|
30578
|
-
assert('timestamp', timestamp, val => AssertRules.NUMBER(val) && val >= 0, true);
|
30680
|
+
const clearHistoryMessages = async conversation => {
|
30579
30681
|
assert('conversation', conversation, AssertRules.CONVERSATION);
|
30580
30682
|
const paramsStr = 'conversationType:' + conversation.conversationType + ',targetId:' + conversation.targetId;
|
30581
30683
|
logger.debug('clear message ->' + paramsStr);
|
30582
|
-
const code = await imClient.
|
30684
|
+
const code = await imClient.deleteHistoryMessages(conversation);
|
30583
30685
|
if (code !== ErrorCode.SUCCESS) {
|
30584
30686
|
logger.warn('clear message ->' + code + ':' + ErrorDesc(code) + ',' + paramsStr);
|
30585
30687
|
return {
|
package/index.umd.js
CHANGED
@@ -9522,7 +9522,7 @@
|
|
9522
9522
|
CmdIds[CmdIds["GetRemoteMessages"] = 1610682419] = "GetRemoteMessages";
|
9523
9523
|
CmdIds[CmdIds["GetSuperGroupRemoteMessages"] = 1610776956] = "GetSuperGroupRemoteMessages";
|
9524
9524
|
CmdIds[CmdIds["DeleteChatMessages"] = 1610682381] = "DeleteChatMessages";
|
9525
|
-
CmdIds[CmdIds["ClearChatHistoryMessage"] =
|
9525
|
+
CmdIds[CmdIds["ClearChatHistoryMessage"] = 1610682421] = "ClearChatHistoryMessage";
|
9526
9526
|
CmdIds[CmdIds["GetDialogList"] = 1610711096] = "GetDialogList";
|
9527
9527
|
CmdIds[CmdIds["GetBriefDialogList"] = 1610682399] = "GetBriefDialogList";
|
9528
9528
|
CmdIds[CmdIds["UpdatePrivateChatMuteConfig"] = 1610682379] = "UpdatePrivateChatMuteConfig";
|
@@ -15452,9 +15452,10 @@
|
|
15452
15452
|
* Properties of a CleanHistoryMessageReq.
|
15453
15453
|
* @exports ICleanHistoryMessageReq
|
15454
15454
|
* @interface ICleanHistoryMessageReq
|
15455
|
-
* @property {
|
15456
|
-
* @property {
|
15457
|
-
* @property {Long
|
15455
|
+
* @property {string|null} [destId] CleanHistoryMessageReq destId
|
15456
|
+
* @property {Long|null} [msgId] CleanHistoryMessageReq msgId
|
15457
|
+
* @property {Array.<Long>|null} [msgIdList] CleanHistoryMessageReq msgIdList
|
15458
|
+
* @property {Array.<string>|null} [destIdList] CleanHistoryMessageReq destIdList
|
15458
15459
|
*/
|
15459
15460
|
|
15460
15461
|
/**
|
@@ -15466,32 +15467,42 @@
|
|
15466
15467
|
* @param {ICleanHistoryMessageReq=} [properties] Properties to set
|
15467
15468
|
*/
|
15468
15469
|
function CleanHistoryMessageReq(properties) {
|
15470
|
+
this.msgIdList = [];
|
15471
|
+
this.destIdList = [];
|
15469
15472
|
if (properties) for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
|
15470
15473
|
}
|
15471
15474
|
|
15472
15475
|
/**
|
15473
15476
|
* CleanHistoryMessageReq destId.
|
15474
|
-
* @member {
|
15477
|
+
* @member {string} destId
|
15475
15478
|
* @memberof CleanHistoryMessageReq
|
15476
15479
|
* @instance
|
15477
15480
|
*/
|
15478
|
-
CleanHistoryMessageReq.prototype.destId =
|
15481
|
+
CleanHistoryMessageReq.prototype.destId = "";
|
15479
15482
|
|
15480
15483
|
/**
|
15481
|
-
* CleanHistoryMessageReq
|
15482
|
-
* @member {
|
15484
|
+
* CleanHistoryMessageReq msgId.
|
15485
|
+
* @member {Long} msgId
|
15486
|
+
* @memberof CleanHistoryMessageReq
|
15487
|
+
* @instance
|
15488
|
+
*/
|
15489
|
+
CleanHistoryMessageReq.prototype.msgId = $util$2.Long ? $util$2.Long.fromBits(0, 0, false) : 0;
|
15490
|
+
|
15491
|
+
/**
|
15492
|
+
* CleanHistoryMessageReq msgIdList.
|
15493
|
+
* @member {Array.<Long>} msgIdList
|
15483
15494
|
* @memberof CleanHistoryMessageReq
|
15484
15495
|
* @instance
|
15485
15496
|
*/
|
15486
|
-
CleanHistoryMessageReq.prototype.
|
15497
|
+
CleanHistoryMessageReq.prototype.msgIdList = $util$2.emptyArray;
|
15487
15498
|
|
15488
15499
|
/**
|
15489
|
-
* CleanHistoryMessageReq
|
15490
|
-
* @member {
|
15500
|
+
* CleanHistoryMessageReq destIdList.
|
15501
|
+
* @member {Array.<string>} destIdList
|
15491
15502
|
* @memberof CleanHistoryMessageReq
|
15492
15503
|
* @instance
|
15493
15504
|
*/
|
15494
|
-
CleanHistoryMessageReq.prototype.
|
15505
|
+
CleanHistoryMessageReq.prototype.destIdList = $util$2.emptyArray;
|
15495
15506
|
|
15496
15507
|
/**
|
15497
15508
|
* Encodes the specified CleanHistoryMessageReq message. Does not implicitly {@link CleanHistoryMessageReq.verify|verify} messages.
|
@@ -15504,9 +15515,14 @@
|
|
15504
15515
|
*/
|
15505
15516
|
CleanHistoryMessageReq.encode = function encode(message, writer) {
|
15506
15517
|
if (!writer) writer = $Writer$2.create();
|
15507
|
-
if (message.destId != null && Object.hasOwnProperty.call(message, "destId")) writer.uint32(/* id 1, wireType
|
15508
|
-
if (message.
|
15509
|
-
if (message.
|
15518
|
+
if (message.destId != null && Object.hasOwnProperty.call(message, "destId")) writer.uint32(/* id 1, wireType 2 =*/10).string(message.destId);
|
15519
|
+
if (message.msgId != null && Object.hasOwnProperty.call(message, "msgId")) writer.uint32(/* id 2, wireType 0 =*/16).int64(message.msgId);
|
15520
|
+
if (message.msgIdList != null && message.msgIdList.length) {
|
15521
|
+
writer.uint32(/* id 3, wireType 2 =*/26).fork();
|
15522
|
+
for (let i = 0; i < message.msgIdList.length; ++i) writer.int64(message.msgIdList[i]);
|
15523
|
+
writer.ldelim();
|
15524
|
+
}
|
15525
|
+
if (message.destIdList != null && message.destIdList.length) for (let i = 0; i < message.destIdList.length; ++i) writer.uint32(/* id 4, wireType 2 =*/34).string(message.destIdList[i]);
|
15510
15526
|
return writer;
|
15511
15527
|
};
|
15512
15528
|
|
@@ -15530,17 +15546,27 @@
|
|
15530
15546
|
switch (tag >>> 3) {
|
15531
15547
|
case 1:
|
15532
15548
|
{
|
15533
|
-
message.destId = reader.
|
15549
|
+
message.destId = reader.string();
|
15534
15550
|
break;
|
15535
15551
|
}
|
15536
15552
|
case 2:
|
15537
15553
|
{
|
15538
|
-
message.
|
15554
|
+
message.msgId = reader.int64();
|
15539
15555
|
break;
|
15540
15556
|
}
|
15541
15557
|
case 3:
|
15542
15558
|
{
|
15543
|
-
message.
|
15559
|
+
if (!(message.msgIdList && message.msgIdList.length)) message.msgIdList = [];
|
15560
|
+
if ((tag & 7) === 2) {
|
15561
|
+
let end2 = reader.uint32() + reader.pos;
|
15562
|
+
while (reader.pos < end2) message.msgIdList.push(reader.int64());
|
15563
|
+
} else message.msgIdList.push(reader.int64());
|
15564
|
+
break;
|
15565
|
+
}
|
15566
|
+
case 4:
|
15567
|
+
{
|
15568
|
+
if (!(message.destIdList && message.destIdList.length)) message.destIdList = [];
|
15569
|
+
message.destIdList.push(reader.string());
|
15544
15570
|
break;
|
15545
15571
|
}
|
15546
15572
|
default:
|
@@ -19253,11 +19279,9 @@
|
|
19253
19279
|
});
|
19254
19280
|
return reqPromise;
|
19255
19281
|
};
|
19256
|
-
const clearHistoryMessage =
|
19282
|
+
const clearHistoryMessage = dialogId => {
|
19257
19283
|
return webSocketServer.send(CmdIds$1.ClearChatHistoryMessage, {
|
19258
|
-
destId:
|
19259
|
-
type: extractConversationType(dialogId) == exports.ConversationType.GROUP ? 1 : 0,
|
19260
|
-
msgTime: Long.fromNumber(timestamp)
|
19284
|
+
destId: dialogId
|
19261
19285
|
}, {
|
19262
19286
|
encoder: CleanHistoryMessageReq,
|
19263
19287
|
decoder: BaseResp
|
@@ -19647,6 +19671,10 @@
|
|
19647
19671
|
burnAfterReadingTime: {
|
19648
19672
|
keyName: 'brt',
|
19649
19673
|
defaultVal: 0
|
19674
|
+
},
|
19675
|
+
updateTime: {
|
19676
|
+
keyName: 'ut',
|
19677
|
+
defaultVal: 0
|
19650
19678
|
}
|
19651
19679
|
};
|
19652
19680
|
class ConversationStore {
|
@@ -19753,6 +19781,12 @@
|
|
19753
19781
|
this.localStore.remove(key);
|
19754
19782
|
}
|
19755
19783
|
}
|
19784
|
+
updateUpdateTime(conOpt, updateTime) {
|
19785
|
+
const key = this.getStoreKey(conOpt);
|
19786
|
+
const local = this.localStore.get(key) || {};
|
19787
|
+
local[ConversationKey2StorageKey.updateTime.keyName] = updateTime;
|
19788
|
+
this.localStore.set(key, local);
|
19789
|
+
}
|
19756
19790
|
set(conOpt, conversation) {
|
19757
19791
|
const key = this.getStoreKey(conOpt);
|
19758
19792
|
const local = this.localStore.get(key) || {};
|
@@ -19974,7 +20008,8 @@
|
|
19974
20008
|
dialogTitle,
|
19975
20009
|
smallAvatarUrl,
|
19976
20010
|
burnAfterReadingFlag,
|
19977
|
-
burnAfterReadingTime
|
20011
|
+
burnAfterReadingTime,
|
20012
|
+
updateTime
|
19978
20013
|
} = conversation;
|
19979
20014
|
this.localConversationSet.add(this.getConversationKey(conversation));
|
19980
20015
|
this.addStatus({
|
@@ -19986,7 +20021,8 @@
|
|
19986
20021
|
dialogTitle,
|
19987
20022
|
smallAvatarUrl,
|
19988
20023
|
burnAfterReadingFlag,
|
19989
|
-
burnAfterReadingTime
|
20024
|
+
burnAfterReadingTime,
|
20025
|
+
updateTime
|
19990
20026
|
}, false);
|
19991
20027
|
}
|
19992
20028
|
addStatus(statusItem, shouldNotify = false) {
|
@@ -19999,13 +20035,14 @@
|
|
19999
20035
|
dialogTitle,
|
20000
20036
|
smallAvatarUrl,
|
20001
20037
|
burnAfterReadingFlag,
|
20002
|
-
burnAfterReadingTime
|
20038
|
+
burnAfterReadingTime,
|
20039
|
+
updateTime
|
20003
20040
|
} = statusItem;
|
20004
20041
|
const conOpt = {
|
20005
20042
|
conversationType,
|
20006
20043
|
targetId
|
20007
20044
|
};
|
20008
|
-
const updatedTime = getServerTime$1()
|
20045
|
+
const updatedTime = getServerTime$1();
|
20009
20046
|
const storageConversation = this.store.get(conOpt);
|
20010
20047
|
const updatedItems = {};
|
20011
20048
|
if (isDef(notificationLevel) && storageConversation.notificationLevel !== notificationLevel) {
|
@@ -20057,7 +20094,8 @@
|
|
20057
20094
|
dialogTitle,
|
20058
20095
|
smallAvatarUrl,
|
20059
20096
|
burnAfterReadingFlag,
|
20060
|
-
burnAfterReadingTime
|
20097
|
+
burnAfterReadingTime,
|
20098
|
+
updateTime
|
20061
20099
|
});
|
20062
20100
|
if (Object.keys(updatedItems).length && shouldNotify) {
|
20063
20101
|
this.setUpdatedConversation({
|
@@ -20083,22 +20121,23 @@
|
|
20083
20121
|
const oldLocalConversation = deepClone(this.get(conOpt));
|
20084
20122
|
this.store.updateUnreadCount(message);
|
20085
20123
|
this.store.updateMentionedData(message);
|
20124
|
+
this.store.updateUpdateTime(conOpt, parseInt(message.sentTime));
|
20086
20125
|
const newLocalConversation = this.get(conOpt);
|
20087
20126
|
if (oldLocalConversation.unreadMessageCount !== newLocalConversation.unreadMessageCount) {
|
20088
20127
|
updateConOptions.updatedItems.unreadMessageCount = {
|
20089
|
-
time: message.sentTime,
|
20128
|
+
time: parseInt(message.sentTime),
|
20090
20129
|
val: newLocalConversation.unreadMessageCount
|
20091
20130
|
};
|
20092
20131
|
}
|
20093
20132
|
if (oldLocalConversation.hasMentioned !== newLocalConversation.hasMentioned) {
|
20094
20133
|
updateConOptions.updatedItems.hasMentioned = {
|
20095
|
-
time: message.sentTime,
|
20134
|
+
time: parseInt(message.sentTime),
|
20096
20135
|
val: newLocalConversation.hasMentioned
|
20097
20136
|
};
|
20098
20137
|
}
|
20099
20138
|
if (oldLocalConversation.unreadMentionedCount !== newLocalConversation.unreadMentionedCount) {
|
20100
20139
|
updateConOptions.updatedItems.unreadMentionedCount = {
|
20101
|
-
time: message.sentTime,
|
20140
|
+
time: parseInt(message.sentTime),
|
20102
20141
|
val: newLocalConversation.unreadMentionedCount
|
20103
20142
|
};
|
20104
20143
|
}
|
@@ -20106,7 +20145,7 @@
|
|
20106
20145
|
updateConOptions.conversation.updateTime = parseInt(message.sentTime);
|
20107
20146
|
updateConOptions.conversation.latestMessage = message;
|
20108
20147
|
updateConOptions.updatedItems.latestMessage = {
|
20109
|
-
time: message.sentTime,
|
20148
|
+
time: parseInt(message.sentTime),
|
20110
20149
|
val: message
|
20111
20150
|
};
|
20112
20151
|
}
|
@@ -20243,7 +20282,8 @@
|
|
20243
20282
|
notificationStatus,
|
20244
20283
|
isTop,
|
20245
20284
|
dialogTitle,
|
20246
|
-
smallAvatarUrl
|
20285
|
+
smallAvatarUrl,
|
20286
|
+
updateTime
|
20247
20287
|
} = val;
|
20248
20288
|
return {
|
20249
20289
|
...conOpt,
|
@@ -20253,7 +20293,8 @@
|
|
20253
20293
|
notificationStatus,
|
20254
20294
|
isTop,
|
20255
20295
|
dialogTitle,
|
20256
|
-
smallAvatarUrl
|
20296
|
+
smallAvatarUrl,
|
20297
|
+
updateTime: updateTime
|
20257
20298
|
};
|
20258
20299
|
}
|
20259
20300
|
return null;
|
@@ -20269,7 +20310,8 @@
|
|
20269
20310
|
notificationStatus,
|
20270
20311
|
isTop,
|
20271
20312
|
dialogTitle,
|
20272
|
-
smallAvatarUrl
|
20313
|
+
smallAvatarUrl,
|
20314
|
+
updateTime
|
20273
20315
|
}) => ({
|
20274
20316
|
conversationType,
|
20275
20317
|
targetId,
|
@@ -20279,7 +20321,8 @@
|
|
20279
20321
|
notificationStatus,
|
20280
20322
|
isTop,
|
20281
20323
|
dialogTitle,
|
20282
|
-
smallAvatarUrl
|
20324
|
+
smallAvatarUrl,
|
20325
|
+
updateTime: updateTime
|
20283
20326
|
}));
|
20284
20327
|
}
|
20285
20328
|
remove(conOpt) {
|
@@ -20295,19 +20338,27 @@
|
|
20295
20338
|
updateConOptions.conversation.latestMessage = undefined;
|
20296
20339
|
updateConOptions.updatedItems.latestMessage = {
|
20297
20340
|
val: null,
|
20298
|
-
time: getServerTime$1()
|
20341
|
+
time: getServerTime$1()
|
20299
20342
|
};
|
20300
20343
|
this.setUpdatedConversation(updateConOptions);
|
20301
20344
|
}
|
20302
|
-
|
20345
|
+
updateLatestMessage(conOpt, message) {
|
20346
|
+
if (isDef(message)) {
|
20347
|
+
this.store.set(conOpt, {
|
20348
|
+
updateTime: parseInt(message.sentTime)
|
20349
|
+
});
|
20350
|
+
}
|
20303
20351
|
const updateConOptions = {
|
20304
20352
|
conversation: conOpt,
|
20305
20353
|
updatedItems: {}
|
20306
20354
|
};
|
20355
|
+
if (isDef(message)) {
|
20356
|
+
updateConOptions.conversation.updateTime = parseInt(message.sentTime);
|
20357
|
+
}
|
20307
20358
|
updateConOptions.conversation.latestMessage = message;
|
20308
20359
|
updateConOptions.updatedItems.latestMessage = {
|
20309
20360
|
val: message,
|
20310
|
-
time:
|
20361
|
+
time: getServerTime$1()
|
20311
20362
|
};
|
20312
20363
|
this.setUpdatedConversation(updateConOptions);
|
20313
20364
|
}
|
@@ -20318,6 +20369,7 @@
|
|
20318
20369
|
const nullConversationManager = {
|
20319
20370
|
addStatus: function (statusItem, shouldNotify) {},
|
20320
20371
|
setConversationCacheByMessage: function (message) {},
|
20372
|
+
updateLatestMessage: function (conOpt, message) {},
|
20321
20373
|
get: function (conOpt) {
|
20322
20374
|
return null;
|
20323
20375
|
},
|
@@ -20365,8 +20417,7 @@
|
|
20365
20417
|
destroyed() {},
|
20366
20418
|
syncConversationStatus: function () {},
|
20367
20419
|
remove: function (conOpt) {},
|
20368
|
-
clearHistoryMessages: function (conOpt) {}
|
20369
|
-
refreshLatestMessage: function (conOpt, message) {}
|
20420
|
+
clearHistoryMessages: function (conOpt) {}
|
20370
20421
|
};
|
20371
20422
|
let manager$1;
|
20372
20423
|
var ConversationManager$1 = {
|
@@ -21526,6 +21577,43 @@
|
|
21526
21577
|
await this.checkAndResetDatabase();
|
21527
21578
|
await this.initDatabase();
|
21528
21579
|
}
|
21580
|
+
async getLatestMessage(conversation) {
|
21581
|
+
const dialogId = getFullDialogId(conversation);
|
21582
|
+
if (!this.db) {
|
21583
|
+
return null;
|
21584
|
+
}
|
21585
|
+
return new Promise((resolve, reject) => {
|
21586
|
+
const transaction = this.db.transaction(this.STORE_NAME, 'readonly');
|
21587
|
+
const store = transaction.objectStore(this.STORE_NAME);
|
21588
|
+
const index = store.index('dialogId_sentTime');
|
21589
|
+
const range = IDBKeyRange.bound([dialogId, ''], [dialogId, '\uffff']);
|
21590
|
+
const direction = 'prev';
|
21591
|
+
const cursorRequest = index.openCursor(range, direction);
|
21592
|
+
cursorRequest.onsuccess = event => {
|
21593
|
+
const cursor = event.target.result;
|
21594
|
+
if (cursor) {
|
21595
|
+
const message = {
|
21596
|
+
...cursor.value
|
21597
|
+
};
|
21598
|
+
if (typeof message.content === 'string' && message.content) {
|
21599
|
+
try {
|
21600
|
+
message.content = this.decryptContent(message.content);
|
21601
|
+
} catch (error) {
|
21602
|
+
console.error('解密消息内容失败', error);
|
21603
|
+
message.content = null;
|
21604
|
+
}
|
21605
|
+
}
|
21606
|
+
resolve(message);
|
21607
|
+
} else {
|
21608
|
+
resolve(null);
|
21609
|
+
}
|
21610
|
+
};
|
21611
|
+
cursorRequest.onerror = event => {
|
21612
|
+
console.error('获取最新消息失败', event);
|
21613
|
+
reject(new Error('获取最新消息失败'));
|
21614
|
+
};
|
21615
|
+
});
|
21616
|
+
}
|
21529
21617
|
}
|
21530
21618
|
let cache;
|
21531
21619
|
var MessageCache$1 = {
|
@@ -29137,10 +29225,9 @@
|
|
29137
29225
|
});
|
29138
29226
|
}
|
29139
29227
|
async getPreviousHistoryMessages(conversation, timestamp, count = 20) {
|
29140
|
-
debugger;
|
29141
29228
|
const cachedResult = await MessageCache$1.get().getPreviousMessages(conversation, timestamp ?? '0', count);
|
29142
29229
|
if (!timestamp && cachedResult.messages.length) {
|
29143
|
-
ConversationManager$1.get().
|
29230
|
+
ConversationManager$1.get().updateLatestMessage(conversation, cachedResult.messages[cachedResult.messages.length - 1]);
|
29144
29231
|
}
|
29145
29232
|
if (cachedResult.messages.length >= count || !cachedResult.hasMore) {
|
29146
29233
|
return {
|
@@ -29162,7 +29249,7 @@
|
|
29162
29249
|
}
|
29163
29250
|
const remotesMessages = remotesResult.data.list;
|
29164
29251
|
if (!remotesTimestamp) {
|
29165
|
-
ConversationManager$1.get().
|
29252
|
+
ConversationManager$1.get().updateLatestMessage(conversation, remotesMessages[remotesMessages.length - 1]);
|
29166
29253
|
}
|
29167
29254
|
MessageCache$1.get().addMessages(remotesMessages, conversation, !remotesResult.data.hasMore);
|
29168
29255
|
return {
|
@@ -29174,13 +29261,23 @@
|
|
29174
29261
|
};
|
29175
29262
|
}
|
29176
29263
|
async deleteRemoteMessage(conversation, list) {
|
29177
|
-
|
29178
|
-
|
29264
|
+
const result = await deleteMessages$1(getFullDialogId(conversation), list.map(e => e.messageUId)).then(result => result.code);
|
29265
|
+
if (result === exports.ErrorCode.SUCCESS) {
|
29266
|
+
const latestMessage = await MessageCache$1.get()?.getLatestMessage(conversation);
|
29267
|
+
await MessageCache$1.get()?.removeMessagesByUId(list.map(e => e.messageUId));
|
29268
|
+
if (latestMessage && list.some(e => {
|
29269
|
+
e.messageUId === latestMessage.messageUId;
|
29270
|
+
})) {
|
29271
|
+
const latestMessage2 = await MessageCache$1.get()?.getLatestMessage(conversation);
|
29272
|
+
ConversationManager$1.get().updateLatestMessage(conversation, latestMessage2);
|
29273
|
+
}
|
29274
|
+
}
|
29275
|
+
return result;
|
29179
29276
|
}
|
29180
|
-
async
|
29277
|
+
async deleteHistoryMessages(conversation) {
|
29181
29278
|
MessageCache$1.get()?.clearConversationCache(conversation);
|
29182
29279
|
ConversationManager$1.get().clearHistoryMessages(conversation);
|
29183
|
-
return clearHistoryMessage(getFullDialogId(conversation)
|
29280
|
+
return clearHistoryMessage(getFullDialogId(conversation)).then(result => result.code);
|
29184
29281
|
}
|
29185
29282
|
async getConversationList(count, conversationType, startTime, order) {
|
29186
29283
|
const params = {
|
@@ -29203,22 +29300,30 @@
|
|
29203
29300
|
const contentList = [];
|
29204
29301
|
for (const dialogInfo of data.fullDialog) {
|
29205
29302
|
const conversationObj = this.formatConversation(dialogInfo);
|
29206
|
-
if (conversationObj) {
|
29207
|
-
|
29208
|
-
|
29209
|
-
|
29210
|
-
|
29211
|
-
|
29212
|
-
|
29213
|
-
|
29214
|
-
|
29215
|
-
|
29216
|
-
|
29217
|
-
|
29218
|
-
|
29219
|
-
|
29303
|
+
if (!conversationObj) {
|
29304
|
+
continue;
|
29305
|
+
}
|
29306
|
+
const conOpt = {
|
29307
|
+
conversationType: conversationObj.conversationType,
|
29308
|
+
targetId: conversationObj.targetId
|
29309
|
+
};
|
29310
|
+
if (!conversationObj.latestMessage) {
|
29311
|
+
conversationObj.latestMessage = await MessageCache$1.get()?.getLatestMessage(conOpt);
|
29312
|
+
}
|
29313
|
+
ConversationManager$1.get().addLocalConversation(conversationObj);
|
29314
|
+
const localConversation = ConversationManager$1.get().get(conOpt);
|
29315
|
+
Object.assign(conversationObj, localConversation);
|
29316
|
+
if (isDef(conversationObj.latestMessage) && !conversationObj.updateTime) {
|
29317
|
+
conversationObj.updateTime = parseInt(conversationObj.latestMessage.sentTime);
|
29318
|
+
}
|
29319
|
+
if (!conversationObj.updateTime) {
|
29320
|
+
conversationObj.updateTime = 10000;
|
29220
29321
|
}
|
29322
|
+
contentList.push(conversationObj);
|
29221
29323
|
}
|
29324
|
+
contentList.sort((a, b) => {
|
29325
|
+
return (a.updateTime ?? 0) - (b.updateTime ?? 0);
|
29326
|
+
});
|
29222
29327
|
return {
|
29223
29328
|
code: exports.ErrorCode.SUCCESS,
|
29224
29329
|
data: contentList
|
@@ -29245,19 +29350,7 @@
|
|
29245
29350
|
code: exports.ErrorCode.CONVER_GET_ERROR
|
29246
29351
|
};
|
29247
29352
|
}
|
29248
|
-
const
|
29249
|
-
code,
|
29250
|
-
data
|
29251
|
-
} = await this.getRemoteHistoryMessages(conOpt, {
|
29252
|
-
count: 1,
|
29253
|
-
order: 0
|
29254
|
-
});
|
29255
|
-
if (code !== exports.ErrorCode.SUCCESS) {
|
29256
|
-
return {
|
29257
|
-
code: exports.ErrorCode.CONVER_GET_ERROR
|
29258
|
-
};
|
29259
|
-
}
|
29260
|
-
const latestMessage = data?.list[0];
|
29353
|
+
const latestMessage = await MessageCache$1.get()?.getLatestMessage(conOpt);
|
29261
29354
|
const conversation = {
|
29262
29355
|
...conOpt,
|
29263
29356
|
...localConversation,
|
@@ -29363,8 +29456,18 @@
|
|
29363
29456
|
}
|
29364
29457
|
return conversationObj;
|
29365
29458
|
}
|
29366
|
-
clearBurnAfterReadingExpiredMessages(conversation) {
|
29367
|
-
|
29459
|
+
async clearBurnAfterReadingExpiredMessages(conversation) {
|
29460
|
+
const cache = MessageCache$1.get();
|
29461
|
+
if (!cache) {
|
29462
|
+
return Promise.resolve([]);
|
29463
|
+
}
|
29464
|
+
const latestMessage = await cache.getLatestMessage(conversation);
|
29465
|
+
const removedMsgUids = await cache.clearBurnAfterReadingExpiredMessages(conversation);
|
29466
|
+
if (latestMessage && removedMsgUids.includes(latestMessage.messageUId)) {
|
29467
|
+
const latestMessage2 = await cache.getLatestMessage(conversation);
|
29468
|
+
ConversationManager$1.get().updateLatestMessage(conversation, latestMessage2);
|
29469
|
+
}
|
29470
|
+
return removedMsgUids;
|
29368
29471
|
}
|
29369
29472
|
}
|
29370
29473
|
|
@@ -30580,12 +30683,11 @@
|
|
30580
30683
|
code: exports.ErrorCode.SUCCESS
|
30581
30684
|
};
|
30582
30685
|
};
|
30583
|
-
const clearHistoryMessages = async
|
30584
|
-
assert('timestamp', timestamp, val => AssertRules.NUMBER(val) && val >= 0, true);
|
30686
|
+
const clearHistoryMessages = async conversation => {
|
30585
30687
|
assert('conversation', conversation, AssertRules.CONVERSATION);
|
30586
30688
|
const paramsStr = 'conversationType:' + conversation.conversationType + ',targetId:' + conversation.targetId;
|
30587
30689
|
logger.debug('clear message ->' + paramsStr);
|
30588
|
-
const code = await imClient.
|
30690
|
+
const code = await imClient.deleteHistoryMessages(conversation);
|
30589
30691
|
if (code !== exports.ErrorCode.SUCCESS) {
|
30590
30692
|
logger.warn('clear message ->' + code + ':' + ErrorDesc(code) + ',' + paramsStr);
|
30591
30693
|
return {
|
package/package.json
CHANGED
package/types/index.d.ts
CHANGED
@@ -222,7 +222,7 @@ export declare const deleteMessages: (conversation: IConversationOption, message
|
|
222
222
|
* @param conversation 会话
|
223
223
|
* @param timestamp 清除时间点, 该时间之前的消息将被清除
|
224
224
|
*/
|
225
|
-
export declare const clearHistoryMessages: (conversation: IConversationOption
|
225
|
+
export declare const clearHistoryMessages: (conversation: IConversationOption) => IPromiseResult<void>;
|
226
226
|
export declare const parseChatRecordMsgDetails: (conversation: IConversationOption, detailItems: IChatRecordMsgDetail[]) => IReceivedMessage[];
|
227
227
|
/**
|
228
228
|
* 发送已读回执
|
package/types/types.d.ts
CHANGED
@@ -89,6 +89,7 @@ export interface IConversationState extends IBaseConversationInfo {
|
|
89
89
|
isTop: boolean;
|
90
90
|
dialogTitle: string | null | undefined;
|
91
91
|
smallAvatarUrl: string | null | undefined;
|
92
|
+
updateTime: number | null | undefined;
|
92
93
|
}
|
93
94
|
/**
|
94
95
|
* 会话信息
|
@@ -96,7 +97,7 @@ export interface IConversationState extends IBaseConversationInfo {
|
|
96
97
|
export type IConversationOption = IBaseConversationInfo;
|
97
98
|
export type IUpdatedConversationItemKeys = Extract<keyof IReceivedConversation, 'isTop' | 'notificationStatus' | 'notificationLevel' | 'unreadMessageCount' | 'hasMentioned' | 'unreadMentionedCount' | 'dialogTitle' | 'smallAvatarUrl' | 'latestMessage' | 'burnAfterReadingFlag' | 'burnAfterReadingTime'>;
|
98
99
|
export type IUpdatedConversationItem = Partial<Record<IUpdatedConversationItemKeys, {
|
99
|
-
time:
|
100
|
+
time: number;
|
100
101
|
val: any;
|
101
102
|
}>>;
|
102
103
|
/**
|