-void IrcUser::quit() {
- QList<IrcChannel *> channels = _channels.toList();
- _channels.clear();
- foreach(IrcChannel *channel, channels) {
- disconnect(channel, 0, this, 0);
- channel->part(this);
- }
- network()->removeIrcUser(this);
- SYNC(NO_ARG)
- emit quited();
+void IrcUser::partChannel(IrcChannel* channel)
+{
+ if (_channels.contains(channel)) {
+ _channels.remove(channel);
+ disconnect(channel, nullptr, this, nullptr);
+ channel->part(this);
+ QString channelName = channel->name();
+ SYNC_OTHER(partChannel, ARG(channelName))
+ if (_channels.isEmpty() && !network()->isMe(this))
+ quit();
+ }
+}
+
+void IrcUser::partChannel(const QString& channelname)
+{
+ IrcChannel* channel = network()->ircChannel(channelname);
+ if (channel == nullptr) {
+ qWarning() << "IrcUser::partChannel(): received part for unknown Channel" << channelname;
+ }
+ else {
+ partChannel(channel);
+ }