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); }
QPixmap UserLevelPixmapGenerator::generatePixmap(int height, UserLevelFlags userLevel, bool isBuddy) { int key = height * 10000 + (int) userLevel + (int) isBuddy; if (pmCache.contains(key)) return pmCache.value(key); QString levelString; if (userLevel.testFlag(ServerInfo_User::IsAdmin)) levelString = "admin"; else if (userLevel.testFlag(ServerInfo_User::IsModerator)) levelString = "moderator"; else if (userLevel.testFlag(ServerInfo_User::IsRegistered)) levelString = "registered"; else levelString = "normal"; if (isBuddy) levelString.append("_buddy"); QPixmap pixmap = QPixmap("theme:userlevels/" + levelString).scaled(height, height, Qt::KeepAspectRatio, Qt::SmoothTransformation); pmCache.insert(key, pixmap); return pixmap; }
void UserInfoBox::updateInfo(const ServerInfo_User &user) { const UserLevelFlags userLevel(user.user_level()); QPixmap avatarPixmap; const std::string bmp = user.avatar_bmp(); if (!avatarPixmap.loadFromData((const uchar *) bmp.data(), bmp.size())) avatarPixmap = UserLevelPixmapGenerator::generatePixmap(64, userLevel, false); avatarLabel.setPixmap(avatarPixmap.scaled(avatarLabel.size(), Qt::KeepAspectRatio, Qt::SmoothTransformation)); nameLabel.setText(QString::fromStdString(user.name())); realNameLabel2.setText(QString::fromStdString(user.real_name())); QString country = QString::fromStdString(user.country()); if (country.length() != 0) { countryLabel2.setPixmap(CountryPixmapGenerator::generatePixmap(15, country)); countryLabel3.setText(QString("(%1)").arg(country.toUpper())); } else { countryLabel2.setText(""); countryLabel3.setText(""); } userLevelLabel2.setPixmap(UserLevelPixmapGenerator::generatePixmap(15, userLevel, false)); QString userLevelText; if (userLevel.testFlag(ServerInfo_User::IsAdmin)) userLevelText = tr("Administrator"); else if (userLevel.testFlag(ServerInfo_User::IsModerator)) userLevelText = tr("Moderator"); else if (userLevel.testFlag(ServerInfo_User::IsRegistered)) userLevelText = tr("Registered user"); else userLevelText = tr("Unregistered user"); userLevelLabel3.setText(userLevelText); QString accountAgeString = tr("Unregistered user"); if (userLevel.testFlag(ServerInfo_User::IsAdmin) || userLevel.testFlag(ServerInfo_User::IsModerator) || userLevel.testFlag(ServerInfo_User::IsRegistered)) { if (user.accountage_secs() == 0) accountAgeString = tr("Unknown"); else { qint64 seconds = user.accountage_secs(); qint64 minutes = seconds / SIXTY; qint64 hours = minutes / SIXTY; qint64 days = hours / HOURS_IN_A_DAY; qint64 years = days / DAYS_IN_A_YEAR; qint64 daysMinusYears = days - (years * DAYS_IN_A_YEAR); accountAgeString = ""; if (years >= 1) { accountAgeString = QString::number(years); accountAgeString.append(" "); accountAgeString.append(years == 1 ? tr("Year") : tr("Years")); accountAgeString.append(" "); } accountAgeString.append(QString::number(daysMinusYears)); accountAgeString.append(" "); accountAgeString.append(days == 1 ? tr("Day") : tr("Days")); } } accountAgeLabel2.setText(accountAgeString); }
void UserContextMenu::showContextMenu(const QPoint &pos, const QString &userName, UserLevelFlags userLevel, bool online, int playerId) { aUserName->setText(userName); QMenu *menu = new QMenu(static_cast<QWidget *>(parent())); menu->addAction(aUserName); menu->addSeparator(); menu->addAction(aDetails); menu->addAction(aShowGames); menu->addAction(aChat); if (userLevel.testFlag(ServerInfo_User::IsRegistered) && (tabSupervisor->getUserInfo()->user_level() & ServerInfo_User::IsRegistered)) { menu->addSeparator(); if (tabSupervisor->getUserListsTab()->getBuddyList()->getUsers().contains(userName)) menu->addAction(aRemoveFromBuddyList); else menu->addAction(aAddToBuddyList); if (tabSupervisor->getUserListsTab()->getIgnoreList()->getUsers().contains(userName)) menu->addAction(aRemoveFromIgnoreList); else menu->addAction(aAddToIgnoreList); } if (game && (game->isHost() || !tabSupervisor->getAdminLocked())) { menu->addSeparator(); menu->addAction(aKick); } if (!tabSupervisor->getAdminLocked()) { menu->addSeparator(); menu->addAction(aBan); } bool anotherUser = userName != QString::fromStdString(tabSupervisor->getUserInfo()->name()); aDetails->setEnabled(online); aChat->setEnabled(anotherUser && online); aShowGames->setEnabled(anotherUser); aAddToBuddyList->setEnabled(anotherUser); aRemoveFromBuddyList->setEnabled(anotherUser); aAddToIgnoreList->setEnabled(anotherUser); aRemoveFromIgnoreList->setEnabled(anotherUser); aKick->setEnabled(anotherUser); aBan->setEnabled(anotherUser); QAction *actionClicked = menu->exec(pos); if (actionClicked == aDetails) { UserInfoBox *infoWidget = new UserInfoBox(client, false, static_cast<QWidget *>(parent()), Qt::Dialog | Qt::WindowTitleHint | Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint); infoWidget->setAttribute(Qt::WA_DeleteOnClose); infoWidget->updateInfo(userName); } else if (actionClicked == aChat) emit openMessageDialog(userName, true); else if (actionClicked == aShowGames) { Command_GetGamesOfUser cmd; cmd.set_user_name(userName.toStdString()); PendingCommand *pend = client->prepareSessionCommand(cmd); connect(pend, SIGNAL(finished(Response, CommandContainer, QVariant)), this, SLOT(gamesOfUserReceived(Response, CommandContainer))); client->sendCommand(pend); } else if (actionClicked == aAddToBuddyList) { Command_AddToList cmd; cmd.set_list("buddy"); cmd.set_user_name(userName.toStdString()); client->sendCommand(client->prepareSessionCommand(cmd)); } else if (actionClicked == aRemoveFromBuddyList) { Command_RemoveFromList cmd; cmd.set_list("buddy"); cmd.set_user_name(userName.toStdString()); client->sendCommand(client->prepareSessionCommand(cmd)); } else if (actionClicked == aAddToIgnoreList) { Command_AddToList cmd; cmd.set_list("ignore"); cmd.set_user_name(userName.toStdString()); client->sendCommand(client->prepareSessionCommand(cmd)); } else if (actionClicked == aRemoveFromIgnoreList) { Command_RemoveFromList cmd; cmd.set_list("ignore"); cmd.set_user_name(userName.toStdString()); client->sendCommand(client->prepareSessionCommand(cmd)); } else if (actionClicked == aKick) { Command_KickFromGame cmd; cmd.set_player_id(playerId); game->sendGameCommand(cmd); } else if (actionClicked == aBan) { Command_GetUserInfo cmd; cmd.set_user_name(userName.toStdString()); PendingCommand *pend = client->prepareSessionCommand(cmd); connect(pend, SIGNAL(finished(Response, CommandContainer, QVariant)), this, SLOT(banUser_processUserInfoResponse(Response))); client->sendCommand(pend); } delete menu; }