Reorganize roster processing. Output roster

[?]
Dec 30, 2018, 10:46 AM
HOAZX2PBYRX3B7CPCOGROLLBEUJT44SYBRNYTJMAPFJSQRYDAKMQC

Dependencies

  • [2] PFC7OJQF Query roster
  • [3] HU3NZX5Z Process self-presence via new processing code
  • [*] VS6AHRWI Move XMPP to separate dir
  • [*] FV6BJ5K6 Send self-presence and store account info in Rc so it willbe used in some future in parallel
  • [*] XGP44R5H Rework stopping xmpp connection

Change contents

  • edit in src/xmpp/mod.rs at line 9
    [6.434]
    [7.72]
    const ID_GET_ROSTER: &str = "id_get_roster0";
  • edit in src/xmpp/mod.rs at line 203
    [2.748]
    [2.748]
    fn process_initial_roster(&mut self, event: Event) -> Result<bool, failure::Error> {
    if let Event::Stanza(s) = event {
    use try_from::TryInto;
    match s.try_into() as Result<xmpp_parsers::iq::Iq, _> {
    Ok(iq) => {
    if let Some(id) = iq.id {
    if id == ID_GET_ROSTER {
    match iq.payload {
    xmpp_parsers::iq::IqType::Error(_e) => {
    Err(format_err!("Get error instead of roster"))
    }
    xmpp_parsers::iq::IqType::Result(Some(result)) => {
    match result.try_into()
    as Result<xmpp_parsers::roster::Roster, _>
    {
    Ok(roster) => {
    info!("Got roster:");
    for i in roster.items {
    info!(" >>> {:?}", i);
    }
    Ok(true)
    }
    Err(e) => Err(format_err!("Cann't parse roster: {}", e)),
    }
    }
    _ => Err(format_err!("Unknown result of roster")),
    }
    } else {
    Ok(false)
    }
    } else {
    Err(format_err!("Iq stanza without id"))
    }
    }
    Err(_e) => Ok(false),
    }
    } else {
    Err(format_err!("Wrong event while waiting roster"))
    }
    }
  • edit in src/xmpp/mod.rs at line 257
    [2.1095][2.1095:1162]()
    let id_get_roster: String = "id_get_roster0".to_string();
  • replacement in src/xmpp/mod.rs at line 258
    [3.6927][2.1163:1230]()
    let get_roster = stanzas::make_get_roster(&id_get_roster);
    [3.6927]
    [2.1230]
    let get_roster = stanzas::make_get_roster(ID_GET_ROSTER);
  • replacement in src/xmpp/mod.rs at line 273
    [2.1697][2.1697:3184]()
    .processing(
    move |_conn, event| {
    if let Event::Stanza(s) = event {
    use try_from::TryInto;
    match s.try_into() as Result<xmpp_parsers::iq::Iq, _> {
    Ok(iq) => {
    if let Some(id) = iq.id {
    if id == id_get_roster {
    match iq.payload {
    xmpp_parsers::iq::IqType::Error(_e) => {
    Err(format_err!("Get error instead of roster"))
    }
    _ => Ok(true),
    }
    } else {
    Ok(false)
    }
    } else {
    Err(format_err!("Iq stanza without id"))
    }
    }
    Err(_e) => Ok(false),
    }
    } else {
    Err(format_err!("Wrong event while waiting roster"))
    }
    },
    stop_future,
    )
    [2.1697]
    [2.3184]
    .processing(XmppConnection::process_initial_roster, stop_future)