Skip to content
Snippets Groups Projects
membership.rs 33.6 KiB
Newer Older
  • Learn to ignore specific revisions
  •                 "Error while handling incoming PDU.",
                )
            })?
            .ok_or(Error::BadRequest(
                ErrorKind::InvalidParam,
                "Could not accept incoming PDU as timeline event.",
            ))?;
    
    
            for server in db
                .rooms
                .room_servers(room_id)
                .filter_map(|r| r.ok())
                .filter(|server| &**server != db.globals.server_name())
            {
                db.sending.send_pdu(&server, &pdu_id)?;
            }
    
            return Ok(());
        }
    
    
    Timo Kösters's avatar
    Timo Kösters committed
        let mutex_state = Arc::clone(
    
    Timo Kösters's avatar
    Timo Kösters committed
                .roomid_mutex_state
    
                .write()
                .unwrap()
                .entry(room_id.clone())
                .or_default(),
        );
    
    Timo Kösters's avatar
    Timo Kösters committed
        let state_lock = mutex_state.lock().await;
    
        db.rooms.build_and_append_pdu(
            PduBuilder {
                event_type: EventType::RoomMember,
                content: serde_json::to_value(member::MemberEventContent {
                    membership: member::MembershipState::Invite,
                    displayname: db.users.displayname(&user_id)?,
                    avatar_url: db.users.avatar_url(&user_id)?,
    
                    is_direct: Some(is_direct),
    
                    third_party_invite: None,
    
                    blurhash: db.users.blurhash(&user_id)?,
    
                })
                .expect("event is valid, we just created it"),
                unsigned: None,
                state_key: Some(user_id.to_string()),
                redacts: None,
            },
            &sender_user,
            room_id,
            &db,
    
    Timo Kösters's avatar
    Timo Kösters committed
            &state_lock,
    
    Timo Kösters's avatar
    Timo Kösters committed
        drop(state_lock);