Make avatar support optional.

This commit is contained in:
Emmanuel Gil Peyrot 2019-09-29 04:02:32 +02:00
commit 598bbdd523
2 changed files with 31 additions and 19 deletions

View file

@ -64,6 +64,7 @@ impl ToString for ClientType {
#[derive(PartialEq)] #[derive(PartialEq)]
pub enum ClientFeature { pub enum ClientFeature {
#[cfg(feature = "avatars")]
Avatars, Avatars,
ContactList, ContactList,
JoinRooms, JoinRooms,
@ -76,6 +77,7 @@ pub enum Event {
ContactAdded(RosterItem), ContactAdded(RosterItem),
ContactRemoved(RosterItem), ContactRemoved(RosterItem),
ContactChanged(RosterItem), ContactChanged(RosterItem),
#[cfg(feature = "avatars")]
AvatarRetrieved(Jid, String), AvatarRetrieved(Jid, String),
JoinRoom(BareJid, Conference), JoinRoom(BareJid, Conference),
LeaveRoom(BareJid), LeaveRoom(BareJid),
@ -132,9 +134,12 @@ impl ClientBuilder<'_> {
let mut features = vec![ let mut features = vec![
Feature::new(ns::DISCO_INFO), Feature::new(ns::DISCO_INFO),
]; ];
#[cfg(feature = "avatars")]
{
if self.features.contains(&ClientFeature::Avatars) { if self.features.contains(&ClientFeature::Avatars) {
features.push(Feature::new(format!("{}+notify", ns::AVATAR_METADATA))); features.push(Feature::new(format!("{}+notify", ns::AVATAR_METADATA)));
} }
}
if self.features.contains(&ClientFeature::JoinRooms) { if self.features.contains(&ClientFeature::JoinRooms) {
features.push(Feature::new(format!("{}+notify", ns::BOOKMARKS2))); features.push(Feature::new(format!("{}+notify", ns::BOOKMARKS2)));
} }

View file

@ -21,6 +21,7 @@ use xmpp_parsers::{
pubsub::pubsub::PubSub, pubsub::pubsub::PubSub,
}; };
#[cfg(feature = "avatars")]
pub(crate) mod avatar; pub(crate) mod avatar;
pub(crate) fn handle_event(from: &Jid, elem: Element, mut tx: &mut mpsc::UnboundedSender<Packet>) -> impl IntoIterator<Item = Event> { pub(crate) fn handle_event(from: &Jid, elem: Element, mut tx: &mut mpsc::UnboundedSender<Packet>) -> impl IntoIterator<Item = Event> {
@ -28,6 +29,7 @@ pub(crate) fn handle_event(from: &Jid, elem: Element, mut tx: &mut mpsc::Unbound
match PubSubEvent::try_from(elem) { match PubSubEvent::try_from(elem) {
Ok(PubSubEvent::PublishedItems { node, items }) => { Ok(PubSubEvent::PublishedItems { node, items }) => {
match node.0 { match node.0 {
#[cfg(feature = "avatars")]
node if node == ns::AVATAR_METADATA => { node if node == ns::AVATAR_METADATA => {
let new_events = avatar::handle_metadata_pubsub_event(&from, &mut tx, items); let new_events = avatar::handle_metadata_pubsub_event(&from, &mut tx, items);
events.extend(new_events); events.extend(new_events);
@ -82,10 +84,13 @@ pub(crate) fn handle_iq_result(from: &Jid, elem: Element) -> impl IntoIterator<I
let mut events = Vec::new(); let mut events = Vec::new();
let pubsub = PubSub::try_from(elem).unwrap(); let pubsub = PubSub::try_from(elem).unwrap();
if let PubSub::Items(items) = pubsub { if let PubSub::Items(items) = pubsub {
if items.node.0 == ns::AVATAR_DATA { match items.node.0.clone() {
#[cfg(feature = "avatars")]
node if node == ns::AVATAR_DATA => {
let new_events = avatar::handle_data_pubsub_iq(&from, &items); let new_events = avatar::handle_data_pubsub_iq(&from, &items);
events.extend(new_events); events.extend(new_events);
} else if items.node.0 == ns::BOOKMARKS2 { },
node if node == ns::BOOKMARKS2 => {
events.push(Event::LeaveAllRooms); events.push(Event::LeaveAllRooms);
for item in items.items { for item in items.items {
let item = item.0; let item = item.0;
@ -100,6 +105,8 @@ pub(crate) fn handle_iq_result(from: &Jid, elem: Element) -> impl IntoIterator<I
Err(err) => panic!("Wrong payload type in bookmarks 2 item: {}", err), Err(err) => panic!("Wrong payload type in bookmarks 2 item: {}", err),
} }
} }
},
_ => unimplemented!()
} }
} }
events events