diff --git a/src/widget/widget.cpp b/src/widget/widget.cpp index a4f38d668..6ff5acaff 100644 --- a/src/widget/widget.cpp +++ b/src/widget/widget.cpp @@ -746,6 +746,7 @@ void Widget::onCoreChanged(Core& core_) connect(this, &Widget::statusSet, core, &Core::setStatus); connect(this, &Widget::friendRequested, core, &Core::requestFriendship); connect(this, &Widget::friendRequestAccepted, core, &Core::acceptFriendRequest); + connect(this, &Widget::unblockFriend, core, &Core::acceptFriendRequest); connect(this, &Widget::changeGroupTitle, core, &Core::changeGroupTitle); sharedMessageProcessorParams->setPublicKey(core->getSelfPublicKey().toString()); @@ -1221,7 +1222,9 @@ void Widget::addFriend(Friend* newFriend) connect(widget, &FriendWidget::friendHistoryRemoved, friendForm, &ChatForm::clearChatArea); connect(widget, &FriendWidget::copyFriendIdToClipboard, this, &Widget::copyFriendIdToClipboard); connect(widget, &FriendWidget::contextMenuCalled, widget, &FriendWidget::onContextMenuCalled); - connect(widget, SIGNAL(removeFriend(const ToxPk&)), this, SLOT(removeFriend(const ToxPk&))); + connect(widget, &FriendWidget::removeFriend, this, &Widget::removeFriendByPk); + connect(widget, &FriendWidget::blockFriend, this, &Widget::blockFriend); + connect(widget, &FriendWidget::unblockFriend, this, &Widget::onUnblockFriend); connect(&profile, &Profile::friendAvatarSet, widget, &FriendWidget::onAvatarSet); connect(&profile, &Profile::friendAvatarRemoved, widget, &FriendWidget::onAvatarRemoved); @@ -1514,9 +1517,9 @@ void Widget::addFriendDialog(const Friend* frnd, ContentDialog* dialog) friendWidget->setStatusMsg(widget->getStatusMsg()); #if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)) - auto widgetRemoveFriend = QOverload::of(&Widget::removeFriend); + auto widgetRemoveFriend = QOverload::of(&Widget::removeFriendByPk); #else - auto widgetRemoveFriend = static_cast(&Widget::removeFriend); + auto widgetRemoveFriend = static_cast(&Widget::removeFriend); #endif connect(friendWidget, &FriendWidget::removeFriend, this, widgetRemoveFriend); connect(friendWidget, &FriendWidget::middleMouseClicked, dialog, @@ -1830,9 +1833,29 @@ void Widget::removeFriend(Friend* f, bool fake) } } -void Widget::removeFriend(const ToxPk& friendId) +void Widget::removeFriendByPk(const ToxPk& friendId, bool fake) { - removeFriend(friendList->findFriend(friendId), false); + removeFriend(friendList->findFriend(friendId), fake); +} + +void Widget::blockFriend(const ToxPk& friendPk) +{ + auto contact = friendList->findFriend(friendPk); + assert(contact); + auto oldId = contact->getId(); + settings.setFriendBlocked(friendPk, true); + core->removeFriend(oldId); + friendList->makeFriendBlocked(oldId); + contact->block(); +} + +void Widget::onUnblockFriend(const ToxPk& friendPk) +{ + auto contact = friendList->findFriend(friendPk); + assert(contact); + contact->unblock(); + emit unblockFriend(friendPk); + settings.setFriendBlocked(friendPk, false); } void Widget::onDialogShown(GenericChatroomWidget* widget) diff --git a/src/widget/widget.h b/src/widget/widget.h index b95dcdac6..edd18d043 100644 --- a/src/widget/widget.h +++ b/src/widget/widget.h @@ -216,6 +216,7 @@ signals: void statusMessageChanged(const QString& statusMessage); void resized(); void windowStateChanged(Qt::WindowStates states); + void unblockFriend(const ToxPk& friendPk); private slots: void onAddClicked(); @@ -225,7 +226,9 @@ private slots: void openNewDialog(GenericChatroomWidget* widget); void onChatroomWidgetClicked(GenericChatroomWidget* widget); void onStatusMessageChanged(const QString& newStatusMessage); - void removeFriend(const ToxPk& friendId); + void removeFriendByPk(const ToxPk& friendId, bool fake); + void blockFriend(const ToxPk& friendPk); + void onUnblockFriend(const ToxPk& friendPk); void copyFriendIdToClipboard(const ToxPk& friendId); void removeGroup(const GroupId& groupId); void setStatusOnline();