void TabRoom::processRoomSayEvent(const Event_RoomSay &event) { QString senderName = QString::fromStdString(event.name()); QString message = QString::fromStdString(event.message()); if (tabSupervisor->getUserListsTab()->getIgnoreList()->getUsers().contains(senderName)) return; UserListTWI *twi = userList->getUsers().value(senderName); UserLevelFlags userLevel; if (twi) { userLevel = UserLevelFlags(twi->getUserInfo().user_level()); if (settingsCache->getIgnoreUnregisteredUsers() && !userLevel.testFlag(ServerInfo_User::IsRegistered)) return; } if (event.message_type() == Event_RoomSay::ChatHistory && !settingsCache->getRoomHistory()) return; if (event.message_type() == Event_RoomSay::ChatHistory) message = "[" + QString(QDateTime::fromMSecsSinceEpoch(event.time_of()).toLocalTime().toString("d MMM yyyy HH:mm:ss")) + "] " + message; chatView->appendMessage(message, event.message_type(), senderName, userLevel, true); emit userEvent(false); }
void TabRoom::processRoomSayEvent(const Event_RoomSay &event) { QString senderName = QString::fromStdString(event.name()); if (tabSupervisor->getUserListsTab()->getIgnoreList()->getUsers().contains(senderName)) return; UserListTWI *twi = userList->getUsers().value(senderName); UserLevelFlags userLevel; if (twi) { userLevel = UserLevelFlags(twi->getUserInfo().user_level()); if (settingsCache->getIgnoreUnregisteredUsers() && !userLevel.testFlag(ServerInfo_User::IsRegistered)) return; } chatView->appendMessage(QString::fromStdString(event.message()), senderName, userLevel, true); emit userEvent(false); }
void ChatView::checkMention(QTextCursor &cursor, QString &message, QString &sender, UserLevelFlags userLevel) { const QRegExp notALetterOrNumber = QRegExp("[^a-zA-Z0-9]"); int firstSpace = message.indexOf(' '); QString fullMentionUpToSpaceOrEnd = (firstSpace == -1) ? message.mid(1) : message.mid(1, firstSpace - 1); QString mentionIntact = fullMentionUpToSpaceOrEnd; QMap<QString, UserListTWI *> userList = tabSupervisor->getUserListsTab()->getAllUsersList()->getUsers(); while (fullMentionUpToSpaceOrEnd.size()) { if (isFullMentionAValidUser(userList, fullMentionUpToSpaceOrEnd)) // Is there a user online named this? { if (userName.toLower() == fullMentionUpToSpaceOrEnd.toLower()) // Is this user you? { // You have received a valid mention!! soundEngine->playSound("chat_mention"); mentionFormat.setBackground(QBrush(getCustomMentionColor())); mentionFormat.setForeground(settingsCache->getChatMentionForeground() ? QBrush(Qt::white) : QBrush(Qt::black)); cursor.insertText(mention, mentionFormat); message = message.mid(mention.size()); QApplication::alert(this); if (settingsCache->getShowMentionPopup() && shouldShowSystemPopup()) { QString ref = sender.left(sender.length() - 2); showSystemPopup(ref); } } else { QString correctUserName = getNameFromUserList(userList, fullMentionUpToSpaceOrEnd); UserListTWI *vlu = userList.value(correctUserName); mentionFormatOtherUser.setAnchorHref("user://" + QString::number(vlu->getUserInfo().user_level()) + "_" + correctUserName); cursor.insertText("@" + correctUserName, mentionFormatOtherUser); message = message.mid(correctUserName.size() + 1); } cursor.setCharFormat(defaultFormat); return; } if (isModeratorSendingGlobal(userLevel, fullMentionUpToSpaceOrEnd)) { // Moderator Sending Global Message soundEngine->playSound("all_mention"); mentionFormat.setBackground(QBrush(getCustomMentionColor())); mentionFormat.setForeground(settingsCache->getChatMentionForeground() ? QBrush(Qt::white) : QBrush(Qt::black)); cursor.insertText("@" + fullMentionUpToSpaceOrEnd, mentionFormat); message = message.mid(fullMentionUpToSpaceOrEnd.size() + 1); QApplication::alert(this); if (settingsCache->getShowMentionPopup() && shouldShowSystemPopup()) { QString ref = sender.left(sender.length() - 2); showSystemPopup(ref); } cursor.setCharFormat(defaultFormat); return; } if (fullMentionUpToSpaceOrEnd.right(1).indexOf(notALetterOrNumber) == -1 || fullMentionUpToSpaceOrEnd.size() < 2) { cursor.insertText("@" + mentionIntact, defaultFormat); message = message.mid(mentionIntact.size() + 1); cursor.setCharFormat(defaultFormat); return; } fullMentionUpToSpaceOrEnd.chop(1); } // no valid mention found checkWord(cursor, message); }