Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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));
        }