Commit 87ad0f2f by Sixong.Zhu

update

parent d30772c1
Showing with 97 additions and 26 deletions
...@@ -349,9 +349,10 @@ export default { ...@@ -349,9 +349,10 @@ export default {
} else { } else {
arr.push(eid); arr.push(eid);
} }
setTimeoutId[eid] = setTimeout(() => { setTimeoutId[eid] = setTimeout(
arr.splice(arr.indexOf(eid), 1); () => arr.splice(arr.indexOf(eid), 1),
}, 4000); 4000
);
}; };
})(), })(),
[ChatStore.MUTATION_CLEAR_CURRENT_CHAT_INPUTING]: (state) => { [ChatStore.MUTATION_CLEAR_CURRENT_CHAT_INPUTING]: (state) => {
...@@ -477,21 +478,31 @@ export default { ...@@ -477,21 +478,31 @@ export default {
items.forEach((i) => (sum += i.unread_msg_count)); items.forEach((i) => (sum += i.unread_msg_count));
state[ChatStore.STATE_CURRENT_UNREAD_MESSAGE_COUNT] = sum; state[ChatStore.STATE_CURRENT_UNREAD_MESSAGE_COUNT] = sum;
}, },
async [ChatStore.ACTION_GET_CHAT_MESSAGES]({ state, commit }) { async [ChatStore.ACTION_GET_CHAT_MESSAGES]({ state, commit, getters }) {
const chatId = state[ChatStore.STATE_CHAT_CURRENT_CHAT_ID]; const chatId = state[ChatStore.STATE_CHAT_CURRENT_CHAT_ID];
const chat = getters[ChatStore.GETTER_CURRENT_CURRENT_CHAT];
const isMember = state[ChatStore.STATE_CHAT_CURRENT_IS_CHAT_MEMBER];
if (chatId == null) return; if (chatId == null) return;
let data: Message[] = []; let data: Message[] = [];
const getMessages = async () => {
const o = {
model: chat.model_name,
obj: chat.obj_id,
isMember,
};
data = await xim.queryLastPageMsg(chatType, chatId, 20, o);
};
if (isMember) {
const cache = await dbController.getChatMessages(chatId); const cache = await dbController.getChatMessages(chatId);
if (cache && cache.length) { if (cache && cache.length) {
data = cache; data = cache;
} else { } else {
data = await xim.queryLastPageMsg( await getMessages();
chatType,
chatId,
20,
!state[ChatStore.STATE_CHAT_CURRENT_IS_CHAT_MEMBER]
);
} }
} else {
await getMessages();
}
try { try {
commit(ChatStore.MUTATION_PUSH_CHAT_MSG_HISTORY, data); commit(ChatStore.MUTATION_PUSH_CHAT_MSG_HISTORY, data);
dbController.saveChatMessages(chatId, data); dbController.saveChatMessages(chatId, data);
...@@ -504,34 +515,46 @@ export default { ...@@ -504,34 +515,46 @@ export default {
} }
}, },
async [ChatStore.ACTION_GET_CHAT_MESSAGES_BEFORE_SPECIFIC_ID]( async [ChatStore.ACTION_GET_CHAT_MESSAGES_BEFORE_SPECIFIC_ID](
{ state, commit }, { state, commit, getters },
msgId: Parameters<ChatStore.ACTION_GET_CHAT_MESSAGES_BEFORE_SPECIFIC_ID>[0] msgId: Parameters<ChatStore.ACTION_GET_CHAT_MESSAGES_BEFORE_SPECIFIC_ID>[0]
) { ) {
const chatId = state[ChatStore.STATE_CHAT_CURRENT_CHAT_ID]; const chatId = state[ChatStore.STATE_CHAT_CURRENT_CHAT_ID];
if (chatId == null) return; if (chatId == null) return;
const chat = getters[ChatStore.GETTER_CURRENT_CURRENT_CHAT];
const o = {
model: chat.model_name,
obj: chat.obj_id,
isMember: state[ChatStore.STATE_CHAT_CURRENT_IS_CHAT_MEMBER],
};
const data = await xim.queryPrevPageMsg( const data = await xim.queryPrevPageMsg(
chatType, chatType,
chatId, chatId,
msgId, msgId,
10, 10,
!state[ChatStore.STATE_CHAT_CURRENT_IS_CHAT_MEMBER] o
); );
commit(ChatStore.MUTATION_UNSHIFT_CHAT_MSG_HISTORY, data); commit(ChatStore.MUTATION_UNSHIFT_CHAT_MSG_HISTORY, data);
dbController.appendMessages(chatId, data); dbController.appendMessages(chatId, data);
return data; return data;
}, },
async [ChatStore.ACTION_GET_CHAT_MESSAGES_AFTER_SPECIFIC_ID]( async [ChatStore.ACTION_GET_CHAT_MESSAGES_AFTER_SPECIFIC_ID](
{ state, commit }, { state, commit, getters },
msgId: Parameters<ChatStore.ACTION_GET_CHAT_MESSAGES_AFTER_SPECIFIC_ID>[0] msgId: Parameters<ChatStore.ACTION_GET_CHAT_MESSAGES_AFTER_SPECIFIC_ID>[0]
) { ) {
const chatId = state[ChatStore.STATE_CHAT_CURRENT_CHAT_ID]; const chatId = state[ChatStore.STATE_CHAT_CURRENT_CHAT_ID];
if (chatId == null) return; if (chatId == null) return;
const chat = getters[ChatStore.GETTER_CURRENT_CURRENT_CHAT];
const o = {
model: chat.model_name,
obj: chat.obj_id,
isMember: state[ChatStore.STATE_CHAT_CURRENT_IS_CHAT_MEMBER],
};
const data = await xim.queryNextPageMsg( const data = await xim.queryNextPageMsg(
chatType, chatType,
chatId, chatId,
msgId, msgId,
10, 10,
!state[ChatStore.STATE_CHAT_CURRENT_IS_CHAT_MEMBER] o
); );
commit(ChatStore.MUTATION_PUSH_CHAT_MSG_HISTORY, data); commit(ChatStore.MUTATION_PUSH_CHAT_MSG_HISTORY, data);
dbController.appendMessages(chatId, data); dbController.appendMessages(chatId, data);
...@@ -618,7 +641,12 @@ export default { ...@@ -618,7 +641,12 @@ export default {
dispatch(ChatStore.ACTION_GET_MY_CHAT_LIST); dispatch(ChatStore.ACTION_GET_MY_CHAT_LIST);
return chatId; return chatId;
}, },
async [ChatStore.ACTION_REGISTER_EVENT]({ dispatch, commit, state }) { async [ChatStore.ACTION_REGISTER_EVENT]({
dispatch,
commit,
state,
getters,
}) {
const chatId = state[ChatStore.STATE_CHAT_CURRENT_CHAT_ID]; const chatId = state[ChatStore.STATE_CHAT_CURRENT_CHAT_ID];
const onNewMsg = (e: Message) => { const onNewMsg = (e: Message) => {
if (e.chat_id === chatId) { if (e.chat_id === chatId) {
...@@ -637,11 +665,21 @@ export default { ...@@ -637,11 +665,21 @@ export default {
if (msgs == null) return; if (msgs == null) return;
const oldestMsgId = msgs[0].id - 1; const oldestMsgId = msgs[0].id - 1;
const lastMsgId = msgs[msgs.length - 1].id + 1; const lastMsgId = msgs[msgs.length - 1].id + 1;
const chat = getters[ChatStore.GETTER_CURRENT_CURRENT_CHAT];
const o = {
model: chat.model_name,
obj: chat.obj_id,
isMember:
state[ChatStore.STATE_CHAT_CURRENT_IS_CHAT_MEMBER],
};
const freshMsgs = await xim.queryMsgs( const freshMsgs = await xim.queryMsgs(
chatType, chatType,
chatId, chatId,
oldestMsgId < 1 ? 1 : oldestMsgId, oldestMsgId < 1 ? 1 : oldestMsgId,
lastMsgId lastMsgId,
20,
true,
o
); );
commit(ChatStore.MUTATION_CLEAR_CHAT_MSG_HISTORY); commit(ChatStore.MUTATION_CLEAR_CHAT_MSG_HISTORY);
commit( commit(
......
...@@ -165,12 +165,16 @@ export class Xim { ...@@ -165,12 +165,16 @@ export class Xim {
lid = 0, lid = 0,
rid = 0, rid = 0,
limit = DefaultMsgPageSize, limit = DefaultMsgPageSize,
desc = true desc: boolean,
p: { isMember: boolean; model: string; obj: string }
): Promise<Message[]> { ): Promise<Message[]> {
this.checkConnected(); this.checkConnected();
if (this.client == null) { if (this.client == null) {
throw new Error("client shouldn't undefined"); throw new Error("client shouldn't undefined");
} }
if (!p.isMember && p.model && p.obj) {
return this.queryMessageWhenIsNotMember(p, limit, lid, rid, desc);
}
const res = await this.client.fetchChatMsgs(chatType, chatId, { const res = await this.client.fetchChatMsgs(chatType, chatId, {
lid, lid,
rid, rid,
...@@ -180,6 +184,25 @@ export class Xim { ...@@ -180,6 +184,25 @@ export class Xim {
return res.args[0]; return res.args[0];
} }
private queryMessageWhenIsNotMember(
p: { isMember: boolean; model: string; obj: string },
limit: number,
lid: number,
rid: number,
desc: boolean
) {
return chat
.getSdk()
.getAxios()
.get(
`/general/xim/model/${p.model}/${
p.obj
}/msgs?lid=${lid}&rid=${rid}&limit=${limit}&desc=${
desc ? 0 : 1
}`
);
}
private setMessagesRead(chatId: number, msg: Message[]) { private setMessagesRead(chatId: number, msg: Message[]) {
if (msg.length === 0) return; if (msg.length === 0) return;
return this.setRead(chatId, msg[0].id, msg[msg.length - 1].id); return this.setRead(chatId, msg[0].id, msg[msg.length - 1].id);
...@@ -190,10 +213,18 @@ export class Xim { ...@@ -190,10 +213,18 @@ export class Xim {
chatType: string, chatType: string,
chatId: number, chatId: number,
limit: number, limit: number,
notToRead?: boolean p: { isMember: boolean; model: string; obj: string }
) { ) {
const data = await this.queryMsgs(chatType, chatId, 0, 0, limit, true); const data = await this.queryMsgs(
if (!notToRead) { chatType,
chatId,
0,
0,
limit,
true,
p
);
if (p && p.isMember) {
this.setMessagesRead(chatId, data); this.setMessagesRead(chatId, data);
} }
return data; return data;
...@@ -205,7 +236,7 @@ export class Xim { ...@@ -205,7 +236,7 @@ export class Xim {
chatId: number, chatId: number,
msgId: number, msgId: number,
limit: number, limit: number,
notToRead?: boolean p: { isMember: boolean; model: string; obj: string }
) { ) {
const data = await this.queryMsgs( const data = await this.queryMsgs(
chatType, chatType,
...@@ -213,9 +244,10 @@ export class Xim { ...@@ -213,9 +244,10 @@ export class Xim {
0, 0,
msgId, msgId,
limit, limit,
true true,
p
); );
if (!notToRead) { if (p && p.isMember) {
this.setMessagesRead(chatId, data); this.setMessagesRead(chatId, data);
} }
return data; return data;
...@@ -227,7 +259,7 @@ export class Xim { ...@@ -227,7 +259,7 @@ export class Xim {
chatId: number, chatId: number,
msgId: number, msgId: number,
limit: number, limit: number,
notToRead?: boolean p: { isMember: boolean; model: string; obj: string }
) { ) {
const data = await this.queryMsgs( const data = await this.queryMsgs(
chatType, chatType,
...@@ -235,9 +267,10 @@ export class Xim { ...@@ -235,9 +267,10 @@ export class Xim {
msgId, msgId,
0, 0,
limit, limit,
false false,
p
); );
if (!notToRead) { if (p && p.isMember) {
this.setMessagesRead(chatId, data); this.setMessagesRead(chatId, data);
} }
return data; return data;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment