@onyx-p/imlib-web 2.2.2 → 2.2.4
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 +224 -159
- package/index.umd.js +224 -159
- package/package.json +1 -1
- package/types/model/iReceivedMessage.d.ts +1 -1
package/index.umd.js
CHANGED
@@ -20498,7 +20498,7 @@
|
|
20498
20498
|
messageType: messageInstance.messageType,
|
20499
20499
|
isOffLineMessage: false,
|
20500
20500
|
isPersited: messageInstance.isPersited,
|
20501
|
-
messageId: Long.isLong(dialogMessage.localId) ? dialogMessage.localId.
|
20501
|
+
messageId: Long.isLong(dialogMessage.localId) ? dialogMessage.localId.toNumber : 0,
|
20502
20502
|
messageUId: dialogMessage.msgId.toString(),
|
20503
20503
|
sentTime: dialogMessage.seqno.toString(),
|
20504
20504
|
sentStatus: exports.SentStatus.SENT,
|
@@ -20568,7 +20568,7 @@
|
|
20568
20568
|
messageType: messageInstance.messageType,
|
20569
20569
|
isOffLineMessage: false,
|
20570
20570
|
isPersited: messageInstance.isPersited,
|
20571
|
-
messageId:
|
20571
|
+
messageId: 0,
|
20572
20572
|
messageUId: item.msgId + '',
|
20573
20573
|
sentTime: item.msgSendTime + '',
|
20574
20574
|
sentStatus: exports.SentStatus.SENT,
|
@@ -20710,6 +20710,21 @@
|
|
20710
20710
|
}
|
20711
20711
|
};
|
20712
20712
|
|
20713
|
+
let oldestMessageId = 0;
|
20714
|
+
let lastMessageId = 0;
|
20715
|
+
function setInitialMessageId(oldestMessageId_tmp, lastMessageId_tmp) {
|
20716
|
+
oldestMessageId = oldestMessageId_tmp;
|
20717
|
+
lastMessageId = lastMessageId_tmp;
|
20718
|
+
}
|
20719
|
+
function generateNewMessageId() {
|
20720
|
+
lastMessageId++;
|
20721
|
+
return lastMessageId;
|
20722
|
+
}
|
20723
|
+
function generateOldMessageId() {
|
20724
|
+
oldestMessageId--;
|
20725
|
+
return oldestMessageId;
|
20726
|
+
}
|
20727
|
+
|
20713
20728
|
class MessageLoader {
|
20714
20729
|
watcher;
|
20715
20730
|
pullingMsg = false;
|
@@ -20813,6 +20828,9 @@
|
|
20813
20828
|
RecallMessageStore.remove(m.content.messageUId);
|
20814
20829
|
} else {
|
20815
20830
|
m.isOffLineMessage = isOffLineMessage;
|
20831
|
+
if (!m.messageId) {
|
20832
|
+
m.messageId = generateNewMessageId();
|
20833
|
+
}
|
20816
20834
|
ConversationManager$1.get().setConversationCacheByMessage(m);
|
20817
20835
|
messageList.push(m);
|
20818
20836
|
if (m.messageType === MessageTypes.RECALL) {
|
@@ -20852,8 +20870,18 @@
|
|
20852
20870
|
MessageReceiptManager$1.get()?.sendArrivalReceipts(normalMessages);
|
20853
20871
|
}
|
20854
20872
|
if (done) {
|
20855
|
-
|
20856
|
-
|
20873
|
+
let seqNo_long;
|
20874
|
+
if (seqno) {
|
20875
|
+
if (Long.isLong(seqno)) {
|
20876
|
+
seqNo_long = seqno;
|
20877
|
+
} else if (typeof seqno === 'string') {
|
20878
|
+
seqNo_long = Long.fromString(seqno);
|
20879
|
+
} else if (typeof seqno === 'number') {
|
20880
|
+
seqNo_long = Long.fromNumber(seqno);
|
20881
|
+
}
|
20882
|
+
}
|
20883
|
+
if (seqNo_long && Long.isLong(seqNo_long) && seqNo_long.ge(this.serverMsgSeqno)) {
|
20884
|
+
this.serverMsgSeqno = seqNo_long;
|
20857
20885
|
}
|
20858
20886
|
const isFinished = this.serverMsgSeqno.lessThanOrEqual(offset);
|
20859
20887
|
logger.info(`pullMsg success -> syncTime: ${offset}, finished: ${isFinished}`);
|
@@ -20990,10 +21018,10 @@
|
|
20990
21018
|
currentAppKey = '';
|
20991
21019
|
currentUserId = '';
|
20992
21020
|
APP_INFO_KEY = 'im_app_info';
|
20993
|
-
DB_NAME_PREFIX = '
|
21021
|
+
DB_NAME_PREFIX = 'im_message_cache_new';
|
20994
21022
|
DB_VERSION = 2;
|
20995
|
-
STORE_NAME = '
|
20996
|
-
DIALOG_STATE_STORE = '
|
21023
|
+
STORE_NAME = 'messages_new';
|
21024
|
+
DIALOG_STATE_STORE = 'dialogStates_new';
|
20997
21025
|
encryptKey = {
|
20998
21026
|
key: ''
|
20999
21027
|
};
|
@@ -21001,7 +21029,8 @@
|
|
21001
21029
|
SALT_SUFFIX = 'im_message_cache_salt_suffix';
|
21002
21030
|
constructor(appKey, userId) {
|
21003
21031
|
this.generateEncryptKey(appKey, userId);
|
21004
|
-
this.
|
21032
|
+
this.currentAppKey = appKey;
|
21033
|
+
this.currentUserId = userId;
|
21005
21034
|
}
|
21006
21035
|
generateEncryptKey(appKey, userId) {
|
21007
21036
|
const saltedInput = `${this.SALT_PREFIX}${appKey}_${userId}${this.SALT_SUFFIX}`;
|
@@ -21019,9 +21048,7 @@
|
|
21019
21048
|
iv: iv
|
21020
21049
|
};
|
21021
21050
|
}
|
21022
|
-
async
|
21023
|
-
this.currentAppKey = appKey;
|
21024
|
-
this.currentUserId = userId;
|
21051
|
+
async initDB() {
|
21025
21052
|
await this.checkAndResetDatabase();
|
21026
21053
|
await this.initDatabase();
|
21027
21054
|
}
|
@@ -21034,7 +21061,7 @@
|
|
21034
21061
|
await this.deleteDatabase();
|
21035
21062
|
}
|
21036
21063
|
} catch (error) {
|
21037
|
-
|
21064
|
+
logger.error('解析存储的AppKey和UserId出错', error);
|
21038
21065
|
await this.deleteDatabase();
|
21039
21066
|
}
|
21040
21067
|
}
|
@@ -21054,11 +21081,11 @@
|
|
21054
21081
|
const dbName = this.getDBName();
|
21055
21082
|
const deleteRequest = indexedDB.deleteDatabase(dbName);
|
21056
21083
|
deleteRequest.onsuccess = () => {
|
21057
|
-
|
21084
|
+
logger.info(`数据库 ${dbName} 已成功删除`);
|
21058
21085
|
resolve();
|
21059
21086
|
};
|
21060
21087
|
deleteRequest.onerror = event => {
|
21061
|
-
|
21088
|
+
logger.error(`删除数据库 ${dbName} 失败`, event);
|
21062
21089
|
resolve();
|
21063
21090
|
};
|
21064
21091
|
});
|
@@ -21071,7 +21098,7 @@
|
|
21071
21098
|
const dbName = this.getDBName();
|
21072
21099
|
const request = indexedDB.open(dbName, this.DB_VERSION);
|
21073
21100
|
request.onerror = event => {
|
21074
|
-
|
21101
|
+
logger.error('数据库打开失败', event);
|
21075
21102
|
reject(new Error('数据库打开失败'));
|
21076
21103
|
};
|
21077
21104
|
request.onsuccess = event => {
|
@@ -21079,7 +21106,7 @@
|
|
21079
21106
|
this.loadAllDialogStates().then(() => {
|
21080
21107
|
resolve();
|
21081
21108
|
}).catch(err => {
|
21082
|
-
|
21109
|
+
logger.error('加载会话状态失败', err);
|
21083
21110
|
resolve();
|
21084
21111
|
});
|
21085
21112
|
};
|
@@ -21087,7 +21114,10 @@
|
|
21087
21114
|
const db = event.target.result;
|
21088
21115
|
if (!db.objectStoreNames.contains(this.STORE_NAME)) {
|
21089
21116
|
const store = db.createObjectStore(this.STORE_NAME, {
|
21090
|
-
keyPath: '
|
21117
|
+
keyPath: 'messageId'
|
21118
|
+
});
|
21119
|
+
store.createIndex('messageUId', 'messageUId', {
|
21120
|
+
unique: true
|
21091
21121
|
});
|
21092
21122
|
store.createIndex('dialogId', 'dialogId', {
|
21093
21123
|
unique: false
|
@@ -21151,7 +21181,7 @@
|
|
21151
21181
|
resolve();
|
21152
21182
|
};
|
21153
21183
|
request.onerror = event => {
|
21154
|
-
|
21184
|
+
logger.error('更新会话状态失败', event);
|
21155
21185
|
reject(new Error('更新会话状态失败'));
|
21156
21186
|
};
|
21157
21187
|
});
|
@@ -21162,7 +21192,7 @@
|
|
21162
21192
|
const contentStr = JSON.stringify(content);
|
21163
21193
|
return aes256Encrypt(contentStr, this.encryptKey);
|
21164
21194
|
} catch (error) {
|
21165
|
-
|
21195
|
+
logger.error('加密消息内容失败', error);
|
21166
21196
|
return '';
|
21167
21197
|
}
|
21168
21198
|
}
|
@@ -21174,7 +21204,7 @@
|
|
21174
21204
|
const decryptedStr = aes256Decrypt(encryptedHex, this.encryptKey);
|
21175
21205
|
return JSON.parse(decryptedStr);
|
21176
21206
|
} catch (error) {
|
21177
|
-
|
21207
|
+
logger.error('解密消息内容失败', error);
|
21178
21208
|
return null;
|
21179
21209
|
}
|
21180
21210
|
}
|
@@ -21204,7 +21234,7 @@
|
|
21204
21234
|
resolve();
|
21205
21235
|
};
|
21206
21236
|
transaction.onerror = event => {
|
21207
|
-
|
21237
|
+
logger.error('添加消息事务失败', event);
|
21208
21238
|
reject(new Error('添加消息事务失败'));
|
21209
21239
|
};
|
21210
21240
|
});
|
@@ -21247,7 +21277,7 @@
|
|
21247
21277
|
try {
|
21248
21278
|
message.content = this.decryptContent(message.content);
|
21249
21279
|
} catch (error) {
|
21250
|
-
|
21280
|
+
logger.error('解密消息内容失败', error);
|
21251
21281
|
message.content = null;
|
21252
21282
|
}
|
21253
21283
|
}
|
@@ -21271,7 +21301,7 @@
|
|
21271
21301
|
};
|
21272
21302
|
};
|
21273
21303
|
transaction.onerror = event => {
|
21274
|
-
|
21304
|
+
logger.error('获取消息事务失败', event);
|
21275
21305
|
reject(new Error('获取消息事务失败'));
|
21276
21306
|
};
|
21277
21307
|
});
|
@@ -21376,7 +21406,7 @@
|
|
21376
21406
|
}
|
21377
21407
|
};
|
21378
21408
|
deleteRequest.onerror = event => {
|
21379
|
-
|
21409
|
+
logger.error('删除消息失败', id, event);
|
21380
21410
|
if (!hasError) {
|
21381
21411
|
hasError = true;
|
21382
21412
|
reject(new Error('删除消息失败'));
|
@@ -21482,131 +21512,142 @@
|
|
21482
21512
|
}
|
21483
21513
|
};
|
21484
21514
|
request.onerror = event => {
|
21485
|
-
|
21515
|
+
logger.error('清除过期消息失败', event);
|
21486
21516
|
reject(new Error('清除过期消息失败'));
|
21487
21517
|
};
|
21488
21518
|
});
|
21489
21519
|
}
|
21490
|
-
async
|
21520
|
+
async getLatestMessage(conversation) {
|
21521
|
+
const dialogId = getFullDialogId(conversation);
|
21491
21522
|
if (!this.db) {
|
21492
|
-
return
|
21493
|
-
messages: [],
|
21494
|
-
nextCursor: null
|
21495
|
-
};
|
21523
|
+
return null;
|
21496
21524
|
}
|
21497
21525
|
return new Promise((resolve, reject) => {
|
21498
21526
|
const transaction = this.db.transaction(this.STORE_NAME, 'readonly');
|
21499
21527
|
const store = transaction.objectStore(this.STORE_NAME);
|
21500
21528
|
const index = store.index('dialogId_sentTime');
|
21501
|
-
const range = IDBKeyRange.bound([dialogId,
|
21502
|
-
const
|
21503
|
-
|
21504
|
-
let count = 0;
|
21505
|
-
const cursorRequest = index.openCursor(range);
|
21529
|
+
const range = IDBKeyRange.bound([dialogId, ''], [dialogId, '\uffff']);
|
21530
|
+
const direction = 'prev';
|
21531
|
+
const cursorRequest = index.openCursor(range, direction);
|
21506
21532
|
cursorRequest.onsuccess = event => {
|
21507
21533
|
const cursor = event.target.result;
|
21508
|
-
if (cursor
|
21509
|
-
|
21510
|
-
|
21511
|
-
|
21512
|
-
|
21513
|
-
|
21534
|
+
if (cursor) {
|
21535
|
+
const message = {
|
21536
|
+
...cursor.value
|
21537
|
+
};
|
21538
|
+
if (typeof message.content === 'string' && message.content) {
|
21539
|
+
try {
|
21540
|
+
message.content = this.decryptContent(message.content);
|
21541
|
+
} catch (error) {
|
21542
|
+
logger.error('解密消息内容失败', error);
|
21543
|
+
message.content = null;
|
21544
|
+
}
|
21545
|
+
}
|
21546
|
+
resolve(message);
|
21514
21547
|
} else {
|
21515
|
-
|
21516
|
-
}
|
21517
|
-
if (!cursor || count >= pageSize) {
|
21518
|
-
resolve({
|
21519
|
-
messages,
|
21520
|
-
nextCursor
|
21521
|
-
});
|
21548
|
+
resolve(null);
|
21522
21549
|
}
|
21523
21550
|
};
|
21524
21551
|
cursorRequest.onerror = event => {
|
21525
|
-
|
21552
|
+
logger.error('获取最新消息失败', event);
|
21553
|
+
resolve(null);
|
21526
21554
|
};
|
21527
21555
|
});
|
21528
21556
|
}
|
21529
|
-
async
|
21530
|
-
if (!this.db
|
21531
|
-
|
21557
|
+
async upsertMessage(message) {
|
21558
|
+
if (!this.db) {
|
21559
|
+
throw new Error('数据库未初始化');
|
21532
21560
|
}
|
21533
21561
|
return new Promise((resolve, reject) => {
|
21534
21562
|
const transaction = this.db.transaction(this.STORE_NAME, 'readwrite');
|
21535
21563
|
const store = transaction.objectStore(this.STORE_NAME);
|
21536
|
-
|
21537
|
-
|
21538
|
-
|
21539
|
-
|
21540
|
-
|
21541
|
-
|
21542
|
-
|
21543
|
-
|
21544
|
-
|
21545
|
-
}
|
21546
|
-
completed++;
|
21547
|
-
if (completed === messageUIds.length && !hasError) {
|
21548
|
-
resolve();
|
21549
|
-
}
|
21550
|
-
};
|
21551
|
-
getRequest.onerror = event => {
|
21552
|
-
if (!hasError) {
|
21553
|
-
hasError = true;
|
21554
|
-
reject(new Error('更新消息状态失败'));
|
21555
|
-
}
|
21556
|
-
};
|
21557
|
-
});
|
21558
|
-
transaction.oncomplete = () => {
|
21564
|
+
const messageToStore = {
|
21565
|
+
...message
|
21566
|
+
};
|
21567
|
+
if (messageToStore.content) {
|
21568
|
+
const encryptedContent = this.encryptContent(messageToStore.content);
|
21569
|
+
messageToStore.content = encryptedContent;
|
21570
|
+
}
|
21571
|
+
const request = store.put(messageToStore);
|
21572
|
+
request.onsuccess = () => {
|
21559
21573
|
resolve();
|
21560
21574
|
};
|
21561
|
-
|
21562
|
-
|
21575
|
+
request.onerror = event => {
|
21576
|
+
logger.error('更新/插入消息失败', event);
|
21577
|
+
reject(new Error('更新/插入消息失败'));
|
21563
21578
|
};
|
21564
21579
|
});
|
21565
21580
|
}
|
21566
|
-
async
|
21567
|
-
if (this.currentAppKey === appKey && this.currentUserId === userId) {
|
21568
|
-
return;
|
21569
|
-
}
|
21570
|
-
this.currentAppKey = appKey;
|
21571
|
-
this.currentUserId = userId;
|
21572
|
-
this.generateEncryptKey(appKey, userId);
|
21573
|
-
await this.checkAndResetDatabase();
|
21574
|
-
await this.initDatabase();
|
21575
|
-
}
|
21576
|
-
async getLatestMessage(conversation) {
|
21577
|
-
const dialogId = getFullDialogId(conversation);
|
21581
|
+
async getMessageById(messageId) {
|
21578
21582
|
if (!this.db) {
|
21579
21583
|
return null;
|
21580
21584
|
}
|
21581
21585
|
return new Promise((resolve, reject) => {
|
21582
21586
|
const transaction = this.db.transaction(this.STORE_NAME, 'readonly');
|
21583
21587
|
const store = transaction.objectStore(this.STORE_NAME);
|
21584
|
-
const
|
21585
|
-
|
21586
|
-
|
21587
|
-
|
21588
|
-
|
21589
|
-
|
21590
|
-
if (cursor) {
|
21591
|
-
const message = {
|
21592
|
-
...cursor.value
|
21588
|
+
const request = store.get(messageId);
|
21589
|
+
request.onsuccess = () => {
|
21590
|
+
const message = request.result;
|
21591
|
+
if (message) {
|
21592
|
+
const decryptedMessage = {
|
21593
|
+
...message
|
21593
21594
|
};
|
21594
|
-
if (typeof
|
21595
|
+
if (typeof decryptedMessage.content === 'string' && decryptedMessage.content) {
|
21595
21596
|
try {
|
21596
|
-
|
21597
|
+
decryptedMessage.content = this.decryptContent(decryptedMessage.content);
|
21597
21598
|
} catch (error) {
|
21598
|
-
|
21599
|
-
|
21599
|
+
logger.error('解密消息内容失败', error);
|
21600
|
+
decryptedMessage.content = null;
|
21600
21601
|
}
|
21601
21602
|
}
|
21602
|
-
resolve(
|
21603
|
+
resolve(decryptedMessage);
|
21603
21604
|
} else {
|
21604
21605
|
resolve(null);
|
21605
21606
|
}
|
21606
21607
|
};
|
21607
|
-
|
21608
|
-
|
21609
|
-
|
21608
|
+
request.onerror = event => {
|
21609
|
+
logger.error('查询消息失败', event);
|
21610
|
+
resolve(null);
|
21611
|
+
};
|
21612
|
+
});
|
21613
|
+
}
|
21614
|
+
async getMessageIdRange() {
|
21615
|
+
if (!this.db) {
|
21616
|
+
return null;
|
21617
|
+
}
|
21618
|
+
return new Promise((resolve, reject) => {
|
21619
|
+
const transaction = this.db.transaction(this.STORE_NAME, 'readonly');
|
21620
|
+
const store = transaction.objectStore(this.STORE_NAME);
|
21621
|
+
let newest = null;
|
21622
|
+
let oldest = null;
|
21623
|
+
const oldestRequest = store.openCursor();
|
21624
|
+
oldestRequest.onsuccess = event => {
|
21625
|
+
const cursor = event.target.result;
|
21626
|
+
if (cursor) {
|
21627
|
+
oldest = cursor.value.messageId;
|
21628
|
+
const newestRequest = store.openCursor(null, 'prev');
|
21629
|
+
newestRequest.onsuccess = event => {
|
21630
|
+
const cursor = event.target.result;
|
21631
|
+
if (cursor) {
|
21632
|
+
newest = cursor.value.messageId;
|
21633
|
+
if (newest && oldest) {
|
21634
|
+
resolve({
|
21635
|
+
newest,
|
21636
|
+
oldest
|
21637
|
+
});
|
21638
|
+
} else {
|
21639
|
+
resolve(null);
|
21640
|
+
}
|
21641
|
+
} else {
|
21642
|
+
resolve(null);
|
21643
|
+
}
|
21644
|
+
};
|
21645
|
+
} else {
|
21646
|
+
resolve(null);
|
21647
|
+
}
|
21648
|
+
};
|
21649
|
+
transaction.onerror = event => {
|
21650
|
+
resolve(null);
|
21610
21651
|
};
|
21611
21652
|
});
|
21612
21653
|
}
|
@@ -21723,16 +21764,29 @@
|
|
21723
21764
|
webSocketServer.close();
|
21724
21765
|
return Promise.resolve();
|
21725
21766
|
}
|
21726
|
-
setUserLogged() {
|
21767
|
+
async setUserLogged() {
|
21727
21768
|
ConversationManager$1.get().destroyed();
|
21728
21769
|
ConversationManager$1.create(this.options.appkey, accountStore.uid.toString(), this.watcher.conversationState);
|
21729
21770
|
MessageReceiptManager$1.create(this.options.appkey, accountStore.uid.toString());
|
21730
|
-
MessageCache$1.create(this.options.appkey, accountStore.uid.toString());
|
21731
21771
|
this.messageLoader?.stop();
|
21732
21772
|
this.messageLoader = new MessageLoader(this.watcher, this.options);
|
21733
21773
|
SentMessageStore.reset();
|
21734
21774
|
RecallMessageStore.reset();
|
21735
21775
|
DialogSecretKey$1.reset();
|
21776
|
+
MessageCache$1.create(this.options.appkey, accountStore.uid.toString());
|
21777
|
+
MessageCache$1.get().initDB().then(() => {
|
21778
|
+
return MessageCache$1.get().getMessageIdRange();
|
21779
|
+
}).then(result => {
|
21780
|
+
if (result) {
|
21781
|
+
const {
|
21782
|
+
oldest,
|
21783
|
+
newest
|
21784
|
+
} = result;
|
21785
|
+
setInitialMessageId(oldest, newest);
|
21786
|
+
} else {
|
21787
|
+
setInitialMessageId(10000, 10000);
|
21788
|
+
}
|
21789
|
+
});
|
21736
21790
|
if (this.getConnectionStatus() === exports.ConnectionStatus.CONNECTED) {
|
21737
21791
|
this.handleUserConnected();
|
21738
21792
|
}
|
@@ -28376,37 +28430,31 @@
|
|
28376
28430
|
var protobufjsExports = requireProtobufjs();
|
28377
28431
|
var protobuf = /*@__PURE__*/getDefaultExportFromCjs(protobufjsExports);
|
28378
28432
|
|
28379
|
-
const transSentAttrs2IReceivedMessage = (message, options, sentStatus = exports.SentStatus.SENDING) =>
|
28380
|
-
|
28381
|
-
|
28382
|
-
|
28383
|
-
|
28384
|
-
|
28385
|
-
|
28386
|
-
|
28387
|
-
|
28388
|
-
|
28389
|
-
|
28390
|
-
|
28391
|
-
|
28392
|
-
|
28393
|
-
|
28394
|
-
|
28395
|
-
|
28396
|
-
|
28397
|
-
|
28398
|
-
|
28399
|
-
|
28400
|
-
|
28401
|
-
|
28402
|
-
|
28403
|
-
|
28404
|
-
const time = getServerTime$1();
|
28405
|
-
if (UniqueLocalId < time) {
|
28406
|
-
UniqueLocalId = time;
|
28407
|
-
}
|
28408
|
-
return 230000000000000 + UniqueLocalId;
|
28409
|
-
}
|
28433
|
+
const transSentAttrs2IReceivedMessage = (message, options, sentStatus = exports.SentStatus.SENDING) => {
|
28434
|
+
const conversation = ConversationManager$1.get().get(options.conversation);
|
28435
|
+
return {
|
28436
|
+
conversationType: options.conversation.conversationType,
|
28437
|
+
targetId: options.conversation.targetId,
|
28438
|
+
senderUserId: options.senderUserId,
|
28439
|
+
messageDirection: exports.MessageDirection.SEND,
|
28440
|
+
isCounted: message.isCounted,
|
28441
|
+
isMentioned: false,
|
28442
|
+
content: deepClone(message.content),
|
28443
|
+
messageType: message.messageType,
|
28444
|
+
isOffLineMessage: false,
|
28445
|
+
isPersited: message.isPersited,
|
28446
|
+
messageId: options.messageId,
|
28447
|
+
messageUId: '0',
|
28448
|
+
sentTime: options.sentTime,
|
28449
|
+
sentStatus,
|
28450
|
+
receivedTime: options.sentTime,
|
28451
|
+
isStatusMessage: message.isStatusMessage,
|
28452
|
+
receivedStatus: exports.ReceivedStatus.IDLE,
|
28453
|
+
disableNotification: true,
|
28454
|
+
burnAfterReadingFlag: conversation?.burnAfterReadingFlag ?? false,
|
28455
|
+
burnAfterReadingTime: conversation?.burnAfterReadingTime ?? 0
|
28456
|
+
};
|
28457
|
+
};
|
28410
28458
|
|
28411
28459
|
const getBlobUrl = blob => {
|
28412
28460
|
const URL = window.URL || window.webkitURL;
|
@@ -28877,10 +28925,12 @@
|
|
28877
28925
|
const sentAttris = {
|
28878
28926
|
conversation,
|
28879
28927
|
senderUserId: accountStore.uid,
|
28880
|
-
messageId:
|
28928
|
+
messageId: 0,
|
28881
28929
|
sentTime: getServerTime$1().toString()
|
28882
28930
|
};
|
28883
28931
|
const receivedMessage = transSentAttrs2IReceivedMessage(recallCommandMessage, sentAttris, exports.SentStatus.SENT);
|
28932
|
+
receivedMessage.burnAfterReadingFlag = false;
|
28933
|
+
receivedMessage.burnAfterReadingTime = 0;
|
28884
28934
|
ConversationManager$1.get().setConversationCacheByMessage(receivedMessage);
|
28885
28935
|
return {
|
28886
28936
|
code: exports.ErrorCode.SUCCESS,
|
@@ -28929,12 +28979,16 @@
|
|
28929
28979
|
});
|
28930
28980
|
}
|
28931
28981
|
async function internal_sendMessage(conversation, message, options, uploadOptions) {
|
28932
|
-
const checkResult = beforeSend(conversation, message, options);
|
28982
|
+
const checkResult = await beforeSend(conversation, message, options);
|
28933
28983
|
if (checkResult.code !== exports.ErrorCode.SUCCESS || !checkResult.message || !checkResult.sentArgs) {
|
28934
28984
|
return {
|
28935
28985
|
code: checkResult.code
|
28936
28986
|
};
|
28937
28987
|
}
|
28988
|
+
{
|
28989
|
+
const receivedMessage = transSentAttrs2IReceivedMessage(checkResult.message, checkResult.sentArgs);
|
28990
|
+
await saveSentMessage(receivedMessage, checkResult.sentArgs);
|
28991
|
+
}
|
28938
28992
|
let {
|
28939
28993
|
message: sentMessage,
|
28940
28994
|
sentArgs
|
@@ -28943,30 +28997,30 @@
|
|
28943
28997
|
const uploadResult = await uploadOptions.task(sentMessage, uploadOptions.files);
|
28944
28998
|
sentMessage = uploadResult.message;
|
28945
28999
|
if (!uploadResult.finished) {
|
29000
|
+
const receivedMessage = transSentAttrs2IReceivedMessage(checkResult.message, checkResult.sentArgs, exports.SentStatus.FAILED);
|
29001
|
+
await saveSentMessage(receivedMessage, sentArgs);
|
28946
29002
|
return {
|
28947
29003
|
code: exports.ErrorCode.UPLOAD_FILE_FAILED,
|
28948
|
-
data:
|
29004
|
+
data: receivedMessage
|
28949
29005
|
};
|
28950
29006
|
}
|
28951
29007
|
}
|
28952
29008
|
return send(sentMessage, sentArgs);
|
28953
29009
|
}
|
28954
|
-
function beforeSend(conversation, message, options) {
|
28955
|
-
if (!LibLoader.loader || LibLoader.loader.getConnectionStatus() !== exports.ConnectionStatus.CONNECTED) {
|
28956
|
-
return {
|
28957
|
-
code: exports.ErrorCode.RC_NET_CHANNEL_INVALID
|
28958
|
-
};
|
28959
|
-
}
|
29010
|
+
async function beforeSend(conversation, message, options) {
|
28960
29011
|
const mediaAttribute = JSON.stringify(filterNullProperty(message.content));
|
28961
29012
|
if (getByteLength(mediaAttribute) > MAX_MESSAGE_CONTENT_BYTES) {
|
28962
29013
|
return {
|
28963
29014
|
code: exports.ErrorCode.RC_MSG_CONTENT_EXCEED_LIMIT
|
28964
29015
|
};
|
28965
29016
|
}
|
29017
|
+
if (message.isPersited) {
|
29018
|
+
await ConversationManager$1.get().loadConvsationsIfNotExist([conversation]);
|
29019
|
+
}
|
28966
29020
|
const sentArgs = {
|
28967
29021
|
conversation: conversation,
|
28968
29022
|
senderUserId: accountStore.uid,
|
28969
|
-
messageId:
|
29023
|
+
messageId: generateNewMessageId(),
|
28970
29024
|
sentTime: getMessageSentTime().toString(),
|
28971
29025
|
pushConfig: options?.pushConfig
|
28972
29026
|
};
|
@@ -28983,12 +29037,6 @@
|
|
28983
29037
|
async function send(message, sentArgs) {
|
28984
29038
|
const dialogId = getFullDialogId(sentArgs.conversation);
|
28985
29039
|
const receivedMessage = transSentAttrs2IReceivedMessage(message, sentArgs);
|
28986
|
-
if (message.isPersited) {
|
28987
|
-
await ConversationManager$1.get().loadConvsationsIfNotExist([sentArgs.conversation]);
|
28988
|
-
}
|
28989
|
-
const conversation = ConversationManager$1.get().get(sentArgs.conversation);
|
28990
|
-
receivedMessage.burnAfterReadingFlag = conversation?.burnAfterReadingFlag ?? false;
|
28991
|
-
receivedMessage.burnAfterReadingTime = conversation?.burnAfterReadingTime ?? 0;
|
28992
29040
|
const secretKey = await DialogSecretKey$1.getDialogAesKey(dialogId.toString());
|
28993
29041
|
if (!secretKey) {
|
28994
29042
|
receivedMessage.sentStatus = exports.SentStatus.FAILED;
|
@@ -29011,7 +29059,7 @@
|
|
29011
29059
|
const mediaEncryptedString = aes256Encrypt(mediaAttribute, secretKey);
|
29012
29060
|
SentMessageStore.addMessage(sentArgs.messageId);
|
29013
29061
|
const baseParams = {
|
29014
|
-
localId: Long.
|
29062
|
+
localId: Long.fromNumber(sentArgs.messageId),
|
29015
29063
|
mediaFlag: message.messageType !== MessageTypes.TEXT,
|
29016
29064
|
mediaConstructor: message.messageType,
|
29017
29065
|
msgPreContent: '',
|
@@ -29042,9 +29090,10 @@
|
|
29042
29090
|
receivedMessage.sentTime = response.data.msgSendTime.toString();
|
29043
29091
|
receivedMessage.messageUId = response.data.msgId.toString();
|
29044
29092
|
receivedMessage.sentStatus = exports.SentStatus.SENT;
|
29045
|
-
|
29093
|
+
await saveSentMessage(receivedMessage, sentArgs);
|
29046
29094
|
} else {
|
29047
29095
|
receivedMessage.sentStatus = exports.SentStatus.FAILED;
|
29096
|
+
await saveSentMessage(receivedMessage, sentArgs);
|
29048
29097
|
}
|
29049
29098
|
return {
|
29050
29099
|
code: response.code,
|
@@ -29060,6 +29109,18 @@
|
|
29060
29109
|
}
|
29061
29110
|
return UniqueSentTime;
|
29062
29111
|
}
|
29112
|
+
async function saveSentMessage(receivedMessage, options) {
|
29113
|
+
try {
|
29114
|
+
const cache = MessageCache$1.get();
|
29115
|
+
if (receivedMessage.isPersited && cache) {
|
29116
|
+
await cache.upsertMessage(receivedMessage);
|
29117
|
+
const latestMessage = await cache.getLatestMessage(options.conversation);
|
29118
|
+
ConversationManager$1.get().updateLatestMessage(options.conversation, latestMessage);
|
29119
|
+
}
|
29120
|
+
} catch (error) {
|
29121
|
+
logger.error('saveSentMessage -> ', error);
|
29122
|
+
}
|
29123
|
+
}
|
29063
29124
|
|
29064
29125
|
class IMClient extends EventEmitter {
|
29065
29126
|
options;
|
@@ -29236,7 +29297,6 @@
|
|
29236
29297
|
});
|
29237
29298
|
}
|
29238
29299
|
async getPreviousHistoryMessages(conversation, timestamp, count = 20) {
|
29239
|
-
debugger;
|
29240
29300
|
const cachedResult = await MessageCache$1.get().getPreviousMessages(conversation, timestamp ?? '0', count);
|
29241
29301
|
if (!timestamp && cachedResult.messages.length) {
|
29242
29302
|
ConversationManager$1.get().updateLatestMessage(conversation, cachedResult.messages[cachedResult.messages.length - 1]);
|
@@ -29260,8 +29320,13 @@
|
|
29260
29320
|
return remotesResult;
|
29261
29321
|
}
|
29262
29322
|
const remotesMessages = remotesResult.data.list;
|
29323
|
+
for (let i = remotesMessages.length - 1; i >= 0; i--) {
|
29324
|
+
const message = remotesMessages[i];
|
29325
|
+
if (!message.messageId) {
|
29326
|
+
message.messageId = generateOldMessageId();
|
29327
|
+
}
|
29328
|
+
}
|
29263
29329
|
if (!remotesTimestamp || remotesTimestamp == '0') {
|
29264
|
-
debugger;
|
29265
29330
|
ConversationManager$1.get().updateLatestMessage(conversation, remotesMessages[remotesMessages.length - 1]);
|
29266
29331
|
}
|
29267
29332
|
MessageCache$1.get().addMessages(remotesMessages, conversation, !remotesResult.data.hasMore);
|