iris-chat 0.1.67

Iris Chat command line client and shared encrypted chat core
Documentation
use super::*;

impl AppCore {
    pub(in crate::core) fn finish_private_invite_lookup(
        &mut self,
        request_id: String,
        owner: String,
        result: Result<crate::invite_record::InviteRecord, String>,
    ) {
        let Some((pending_id, acceptance_intent)) = self.pending_private_invite_lookup.as_ref()
        else {
            return;
        };
        if pending_id != &request_id
            || self
                .logged_in
                .as_ref()
                .map(|login| login.owner_pubkey.to_hex())
                .as_ref()
                != Some(&owner)
        {
            return;
        }
        let acceptance_intent = acceptance_intent.clone();
        self.pending_private_invite_lookup = None;
        match result.and_then(|record| {
            if record
                .expires_at
                .is_some_and(|expiry| expiry <= unix_now().get())
            {
                return Err("This invite has expired.".to_string());
            }
            record
                .legacy_url()
                .map(|url| (url, record))
                .map_err(|e| e.to_string())
        }) {
            Ok((url, record)) => {
                self.accept_invite_input(&url, Some(record), Some(acceptance_intent))
            }
            Err(error) => {
                self.state.busy.accepting_invite = false;
                self.state.toast = Some(error);
                self.emit_state();
            }
        }
    }
}