let Disp = require("./Dispatcher.js"); let msgPackager = require("./msgpackager.js"); let msgType = require("./msgtype.js"); let msgStorage = new Disp(); let disp = require("./broadcast.js"); let WebIM = wx.WebIM = require("./WebIM")["default"]; msgStorage.saveReceiveMsg = function (receiveMsg, type) { console.info('receiveMsg', receiveMsg); let users = [receiveMsg.from, receiveMsg.to]; let sendableMsg; WebIM.conn.fetchUserInfoById(users).then((res) => { console.log(res); let fromInfo = {}; let toInfo = {}; for (let k in res.data) { if (k == receiveMsg.from) { fromInfo = res.data[k]; } else { toInfo = res.data[k]; } } console.info('from and to ', fromInfo, toInfo); if (type == msgType.IMAGE) { sendableMsg = { id: receiveMsg.id, type: type, body: { id: receiveMsg.id, from: receiveMsg.from, fromInfo: fromInfo, to: receiveMsg.to, toInfo: toInfo, type: receiveMsg.type, ext: receiveMsg.ext, chatType: receiveMsg.type, toJid: "", body: { type: type, url: receiveMsg.url, filename: receiveMsg.filename, filetype: receiveMsg.filetype, size: { width: receiveMsg.width, height: receiveMsg.height }, }, }, }; } else if (type == msgType.TEXT || type == msgType.EMOJI) { sendableMsg = { id: receiveMsg.id, type: type, body: { id: receiveMsg.id, from: receiveMsg.from, fromInfo: fromInfo, to: receiveMsg.to, toInfo: toInfo, type: receiveMsg.type, ext: receiveMsg.ext, chatType: receiveMsg.type, toJid: "", body: { type: type, msg: receiveMsg.data, }, }, value: receiveMsg.data }; } else if (type == msgType.FILE) { sendableMsg = { id: receiveMsg.id, type: type, body: { id: receiveMsg.id, length: receiveMsg.file_length, from: receiveMsg.from, to: receiveMsg.to, type: receiveMsg.type, ext: receiveMsg.ext, chatType: receiveMsg.type, toJid: "", body: { type: type, url: receiveMsg.url, filename: receiveMsg.filename, msg: "当前不支持此格式消息展示", }, }, value: receiveMsg.data }; } else if (type == msgType.AUDIO) { sendableMsg = { id: receiveMsg.id, type: type, accessToken: receiveMsg.token || receiveMsg.accessToken, body: { id: receiveMsg.id, length: receiveMsg.length, from: receiveMsg.from, to: receiveMsg.to, type: receiveMsg.type, ext: receiveMsg.ext, chatType: receiveMsg.type, toJid: "", body: { type: type, url: receiveMsg.url, filename: receiveMsg.filename, filetype: receiveMsg.filetype, from: receiveMsg.from, to: receiveMsg.to }, }, }; } else if (type == msgType.VIDEO) { sendableMsg = { id: receiveMsg.id, type: type, accessToken: receiveMsg.token || receiveMsg.accessToken, body: { id: receiveMsg.id, length: receiveMsg.length, from: receiveMsg.from, to: receiveMsg.to, type: receiveMsg.type, ext: receiveMsg.ext, chatType: receiveMsg.type, toJid: "", body: { type: type, url: receiveMsg.url, filename: receiveMsg.filename, filetype: receiveMsg.filetype, from: receiveMsg.from, to: receiveMsg.to }, }, }; } else { return; } this.saveMsg(sendableMsg, type, receiveMsg); }); }; msgStorage.saveMsg = function (sendableMsg, type, receiveMsg) { console.log('sendableMsgsendableMsg', sendableMsg) let me = this; let myName = wx.getStorageSync("myUsername"); let sessionKey; // 仅用作群聊收消息,发消息没有 receiveMsg if (receiveMsg && receiveMsg.type == "groupchat") { sessionKey = receiveMsg.to + myName; } // 群聊发 & 单发 & 单收 else { sessionKey = sendableMsg.body.from == myName ? sendableMsg.body.to + myName : sendableMsg.body.from + myName; } let curChatMsg = wx.getStorageSync(sessionKey) || []; let renderableMsg = msgPackager(sendableMsg, type, myName); if (type == msgType.AUDIO) { renderableMsg.msg.length = sendableMsg.body.length; renderableMsg.msg.token = sendableMsg.accessToken; } curChatMsg.push(renderableMsg); //console.log('renderableMsgrenderableMsg', renderableMsg) if (type == msgType.VIDEO) { renderableMsg.msg.token = sendableMsg.accessToken; //如果是音频则请求服务器转码 // wx.downloadFile({ // url: sendableMsg.body.body.url, // header: { // "X-Requested-With": "XMLHttpRequest", // Accept: "audio/mp3", // Authorization: "Bearer " + sendableMsg.accessToken // }, // success(res){ // // wx.playVoice({ // // filePath: res.tempFilePath // // }); // renderableMsg.msg.url = res.tempFilePath; // save(); // }, // fail(e){ // console.log("downloadFile failed", e); // } // }); } // else{ // save(); // } save(); function save() { wx.setStorage({ key: sessionKey, data: curChatMsg, success() { if (type == msgType.AUDIO || type == msgType.VIDEO) { disp.fire('em.chat.audio.fileLoaded'); } me.fire("newChatMsg", renderableMsg, type, curChatMsg, sessionKey); } }); } }; module.exports = msgStorage;