import React, { Component } from 'react'; import { inject, observer } from 'mobx-react'; import { ipcRenderer, remote } from 'electron'; import clazz from 'classname'; import moment from 'moment'; import axios from 'axios'; import classes from './style.css'; import Avatar from 'components/Avatar'; import helper from 'utils/helper'; import { parser as emojiParse } from 'utils/emoji'; import { on, off } from 'utils/event'; @inject(stores => ({ user: stores.chat.user, sticky: stores.chat.sticky, empty: stores.chat.empty, removeChat: stores.chat.removeChat, messages: stores.chat.messages, loading: stores.session.loading, reset: () => { stores.chat.user = false; }, isFriend: (id) => { var user = stores.contacts.memberList.find(e => e.UserName === id) || {}; return helper.isContact(user); }, showUserinfo: async(isme, user) => { var caniremove = helper.isChatRoomOwner(stores.chat.user); if (isme) { user = stores.session.user.User; } else { stores.contacts.memberList.find(e => { // Try to find contact in your contacts if (e.UserName === user.UserName) { return (user = e); } }); } stores.userinfo.toggle(true, user, caniremove); }, getMessage: (messageid) => { var list = stores.chat.messages.get(stores.chat.user.UserName); return list.data.find(e => e.MsgId === messageid); }, deleteMessage: (messageid) => { stores.chat.deleteMessage(stores.chat.user.UserName, messageid); }, showMembers: (user) => { if (helper.isChatRoom(user.UserName)) { stores.members.toggle(true, user); } }, showContact: (userid) => { var user = stores.contacts.memberList.find(e => e.UserName === userid); stores.userinfo.toggle(true, user); }, showForward: (message) => stores.forward.toggle(true, message), parseMessage: (message, from) => { var isChatRoom = message.isme ? false : helper.isChatRoom(message.FromUserName); var user = from; message = Object.assign({}, message); if (isChatRoom) { let matchs = message.Content.split(':
'); // Get the newest chat room infomation from = stores.contacts.memberList.find(e => from.UserName === e.UserName); user = from.MemberList.find(e => e.UserName === matchs[0]); message.Content = matchs[1]; } // If user is null, that mean user has been removed from this chat room return { message, user }; }, showAddFriend: (user) => stores.addfriend.toggle(true, user), recallMessage: stores.chat.recallMessage, downloads: stores.settings.downloads, rememberConversation: stores.settings.rememberConversation, showConversation: stores.chat.showConversation, toggleConversation: stores.chat.toggleConversation, })) @observer export default class ChatContent extends Component { getMessageContent(message) { var uploading = message.uploading; switch (message.MsgType) { case 1: if (message.location) { return ` `; } // Text message return emojiParse(message.Content); case 3: // Image let image = message.image; if (uploading) { return `
`; } return ``; case 34: /* eslint-disable */ // Voice let voice = message.voice; let times = message.VoiceLength; let width = 40 + 7 * (times / 2000); let seconds = 0; /* eslint-enable */ if (times < 60 * 1000) { seconds = Math.ceil(times / 1000); } return `
${seconds || '60+'}"
`; case 47: case 49 + 8: // External emoji let emoji = message.emoji; if (emoji) { if (uploading) { return `
`; } return ``; } return `
不支持的emoji,请在其他客户端查看
`; case 42: // Contact Card let contact = message.contact; let isFriend = this.props.isFriend(contact.UserName); let html = `

${contact.name}

${contact.address}

`; if (!isFriend) { html += ` `; } html += '
'; return html; case 43: // Video message let video = message.video; if (uploading) { return `
`; } if (!video) { console.error('Invalid video message: %o', message); return ` 收到无法解析的视频消息,请参阅控制台输出 `; } return `