Fixed the client icon id

This commit is contained in:
WolverinDEV 2021-02-26 10:16:39 +01:00
parent 1ea630b326
commit ee52f4b8d9

View File

@ -127,9 +127,7 @@ void ConnectedClient::updateChannelClientProperties(bool lock_channel_tree, bool
permission_talk_power{0, false},
permission_ignore_antiflood{0, false},
permission_channel_view_power{0, false},
permission_channel_ignore_view_power{0, false},
permission_icon_id{0, false},
permission_client_is_priority_speaker{0, false};
permission_channel_ignore_view_power{0, false};
for(const auto& perm : permissions) {
if(perm.first == permission::i_client_talk_power) {
@ -140,10 +138,6 @@ void ConnectedClient::updateChannelClientProperties(bool lock_channel_tree, bool
permission_channel_view_power = perm.second;
} else if(perm.first == permission::b_channel_ignore_view_power) {
permission_channel_ignore_view_power = perm.second;
} else if(perm.first == permission::i_icon_id) {
permission_icon_id = perm.second;
} else if(perm.first == permission::b_client_is_priority_speaker) {
permission_client_is_priority_speaker = perm.second;
} else {
sassert(false);
}
@ -182,16 +176,43 @@ void ConnectedClient::updateChannelClientProperties(bool lock_channel_tree, bool
{
IconId current_icon_id = this->properties()[property::CLIENT_ICON_ID].as_save<IconId>();
IconId new_icon_id{permission_icon_id.has_value ? (IconId) permission_icon_id.value : 0};
IconId new_icon_id{ 0};
auto local_permissions = this->clientPermissions;
if(local_permissions) {
permission::v2::PermissionFlaggedValue value{0, false};
auto permission_flags = local_permissions->permission_flags(permission::i_icon_id);
if(permission_flags.channel_specific && this->currentChannel) {
auto val = local_permissions->channel_permission(permission::i_icon_id, this->currentChannel->channelId());
value = { val.values.value, val.flags.value_set };
}
if(!value.has_value) {
value = local_permissions->permission_value_flagged(permission::i_icon_id);
}
if(value.has_value) {
new_icon_id = value.value;
}
}
if(this->properties()[property::CLIENT_ICON_ID].update_value(new_icon_id)) {
logTrace(this->getServerId(), "{} Updating client icon from {} to {}", CLIENT_STR_LOG_PREFIX, current_icon_id, new_icon_id);
updated_client_properties.emplace_back(property::CLIENT_ICON_ID);
}
}
auto pSpeakerGranted = permission::v2::permission_granted(1, permission_client_is_priority_speaker);
if(properties()[property::CLIENT_IS_PRIORITY_SPEAKER].update_value(pSpeakerGranted)){
updated_client_properties.emplace_back(property::CLIENT_IS_PRIORITY_SPEAKER);
{
auto local_permissions = this->clientPermissions;
auto permission_speaker = local_permissions ?
local_permissions->channel_permission(permission::b_client_is_priority_speaker, channel ? channel->channelId() : 0) :
permission::v2::empty_channel_permission;
auto speaker_granted = permission::v2::permission_granted(1, { permission_speaker.values.value, permission_speaker.flags.value_set });
if(properties()[property::CLIENT_IS_PRIORITY_SPEAKER].update_value(speaker_granted)){
updated_client_properties.emplace_back(property::CLIENT_IS_PRIORITY_SPEAKER);
}
}
block_flood = !permission::v2::permission_granted(1, permission_ignore_antiflood);