Browse Source

feat(friend): Make friend constructable without core ID

For blocked friends that don't exist in toxcore.
reviewable/pr6623/r3
Anthony Bilinski 4 years ago
parent
commit
937b1c61ed
No known key found for this signature in database
GPG Key ID: 2AA8E0DA1B31FB3C
  1. 2
      src/friendlist.cpp
  2. 35
      src/model/friend.cpp
  3. 10
      src/model/friend.h
  4. 2
      test/model/friendmessagedispatcher_test.cpp
  5. 4
      test/model/notificationgenerator_test.cpp

2
src/friendlist.cpp

@ -34,7 +34,7 @@ Friend* FriendList::addFriend(uint32_t friendId, const ToxPk& friendPk, Settings @@ -34,7 +34,7 @@ Friend* FriendList::addFriend(uint32_t friendId, const ToxPk& friendPk, Settings
}
QString alias = settings.getFriendAlias(friendPk);
Friend* newfriend = new Friend(friendId, friendPk, alias);
Friend* newfriend = new Friend(std::unique_ptr<uint32_t>(new uint32_t(friendId)), friendPk, alias);
friendList[friendPk] = newfriend;
id2key[friendId] = friendPk;

35
src/model/friend.cpp

@ -28,13 +28,13 @@ @@ -28,13 +28,13 @@
#include <memory>
#include <cassert>
Friend::Friend(uint32_t friendId_, const ToxPk& friendPk_, const QString& userAlias_, const QString& userName_)
Friend::Friend(std::unique_ptr<uint32_t> friendId_, const ToxPk& friendPk_, const QString& userAlias_, const QString& userName_)
: userName{userName_}
, userAlias{userAlias_}
, friendPk{friendPk_}
, friendId{friendId_}
, friendId{std::move(friendId_)}
, hasNewEvents{false}
, friendStatus{Status::Status::Offline}
, friendStatus{friendId ? Status::Status::Blocked : Status::Status::Offline}
, isNegotiating{false}
{
if (userName_.isEmpty()) {
@ -144,7 +144,9 @@ const ToxPk& Friend::getPublicKey() const @@ -144,7 +144,9 @@ const ToxPk& Friend::getPublicKey() const
uint32_t Friend::getId() const
{
return friendId;
assert(friendStatus != Status::Status::Blocked);
assert(friendId);
return *friendId;
}
const ChatId& Friend::getPersistentId() const
@ -177,7 +179,8 @@ void Friend::setStatus(Status::Status s) @@ -177,7 +179,8 @@ void Friend::setStatus(Status::Status s)
const auto startNegotating = friendStatus == Status::Status::Offline;
if (startNegotating) {
qDebug() << "Starting negotiation with friend " << friendId;
assert(friendId);
qDebug() << "Starting negotiation with friend " << *friendId;
isNegotiating = true;
}
@ -222,7 +225,8 @@ void Friend::onNegotiationComplete() { @@ -222,7 +225,8 @@ void Friend::onNegotiationComplete() {
return;
}
qDebug() << "Negotiation complete for friend " << friendId;
assert(friendId);
qDebug() << "Negotiation complete for friend " << *friendId;
isNegotiating = false;
emit statusChanged(friendPk, friendStatus);
@ -231,3 +235,22 @@ void Friend::onNegotiationComplete() { @@ -231,3 +235,22 @@ void Friend::onNegotiationComplete() {
emit onlineOfflineChanged(friendPk, true);
}
}
void Friend::block()
{
setStatus(Status::Status::Blocked);
friendId.reset();
emit blocked();
}
void Friend::unblock()
{
setStatus(Status::Status::Offline);
emit unblocked();
}
void Friend::setCoreId(uint32_t coreId)
{
assert(!friendId);
friendId = std::unique_ptr<uint32_t>(new uint32_t(coreId));
}

10
src/model/friend.h

@ -32,7 +32,7 @@ class Friend : public Chat @@ -32,7 +32,7 @@ class Friend : public Chat
{
Q_OBJECT
public:
Friend(uint32_t friendId_, const ToxPk& friendPk_, const QString& userAlias_ = {}, const QString& userName_ = {});
Friend(std::unique_ptr<uint32_t> friendId, const ToxPk& friendPk_, const QString& userAlias_ = {}, const QString& userName_ = {});
Friend(const Friend& other) = delete;
Friend& operator=(const Friend& other) = delete;
@ -59,6 +59,10 @@ public: @@ -59,6 +59,10 @@ public:
void setExtendedMessageSupport(bool supported);
ExtensionSet getSupportedExtensions() const;
void block();
void unblock();
void setCoreId(uint32_t coreId);
signals:
void nameChanged(const ToxPk& friendId, const QString& name);
void aliasChanged(const ToxPk& friendId, QString alias);
@ -67,6 +71,8 @@ signals: @@ -67,6 +71,8 @@ signals:
void statusMessageChanged(const ToxPk& friendId, const QString& message);
void extensionSupportChanged(ExtensionSet extensions);
void loadChatHistory();
void blocked();
void unblocked();
public slots:
void onNegotiationComplete();
@ -75,7 +81,7 @@ private: @@ -75,7 +81,7 @@ private:
QString userAlias;
QString statusMessage;
ToxPk friendPk;
uint32_t friendId;
std::unique_ptr<uint32_t> friendId;
bool hasNewEvents;
Status::Status friendStatus;
bool isNegotiating;

2
test/model/friendmessagedispatcher_test.cpp

@ -180,7 +180,7 @@ TestFriendMessageDispatcher::TestFriendMessageDispatcher() {} @@ -180,7 +180,7 @@ TestFriendMessageDispatcher::TestFriendMessageDispatcher() {}
*/
void TestFriendMessageDispatcher::init()
{
f = std::unique_ptr<Friend>(new Friend(0, ToxPk()));
f = std::unique_ptr<Friend>(new Friend(std::unique_ptr<uint32_t>(new uint32_t(0)), ToxPk()));
f->setStatus(Status::Status::Online);
f->onNegotiationComplete();
messageSender = std::unique_ptr<MockFriendMessageSender>(new MockFriendMessageSender());

4
test/model/notificationgenerator_test.cpp

@ -170,10 +170,10 @@ void TestNotificationGenerator::testMultipleGroupMessages() @@ -170,10 +170,10 @@ void TestNotificationGenerator::testMultipleGroupMessages()
void TestNotificationGenerator::testMultipleFriendSourceMessages()
{
Friend f(0, ToxPk());
Friend f(std::unique_ptr<uint32_t>(new uint32_t(0)), ToxPk());
f.setName("friend1");
Friend f2(1, ToxPk());
Friend f2(std::unique_ptr<uint32_t>(new uint32_t(1)), ToxPk());
f2.setName("friend2");
notificationGenerator->friendMessageNotification(&f, "test1");

Loading…
Cancel
Save