A small fix
This commit is contained in:
parent
4249b4fe82
commit
0d976ec0b8
@ -1 +1 @@
|
|||||||
Subproject commit 0d28f637e11519fbdb5f124fcab126b14a35000f
|
Subproject commit abe8ee2c32bdee1812d6cb9e2b393b4e9092aa6e
|
@ -521,8 +521,9 @@ command_result ConnectedClient::handleCommandChannelGroupAddPerm(Command &cmd) {
|
|||||||
ACTION_REQUIRES_GROUP_PERMISSION(channelGroup, permission::i_channel_group_needed_modify_power, permission::i_channel_group_modify_power, true);
|
ACTION_REQUIRES_GROUP_PERMISSION(channelGroup, permission::i_channel_group_needed_modify_power, permission::i_channel_group_modify_power, true);
|
||||||
|
|
||||||
command::bulk_parser::PermissionBulksParser<true> pparser{cmd};
|
command::bulk_parser::PermissionBulksParser<true> pparser{cmd};
|
||||||
if (!pparser.validate(this->ref(), 0))
|
if (!pparser.validate(this->ref(), 0)) {
|
||||||
return pparser.build_command_result();
|
return pparser.build_command_result();
|
||||||
|
}
|
||||||
|
|
||||||
bool updateList{false};
|
bool updateList{false};
|
||||||
for (const auto &ppermission : pparser.iterate_valid_permissions()) {
|
for (const auto &ppermission : pparser.iterate_valid_permissions()) {
|
||||||
@ -538,22 +539,29 @@ command_result ConnectedClient::handleCommandChannelGroupAddPerm(Command &cmd) {
|
|||||||
updateList |= ppermission.is_group_property();
|
updateList |= ppermission.is_group_property();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updateList)
|
if (updateList) {
|
||||||
channelGroup->apply_properties_from_permissions();
|
channelGroup->apply_properties_from_permissions();
|
||||||
|
}
|
||||||
|
|
||||||
if (this->server) {
|
if (this->server) {
|
||||||
if (updateList)
|
if (updateList) {
|
||||||
this->server->forEachClient([](shared_ptr<ConnectedClient> cl) {
|
this->server->forEachClient([](shared_ptr<ConnectedClient> cl) {
|
||||||
cl->notifyChannelGroupList();
|
cl->notifyChannelGroupList();
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
this->server->forEachClient([channelGroup](shared_ptr<ConnectedClient> cl) {
|
this->server->forEachClient([channelGroup](shared_ptr<ConnectedClient> cl) {
|
||||||
unique_lock client_channel_lock(cl->channel_lock); /* while we're updating groups we dont want to change anything! */
|
unique_lock client_channel_lock(cl->channel_lock); /* while we're updating groups we dont want to change anything! */
|
||||||
if (cl->channelGroupAssigned(channelGroup, cl->getChannel())) {
|
if (cl->channelGroupAssigned(channelGroup, cl->getChannel())) {
|
||||||
if (cl->update_cached_permissions())
|
if (cl->update_cached_permissions()) {
|
||||||
cl->sendNeededPermissions(false); /* update the needed permissions */
|
cl->sendNeededPermissions(false); /* update the needed permissions */
|
||||||
cl->updateChannelClientProperties(false, true);
|
}
|
||||||
cl->join_state_id++; /* join permission may changed, all channels need to be recalculate dif needed */
|
cl->join_state_id++; /* join permission may changed, all channels need to be recalculate dif needed */
|
||||||
}
|
}
|
||||||
|
client_channel_lock.unlock();
|
||||||
|
|
||||||
|
/* Must be outside of the lock since updateChannelClientProperties may causes client talk power updates */
|
||||||
|
cl->updateChannelClientProperties(true, true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -597,9 +605,12 @@ command_result ConnectedClient::handleCommandChannelGroupDelPerm(Command &cmd) {
|
|||||||
if (cl->channelGroupAssigned(channelGroup, cl->getChannel())) {
|
if (cl->channelGroupAssigned(channelGroup, cl->getChannel())) {
|
||||||
if (cl->update_cached_permissions()) /* update cached calculated permissions */
|
if (cl->update_cached_permissions()) /* update cached calculated permissions */
|
||||||
cl->sendNeededPermissions(false); /* cached permissions had changed, notify the client */
|
cl->sendNeededPermissions(false); /* cached permissions had changed, notify the client */
|
||||||
cl->updateChannelClientProperties(false, false);
|
|
||||||
cl->join_state_id++; /* join permission may changed, all channels need to be recalculate dif needed */
|
cl->join_state_id++; /* join permission may changed, all channels need to be recalculate dif needed */
|
||||||
}
|
}
|
||||||
|
client_channel_lock.unlock();
|
||||||
|
|
||||||
|
/* Must be outside of the lock since updateChannelClientProperties may causes client talk power updates */
|
||||||
|
cl->updateChannelClientProperties(true, true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2179,10 +2190,13 @@ command_result ConnectedClient::handleCommandChannelAddPerm(Command &cmd) {
|
|||||||
|
|
||||||
if ((updateClients || update_join_permissions) && this->server) {
|
if ((updateClients || update_join_permissions) && this->server) {
|
||||||
this->server->forEachClient([&](std::shared_ptr<ConnectedClient> cl) {
|
this->server->forEachClient([&](std::shared_ptr<ConnectedClient> cl) {
|
||||||
if (updateClients && cl->currentChannel == channel)
|
if (updateClients && cl->currentChannel == channel) {
|
||||||
cl->updateChannelClientProperties(true, true);
|
cl->updateChannelClientProperties(true, true);
|
||||||
if (update_join_permissions)
|
}
|
||||||
|
|
||||||
|
if (update_join_permissions) {
|
||||||
cl->join_state_id++;
|
cl->join_state_id++;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user