Finish implementing the Contacts interface

This commit is contained in:
2020-05-16 20:54:05 +01:00
parent 9564a16aa2
commit 9473a13b65
3 changed files with 31 additions and 16 deletions

View File

@@ -303,7 +303,7 @@ impl Connection {
.add(conn_iface) .add(conn_iface)
.add(avatars_iface) .add(avatars_iface)
.add(contacts_iface) .add(contacts_iface)
// .add(contact_list_iface) // .add(contact_list_iface)
.add(requests_iface) .add(requests_iface)
.add(simple_presence_iface), .add(simple_presence_iface),
); );

View File

@@ -19,7 +19,7 @@ pub fn connection_interfaces() -> Vec<String> {
"org.freedesktop.Telepathy.Connection".to_string(), "org.freedesktop.Telepathy.Connection".to_string(),
"org.freedesktop.Telepathy.Connection.Interface.Avatars".to_string(), "org.freedesktop.Telepathy.Connection.Interface.Avatars".to_string(),
"org.freedesktop.Telepathy.Connection.Interface.Contacts".to_string(), "org.freedesktop.Telepathy.Connection.Interface.Contacts".to_string(),
// "org.freedesktop.Telepathy.Connection.Interface.ContactList".to_string(), // "org.freedesktop.Telepathy.Connection.Interface.ContactList".to_string(),
"org.freedesktop.Telepathy.Connection.Interface.Requests".to_string(), "org.freedesktop.Telepathy.Connection.Interface.Requests".to_string(),
"org.freedesktop.Telepathy.Connection.Interface.SimplePresence".to_string(), "org.freedesktop.Telepathy.Connection.Interface.SimplePresence".to_string(),
] ]

View File

@@ -2,7 +2,7 @@ use crate::telepathy;
use dbus::arg::{RefArg, Variant}; use dbus::arg::{RefArg, Variant};
use dbus::tree::MethodErr; use dbus::tree::MethodErr;
use deltachat::contact::Contact; use deltachat::contact::{Contact, Origin};
use std::collections::HashMap; use std::collections::HashMap;
use super::Connection; use super::Connection;
@@ -51,7 +51,7 @@ impl telepathy::ConnectionInterfaceContacts for Connection {
"org.freedesktop.Telepathy.Connection.Interface.Avatars/token".to_string(), "org.freedesktop.Telepathy.Connection.Interface.Avatars/token".to_string(),
Variant(Box::new("".to_string())), Variant(Box::new("".to_string())),
); );
/* /*
// TODO: we need to publish DBUS services on these endpoints // TODO: we need to publish DBUS services on these endpoints
props.insert( props.insert(
"org.freedesktop.Telepathy.Connection.Interface.ContactList/publish".to_string(), "org.freedesktop.Telepathy.Connection.Interface.ContactList/publish".to_string(),
@@ -62,7 +62,7 @@ impl telepathy::ConnectionInterfaceContacts for Connection {
"org.freedesktop.Telepathy.Connection.Interface.ContactList/subscribe".to_string(), "org.freedesktop.Telepathy.Connection.Interface.ContactList/subscribe".to_string(),
Variant(Box::new(4)), Variant(Box::new(4)),
); );
*/ */
out.insert(*id, props); out.insert(*id, props);
} }
@@ -80,7 +80,22 @@ impl telepathy::ConnectionInterfaceContacts for Connection {
identifier, identifier,
interfaces interfaces
); );
Err(MethodErr::no_arg()) // FIXME: should be NotImplemented?
let id = {
let ctx = &self.ctx.read().unwrap();
Contact::lookup_id_by_addr(ctx, identifier, Origin::Unknown)
};
if id == 0 {
return Err(MethodErr::no_arg()); // FIXME: should be InvalidHandle
};
let mut contacts = self.get_contact_attributes(vec![id], interfaces, true)?;
if let Some(contact) = contacts.remove(&id) {
Ok((id, contact))
} else {
Err(MethodErr::no_arg()) // FIXME: should be InvalidHandle
}
} }
fn contact_attribute_interfaces(&self) -> Result<Vec<String>, MethodErr> { fn contact_attribute_interfaces(&self) -> Result<Vec<String>, MethodErr> {
@@ -89,7 +104,7 @@ impl telepathy::ConnectionInterfaceContacts for Connection {
Ok(vec![ Ok(vec![
"org.freedesktop.Telepathy.Connection".to_string(), "org.freedesktop.Telepathy.Connection".to_string(),
"org.freedesktop.Telepathy.Connection.Interface.Avatars".to_string(), "org.freedesktop.Telepathy.Connection.Interface.Avatars".to_string(),
// "org.freedesktop.Telepathy.Connection.Interface.ContactList".to_string(), // "org.freedesktop.Telepathy.Connection.Interface.ContactList".to_string(),
]) ])
} }
} }