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_talk_power{0, false},
permission_ignore_antiflood{0, false}, permission_ignore_antiflood{0, false},
permission_channel_view_power{0, false}, permission_channel_view_power{0, false},
permission_channel_ignore_view_power{0, false}, permission_channel_ignore_view_power{0, false};
permission_icon_id{0, false},
permission_client_is_priority_speaker{0, false};
for(const auto& perm : permissions) { for(const auto& perm : permissions) {
if(perm.first == permission::i_client_talk_power) { 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; permission_channel_view_power = perm.second;
} else if(perm.first == permission::b_channel_ignore_view_power) { } else if(perm.first == permission::b_channel_ignore_view_power) {
permission_channel_ignore_view_power = perm.second; 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 { } else {
sassert(false); sassert(false);
} }
@ -182,17 +176,44 @@ void ConnectedClient::updateChannelClientProperties(bool lock_channel_tree, bool
{ {
IconId current_icon_id = this->properties()[property::CLIENT_ICON_ID].as_save<IconId>(); 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)) { 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); 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); 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)){ 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); updated_client_properties.emplace_back(property::CLIENT_IS_PRIORITY_SPEAKER);
} }
}
block_flood = !permission::v2::permission_granted(1, permission_ignore_antiflood); block_flood = !permission::v2::permission_granted(1, permission_ignore_antiflood);
if(server_ref) { if(server_ref) {