fix local mention crash
This commit is contained in:
parent
14e8fcdd44
commit
e2be1cd897
3 changed files with 52 additions and 39 deletions
|
@ -298,59 +298,68 @@ void ChatView::appendMessage(QString message, QString sender, UserLevelFlags use
|
||||||
}
|
}
|
||||||
else if (index == mentionFirstIndex)
|
else if (index == mentionFirstIndex)
|
||||||
{
|
{
|
||||||
QMap<QString, UserListTWI *> userList = tabSupervisor->getUserListsTab()->getAllUsersList()->getUsers();
|
if (tabSupervisor->isALocalGame())
|
||||||
|
|
||||||
int firstSpace = message.indexOf(" ");
|
|
||||||
QString fullMentionUpToSpaceOrEnd = (firstSpace == -1) ? message.mid(1) : message.mid(1, firstSpace - 1);
|
|
||||||
QString mentionIntact = fullMentionUpToSpaceOrEnd;
|
|
||||||
|
|
||||||
while (fullMentionUpToSpaceOrEnd.size())
|
|
||||||
{
|
{
|
||||||
if (isFullMentionAValidUser(userList, fullMentionUpToSpaceOrEnd)) // Is there a user online named this?
|
cursor.insertText("@");
|
||||||
|
message = message.mid(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
QMap<QString, UserListTWI *> userList = tabSupervisor->getUserListsTab()->getAllUsersList()->getUsers();
|
||||||
|
|
||||||
|
int firstSpace = message.indexOf(" ");
|
||||||
|
QString fullMentionUpToSpaceOrEnd = (firstSpace == -1) ? message.mid(1) : message.mid(1, firstSpace - 1);
|
||||||
|
QString mentionIntact = fullMentionUpToSpaceOrEnd;
|
||||||
|
|
||||||
|
while (fullMentionUpToSpaceOrEnd.size())
|
||||||
{
|
{
|
||||||
if (userName.toLower() == fullMentionUpToSpaceOrEnd.toLower()) // Is this user you?
|
if (isFullMentionAValidUser(userList, fullMentionUpToSpaceOrEnd)) // Is there a user online named this?
|
||||||
{
|
{
|
||||||
// You have received a valid mention!!
|
if (userName.toLower() == fullMentionUpToSpaceOrEnd.toLower()) // Is this user you?
|
||||||
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);
|
// You have received a valid mention!!
|
||||||
showSystemPopup(ref);
|
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);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (fullMentionUpToSpaceOrEnd.right(1).indexOf(notALetterOrNumber) == -1)
|
||||||
|
{
|
||||||
|
cursor.insertText("@" + mentionIntact, defaultFormat);
|
||||||
|
message = message.mid(mentionIntact.size() + 1);
|
||||||
|
cursor.setCharFormat(defaultFormat);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
QString correctUserName = getNameFromUserList(userList, fullMentionUpToSpaceOrEnd);
|
fullMentionUpToSpaceOrEnd = fullMentionUpToSpaceOrEnd.left(fullMentionUpToSpaceOrEnd.size() - 1);
|
||||||
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);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else if (fullMentionUpToSpaceOrEnd.right(1).indexOf(notALetterOrNumber) == -1)
|
|
||||||
{
|
|
||||||
cursor.insertText("@" + mentionIntact, defaultFormat);
|
|
||||||
message = message.mid(mentionIntact.size() + 1);
|
|
||||||
cursor.setCharFormat(defaultFormat);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fullMentionUpToSpaceOrEnd = fullMentionUpToSpaceOrEnd.left(fullMentionUpToSpaceOrEnd.size() - 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
message = message.mid(1); // Not certain when this would ever be reached, but just incase
|
message = message.mid(1); // Not certain when this would ever be reached, but just incase lets skip the character
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -184,6 +184,7 @@ int TabSupervisor::myAddTab(Tab *tab)
|
||||||
|
|
||||||
void TabSupervisor::start(const ServerInfo_User &_userInfo)
|
void TabSupervisor::start(const ServerInfo_User &_userInfo)
|
||||||
{
|
{
|
||||||
|
isLocalGame = false;
|
||||||
userInfo = new ServerInfo_User(_userInfo);
|
userInfo = new ServerInfo_User(_userInfo);
|
||||||
|
|
||||||
tabServer = new TabServer(this, client);
|
tabServer = new TabServer(this, client);
|
||||||
|
@ -227,6 +228,7 @@ void TabSupervisor::startLocal(const QList<AbstractClient *> &_clients)
|
||||||
tabDeckStorage = 0;
|
tabDeckStorage = 0;
|
||||||
tabReplays = 0;
|
tabReplays = 0;
|
||||||
tabAdmin = 0;
|
tabAdmin = 0;
|
||||||
|
isLocalGame = true;
|
||||||
userInfo = new ServerInfo_User;
|
userInfo = new ServerInfo_User;
|
||||||
localClients = _clients;
|
localClients = _clients;
|
||||||
for (int i = 0; i < localClients.size(); ++i)
|
for (int i = 0; i < localClients.size(); ++i)
|
||||||
|
|
|
@ -60,6 +60,7 @@ private:
|
||||||
void addCloseButtonToTab(Tab *tab, int tabIndex);
|
void addCloseButtonToTab(Tab *tab, int tabIndex);
|
||||||
QString sanitizeTabName(QString dirty) const;
|
QString sanitizeTabName(QString dirty) const;
|
||||||
QString sanitizeHtml(QString dirty) const;
|
QString sanitizeHtml(QString dirty) const;
|
||||||
|
bool isLocalGame;
|
||||||
public:
|
public:
|
||||||
TabSupervisor(AbstractClient *_client, QWidget *parent = 0);
|
TabSupervisor(AbstractClient *_client, QWidget *parent = 0);
|
||||||
~TabSupervisor();
|
~TabSupervisor();
|
||||||
|
@ -67,6 +68,7 @@ public:
|
||||||
void start(const ServerInfo_User &userInfo);
|
void start(const ServerInfo_User &userInfo);
|
||||||
void startLocal(const QList<AbstractClient *> &_clients);
|
void startLocal(const QList<AbstractClient *> &_clients);
|
||||||
void stop();
|
void stop();
|
||||||
|
bool isALocalGame() const { return isLocalGame; }
|
||||||
int getGameCount() const { return gameTabs.size(); }
|
int getGameCount() const { return gameTabs.size(); }
|
||||||
TabUserLists *getUserListsTab() const { return tabUserLists; }
|
TabUserLists *getUserListsTab() const { return tabUserLists; }
|
||||||
ServerInfo_User *getUserInfo() const { return userInfo; }
|
ServerInfo_User *getUserInfo() const { return userInfo; }
|
||||||
|
|
Loading…
Reference in a new issue