Make avatar support optional.
This commit is contained in:
parent
a3e6ef8c3a
commit
598bbdd523
2 changed files with 31 additions and 19 deletions
|
|
@ -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,8 +134,11 @@ impl ClientBuilder<'_> {
|
||||||
let mut features = vec![
|
let mut features = vec![
|
||||||
Feature::new(ns::DISCO_INFO),
|
Feature::new(ns::DISCO_INFO),
|
||||||
];
|
];
|
||||||
if self.features.contains(&ClientFeature::Avatars) {
|
#[cfg(feature = "avatars")]
|
||||||
features.push(Feature::new(format!("{}+notify", ns::AVATAR_METADATA)));
|
{
|
||||||
|
if self.features.contains(&ClientFeature::Avatars) {
|
||||||
|
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)));
|
||||||
|
|
|
||||||
|
|
@ -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,24 +84,29 @@ 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() {
|
||||||
let new_events = avatar::handle_data_pubsub_iq(&from, &items);
|
#[cfg(feature = "avatars")]
|
||||||
events.extend(new_events);
|
node if node == ns::AVATAR_DATA => {
|
||||||
} else if items.node.0 == ns::BOOKMARKS2 {
|
let new_events = avatar::handle_data_pubsub_iq(&from, &items);
|
||||||
events.push(Event::LeaveAllRooms);
|
events.extend(new_events);
|
||||||
for item in items.items {
|
},
|
||||||
let item = item.0;
|
node if node == ns::BOOKMARKS2 => {
|
||||||
let jid = BareJid::from_str(&item.id.clone().unwrap().0).unwrap();
|
events.push(Event::LeaveAllRooms);
|
||||||
let payload = item.payload.clone().unwrap();
|
for item in items.items {
|
||||||
match Conference::try_from(payload) {
|
let item = item.0;
|
||||||
Ok(conference) => {
|
let jid = BareJid::from_str(&item.id.clone().unwrap().0).unwrap();
|
||||||
if let Autojoin::True = conference.autojoin {
|
let payload = item.payload.clone().unwrap();
|
||||||
events.push(Event::JoinRoom(jid, conference));
|
match Conference::try_from(payload) {
|
||||||
}
|
Ok(conference) => {
|
||||||
},
|
if let Autojoin::True = conference.autojoin {
|
||||||
Err(err) => panic!("Wrong payload type in bookmarks 2 item: {}", err),
|
events.push(Event::JoinRoom(jid, conference));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Err(err) => panic!("Wrong payload type in bookmarks 2 item: {}", err),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
_ => unimplemented!()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
events
|
events
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue