mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	network, citra_qt: Give moderation permission to community mods
Based on the `roles` payload in the JWT, the rooms will now give mod permission to Citra Community Moderators. To notify the client of its permissions, a new response, IdJoinSuccessAsMod is added, and there's now a new RoomMember::State called Moderator.
This commit is contained in:
		
							parent
							
								
									94be4050bc
								
							
						
					
					
						commit
						9d062d63da
					
				
					 15 changed files with 73 additions and 27 deletions
				
			
		|  | @ -306,7 +306,9 @@ void ChatRoom::OnStatusMessageReceive(const Network::StatusMessageEntry& status_ | |||
| 
 | ||||
| void ChatRoom::OnSendChat() { | ||||
|     if (auto room = Network::GetRoomMember().lock()) { | ||||
|         if (room->GetState() != Network::RoomMember::State::Joined) { | ||||
|         if (room->GetState() != Network::RoomMember::State::Joined && | ||||
|             room->GetState() != Network::RoomMember::State::Moderator) { | ||||
| 
 | ||||
|             return; | ||||
|         } | ||||
|         auto message = ui->chat_message->text().toStdString(); | ||||
|  |  | |||
|  | @ -72,9 +72,12 @@ void ClientRoomWindow::OnRoomUpdate(const Network::RoomInformation& info) { | |||
| } | ||||
| 
 | ||||
| void ClientRoomWindow::OnStateChange(const Network::RoomMember::State& state) { | ||||
|     if (state == Network::RoomMember::State::Joined) { | ||||
|     if (state == Network::RoomMember::State::Joined || | ||||
|         state == Network::RoomMember::State::Moderator) { | ||||
| 
 | ||||
|         ui->chat->Clear(); | ||||
|         ui->chat->AppendStatusMessage(tr("Connected")); | ||||
|         SetModPerms(state == Network::RoomMember::State::Moderator); | ||||
|     } | ||||
|     UpdateView(); | ||||
| } | ||||
|  |  | |||
|  | @ -18,7 +18,6 @@ public: | |||
|     ~ClientRoomWindow(); | ||||
| 
 | ||||
|     void RetranslateUi(); | ||||
|     void SetModPerms(bool is_mod); | ||||
| 
 | ||||
| public slots: | ||||
|     void OnRoomUpdate(const Network::RoomInformation&); | ||||
|  | @ -32,6 +31,7 @@ signals: | |||
| private: | ||||
|     void Disconnect(); | ||||
|     void UpdateView(); | ||||
|     void SetModPerms(bool is_mod); | ||||
| 
 | ||||
|     QStandardItemModel* player_list; | ||||
|     std::unique_ptr<Ui::ClientRoom> ui; | ||||
|  |  | |||
|  | @ -63,7 +63,7 @@ void DirectConnectWindow::Connect() { | |||
|         // Prevent the user from trying to join a room while they are already joining.
 | ||||
|         if (member->GetState() == Network::RoomMember::State::Joining) { | ||||
|             return; | ||||
|         } else if (member->GetState() == Network::RoomMember::State::Joined) { | ||||
|         } else if (member->IsConnected()) { | ||||
|             // And ask if they want to leave the room if they are already in one.
 | ||||
|             if (!NetworkMessage::WarnDisconnect()) { | ||||
|                 return; | ||||
|  | @ -122,7 +122,9 @@ void DirectConnectWindow::OnConnection() { | |||
|     EndConnecting(); | ||||
| 
 | ||||
|     if (auto room_member = Network::GetRoomMember().lock()) { | ||||
|         if (room_member->GetState() == Network::RoomMember::State::Joined) { | ||||
|         if (room_member->GetState() == Network::RoomMember::State::Joined || | ||||
|             room_member->GetState() == Network::RoomMember::State::Moderator) { | ||||
| 
 | ||||
|             close(); | ||||
|         } | ||||
|     } | ||||
|  |  | |||
|  | @ -113,7 +113,7 @@ void HostRoomWindow::Host() { | |||
|     if (auto member = Network::GetRoomMember().lock()) { | ||||
|         if (member->GetState() == Network::RoomMember::State::Joining) { | ||||
|             return; | ||||
|         } else if (member->GetState() == Network::RoomMember::State::Joined) { | ||||
|         } else if (member->IsConnected()) { | ||||
|             auto parent = static_cast<MultiplayerState*>(parentWidget()); | ||||
|             if (!parent->OnCloseRoom()) { | ||||
|                 close(); | ||||
|  |  | |||
|  | @ -109,7 +109,7 @@ void Lobby::OnJoinRoom(const QModelIndex& source) { | |||
|         // Prevent the user from trying to join a room while they are already joining.
 | ||||
|         if (member->GetState() == Network::RoomMember::State::Joining) { | ||||
|             return; | ||||
|         } else if (member->GetState() == Network::RoomMember::State::Joined) { | ||||
|         } else if (member->IsConnected()) { | ||||
|             // And ask if they want to leave the room if they are already in one.
 | ||||
|             if (!NetworkMessage::WarnDisconnect()) { | ||||
|                 return; | ||||
|  |  | |||
|  | @ -89,7 +89,9 @@ void MultiplayerState::retranslateUi() { | |||
| 
 | ||||
|     if (current_state == Network::RoomMember::State::Uninitialized) { | ||||
|         status_text->setText(tr("Not Connected. Click here to find a room!")); | ||||
|     } else if (current_state == Network::RoomMember::State::Joined) { | ||||
|     } else if (current_state == Network::RoomMember::State::Joined || | ||||
|                current_state == Network::RoomMember::State::Moderator) { | ||||
| 
 | ||||
|         status_text->setText(tr("Connected")); | ||||
|     } else { | ||||
|         status_text->setText(tr("Not Connected")); | ||||
|  | @ -107,7 +109,9 @@ void MultiplayerState::retranslateUi() { | |||
| 
 | ||||
| void MultiplayerState::OnNetworkStateChanged(const Network::RoomMember::State& state) { | ||||
|     LOG_DEBUG(Frontend, "Network State: {}", Network::GetStateStr(state)); | ||||
|     if (state == Network::RoomMember::State::Joined) { | ||||
|     if (state == Network::RoomMember::State::Joined || | ||||
|         state == Network::RoomMember::State::Moderator) { | ||||
| 
 | ||||
|         OnOpenNetworkRoom(); | ||||
|         status_icon->setPixmap(QIcon::fromTheme("connected").pixmap(16)); | ||||
|         status_text->setText(tr("Connected")); | ||||
|  | @ -183,7 +187,9 @@ void MultiplayerState::OnAnnounceFailed(const Common::WebResult& result) { | |||
| void MultiplayerState::UpdateThemedIcons() { | ||||
|     if (show_notification) { | ||||
|         status_icon->setPixmap(QIcon::fromTheme("connected_notification").pixmap(16)); | ||||
|     } else if (current_state == Network::RoomMember::State::Joined) { | ||||
|     } else if (current_state == Network::RoomMember::State::Joined || | ||||
|                current_state == Network::RoomMember::State::Moderator) { | ||||
| 
 | ||||
|         status_icon->setPixmap(QIcon::fromTheme("connected").pixmap(16)); | ||||
|     } else { | ||||
|         status_icon->setPixmap(QIcon::fromTheme("disconnected").pixmap(16)); | ||||
|  | @ -258,12 +264,6 @@ void MultiplayerState::OnOpenNetworkRoom() { | |||
|                 connect(client_room, &ClientRoomWindow::ShowNotification, this, | ||||
|                         &MultiplayerState::ShowNotification); | ||||
|             } | ||||
|             const std::string host_username = member->GetRoomInformation().host_username; | ||||
|             if (host_username.empty()) { | ||||
|                 client_room->SetModPerms(false); | ||||
|             } else { | ||||
|                 client_room->SetModPerms(member->GetUsername() == host_username); | ||||
|             } | ||||
|             BringWidgetToFront(client_room); | ||||
|             return; | ||||
|         } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue