aboutsummaryrefslogtreecommitdiff
path: root/src/Room.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Room.cpp')
-rw-r--r--src/Room.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/Room.cpp b/src/Room.cpp
index 924f2da..a8a8d6a 100644
--- a/src/Room.cpp
+++ b/src/Room.cpp
@@ -154,6 +154,34 @@ namespace dchat
});
}
+ void Room::setAvatarUrl(const std::string &url)
+ {
+ assert(localUser);
+ assert(publicKeyToKeyPairMap.find(localUser->publicKey) != publicKeyToKeyPairMap.end());
+ assert(encryptionKey);
+ sibs::SafeSerializer serializer;
+ serializer.add(RoomDataType::CHANGE_AVATAR);
+ serializer.add((u16)url.size());
+ serializer.add((const u8*)url.data(), url.size());
+ auto keyPair = publicKeyToKeyPairMap[localUser->publicKey];
+ odhtdb::DatabaseNode roomNode(encryptionKey, id);
+ rooms->database->addData(roomNode, *keyPair, { serializer.getBuffer().data(), serializer.getSize() });
+ }
+
+ void Room::setNickname(const std::string &nickname)
+ {
+ assert(localUser);
+ assert(publicKeyToKeyPairMap.find(localUser->publicKey) != publicKeyToKeyPairMap.end());
+ assert(encryptionKey);
+ sibs::SafeSerializer serializer;
+ serializer.add(RoomDataType::NICKNAME_CHANGE);
+ serializer.add((u8)nickname.size());
+ serializer.add((const u8*)nickname.data(), nickname.size());
+ auto keyPair = publicKeyToKeyPairMap[localUser->publicKey];
+ odhtdb::DatabaseNode roomNode(encryptionKey, id);
+ rooms->database->addData(roomNode, *keyPair, { serializer.getBuffer().data(), serializer.getSize() });
+ }
+
void Room::publishMessage(const std::string &msg)
{
assert(localUser);
@@ -291,6 +319,27 @@ namespace dchat
}
break;
}
+ case RoomDataType::CHANGE_AVATAR:
+ {
+ sibs::SafeDeserializer deserializer((const u8*)request.decryptedData.data + 1, request.decryptedData.size - 1);
+ u16 urlLength = deserializer.extract<u16>();
+ if(urlLength > 0)
+ {
+ std::string url;
+ url.resize(urlLength);
+ deserializer.extract((u8*)&url[0], urlLength);
+
+ UserChangeAvatarRequest roomRequest;
+ roomRequest.room = room;
+ roomRequest.user = user;
+ roomRequest.timestampSeconds = timestampSeconds;
+ roomRequest.loadedFromCache = request.loadedFromCache;
+ roomRequest.url = std::move(url);
+ if(callbackFuncs.userChangeAvatarCallbackFunc)
+ callbackFuncs.userChangeAvatarCallbackFunc(roomRequest);
+ }
+ break;
+ }
case RoomDataType::CHANGE_ROOM_NAME:
{
int userPermissionLevel = database->getUserLowestPermissionLevel(*room->id, user->publicKey);
@@ -318,7 +367,10 @@ namespace dchat
break;
}
default:
+ {
+ odhtdb::Log::warn("Rooms::addNodeCallbackFunc: Got unexpected room data type %d", roomDataType);
break;
+ }
}
}
catch(std::exception &e)