Re-implement sending message

[?]
Dec 9, 2020, 5:35 PM
UL67RM6XYS524MP2O2EKZAMQGPDVOQSDZVNCORJUDVEITYG7MRMQC

Dependencies

Change contents

  • edit in src/xmpp/xmpp_connection.rs at line 917
    [2.30923]
    [2.30923]
    }
    XmppCommand::Chat { xmpp_to, message } => {
    self.state
    .data
    .outgoing_mailbox
    .entry(xmpp_to.clone())
    .or_default()
    .push(message);
    self.process_jid(&xmpp_to);
  • edit in src/xmpp/xmpp_connection.rs at line 930
    [2.30993]
    [2.30993]
    }
    fn process_jid(&mut self, xmpp_to: &xmpp_parsers::Jid) {
    if let Some(ref mut mailbox) = self.state.data.outgoing_mailbox.get_mut(xmpp_to) {
    if !mailbox.is_empty() {
    if let Some(ref mut rdata) = self.state.data.roster.get_mut(&xmpp_to.clone().into())
    {
    info!("Jid {} in roster", xmpp_to);
    let sub_to = match rdata.0 {
    xmpp_parsers::roster::Subscription::To => true,
    xmpp_parsers::roster::Subscription::Both => true,
    _ => false,
    };
    if sub_to {
    info!("Subscribed to {}", xmpp_to);
    self.state.data.send_queue.extend(
    mailbox.drain(..).map(|message| {
    stanzas::make_chat_message(xmpp_to.clone(), message)
    }),
    );
    } else if rdata.1 == xmpp_parsers::roster::Ask::None {
    info!("Not subscribed to {}", xmpp_to);
    self.state.data.counter += 1;
    let id_ask_subscribe =
    format!("id_ask_subscribe{}", self.state.data.counter);
    self.state
    .data
    .send_queue
    .push_back(stanzas::make_ask_subscribe(
    id_ask_subscribe,
    xmpp_to.clone(),
    ));
    }
    let sub_from = match rdata.0 {
    xmpp_parsers::roster::Subscription::From => true,
    xmpp_parsers::roster::Subscription::Both => true,
    _ => false,
    };
    if !sub_from {
    info!("Not subscription from {}", xmpp_to);
    self.state.data.counter += 1;
    let id_allow_subscribe =
    format!("id_allow_subscribe{}", self.state.data.counter);
    self.state
    .data
    .send_queue
    .push_back(stanzas::make_allow_subscribe(
    id_allow_subscribe,
    xmpp_to.clone(),
    ));
    }
    } else {
    info!("Jid {} not in roster", xmpp_to);
    self.state.data.counter += 1;
    let id_add_roster = format!("id_add_roster{}", self.state.data.counter);
    let add_roster =
    stanzas::make_add_roster(&id_add_roster, xmpp_to.clone().into());
    info!("Adding jid {} to roster id {}", xmpp_to, id_add_roster);
    self.state.data.pending_ids.insert(
    id_add_roster,
    IqWait::new(
    60,
    AddRosterIqHandler {
    jid: xmpp_to.clone().into(),
    },
    ),
    );
    self.state.data.send_queue.push_back(add_roster);
    }
    }
    }