p->attachSlot(SIGNAL(changePassword(PeerPtr,QString,QString,QString)), this, SLOT(changePassword(PeerPtr,QString,QString,QString)));
p->attachSignal(this, SIGNAL(passwordChanged(PeerPtr,bool)));
+ p->attachSlot(SIGNAL(kickClient(int)), this, SLOT(kickClient(int)));
+ p->attachSignal(this, SIGNAL(disconnectFromCore()));
+
loadSettings();
initScriptEngine();
{
CoreNetwork *currentNetwork = network(bufferInfo.networkId());
if (!currentNetwork) {
- return "";
+ return {};
}
if (bufferInfo.type() != BufferInfo::ChannelBuffer) {
- return "";
+ return {};
}
IrcChannel *currentChannel = currentNetwork->ircChannel(bufferInfo.bufferName());
if (!currentChannel) {
- return "";
+ return {};
}
const QString modes = currentChannel->userModes(nickFromMask(sender).toLower());
if (uid.isValid() && uid == user())
success = Core::changeUserPassword(uid, newPassword);
- emit passwordChanged(peer, success);
+ signalProxy()->restrictTargetPeers({signalProxy()->sourcePeer()}, [&]{
+ emit passwordChanged(nullptr, success);
+ });
+}
+
+void CoreSession::kickClient(int peerId) {
+ auto peer = signalProxy()->peerById(peerId);
+ if (peer == nullptr) {
+ qWarning() << "Invalid peer Id: " << peerId;
+ return;
+ }
+ signalProxy()->restrictTargetPeers({peer}, [&]{
+ emit disconnectFromCore();
+ });
}