/// <summary> /// Creates a <see cref="Room" /> from the contents of an <see cref="InvitedRoom" />. /// </summary> /// <param name="id">The ID of the room the user was invited to.</param> /// <param name="invitedRoom">The data for the invited room.</param> /// <returns></returns> internal static Room FromInvitedRoom(string id, InvitedRoom invitedRoom) { var room = new Room(id, Membership.Invited); var state = invitedRoom.InviteState; var aliasState = state.Events.OfEventType("m.room.canonical_alias") .FirstOrDefault(e => e.StateKey == string.Empty); var aliasContent = aliasState?.Content as CanonicalAliasContent; if (aliasContent?.Alias != null) { room.CanonicalAlias = aliasContent.Alias; room._aliases.Add(aliasContent.Alias); } var aliasesStates = state.Events.OfEventType("m.room.aliases"); var aliases = aliasesStates.SelectMany(e => (e.Content as AliasesContent)?.Aliases).Where(a => a != null); room._aliases.UnionWith(aliases); if (state.Events.OfEventType("m.room.name").FirstOrDefault(e => e.StateKey == string.Empty)?.Content is RoomNameContent nameContent) { room.Name = nameContent.Name; } if (state.Events.OfEventType("m.room.topic").FirstOrDefault(e => e.StateKey == string.Empty)?.Content is RoomTopicContent topicContent) { room.Topic = topicContent.Topic; } return(room); }
private void HandleInvitedRoomEvent(string roomId, InvitedRoom invitedRoom) { Log.LogTrace("Handling 'invited' room {RoomId}", roomId); var hasRoom = _rooms.TryGetValue(roomId, out var room); if (!hasRoom) { Log.LogTrace("Invited room {RoomId} did not exist, adding it", roomId); room = Room.FromInvitedRoom(roomId, invitedRoom); _rooms.TryAdd(roomId, room); } Invited?.Invoke(this, new InvitedEventArgs(room)); }