Compare commits

..

2 Commits

Author SHA1 Message Date
1e481d4c9a Wire up the additional channel interfaces a bit 2020-05-17 22:49:41 +01:00
e5e06c55f9 Reorder Channel::new args 2020-05-17 22:37:25 +01:00
5 changed files with 27 additions and 11 deletions

View File

@@ -31,9 +31,10 @@ pub const HANDLE_TYPE_GROUP: HandleType = 4; // Deprecated
// FIXME: I'm assuming that all channels will be of type text and 1-1 for now. // FIXME: I'm assuming that all channels will be of type text and 1-1 for now.
#[derive(Debug)] #[derive(Debug)]
pub struct Channel { pub struct Channel {
ctx: Arc<RwLock<dc::context::Context>>,
actq: mpsc::Sender<DbusAction>, actq: mpsc::Sender<DbusAction>,
ctx: Arc<RwLock<dc::context::Context>>,
path: dbus::Path<'static>, path: dbus::Path<'static>,
requested: bool,
target_handle: u32, // Who we're talking to target_handle: u32, // Who we're talking to
} }
@@ -44,16 +45,18 @@ pub fn channel_interfaces() -> Vec<String> {
impl Channel { impl Channel {
pub fn new( pub fn new(
actq: mpsc::Sender<DbusAction>,
ctx: Arc<RwLock<dc::context::Context>>, ctx: Arc<RwLock<dc::context::Context>>,
path: dbus::Path<'static>, path: dbus::Path<'static>,
requested: bool,
target_handle: u32, target_handle: u32,
actq: mpsc::Sender<DbusAction>,
) -> Self { ) -> Self {
Channel { Channel {
actq,
ctx, ctx,
path, path,
requested,
target_handle, target_handle,
actq,
} }
} }

View File

@@ -77,7 +77,7 @@ impl telepathy::Channel for Channel {
fn requested(&self) -> Result<bool> { fn requested(&self) -> Result<bool> {
println!("Channel::requested()"); println!("Channel::requested()");
Ok(false) // FIXME: channels initiated by ourselves *will* be requested Ok(true) // FIXME: channels initiated by ourselves *will* be requested
} }
fn initiator_handle(&self) -> Result<u32> { fn initiator_handle(&self) -> Result<u32> {

View File

@@ -32,26 +32,31 @@ impl telepathy::ChannelInterfaceMessages for Channel {
fn supported_content_types(&self) -> Result<Vec<String>> { fn supported_content_types(&self) -> Result<Vec<String>> {
println!("Channel::supported_content_types()"); println!("Channel::supported_content_types()");
Err(MethodErr::no_arg())
Ok(vec!["text/plain".to_string()]) // TODO: image support
} }
fn message_types(&self) -> Result<Vec<u32>> { fn message_types(&self) -> Result<Vec<u32>> {
println!("Channel::message_types()"); println!("Channel::message_types()");
Err(MethodErr::no_arg())
Ok(vec![0]) // Normal messages. FIXME: MDNs too
} }
fn message_part_support_flags(&self) -> Result<u32> { fn message_part_support_flags(&self) -> Result<u32> {
println!("Channel::message_part_support_flags()"); println!("Channel::message_part_support_flags()");
Err(MethodErr::no_arg())
Ok(0) // FIXME: support multipart messages
} }
fn pending_messages(&self) -> Result<Vec<Vec<HashMap<String, VarArg>>>> { fn pending_messages(&self) -> Result<Vec<Vec<HashMap<String, VarArg>>>> {
println!("Channel::pending_messages()"); println!("Channel::pending_messages()");
Err(MethodErr::no_arg())
Ok(vec![]) // FIXME: check for pending messages
} }
fn delivery_reporting_support(&self) -> Result<u32> { fn delivery_reporting_support(&self) -> Result<u32> {
println!("Channel::delivery_reporting_support()"); println!("Channel::delivery_reporting_support()");
Err(MethodErr::no_arg())
Ok(0) // FIXME: MDNs
} }
} }

View File

@@ -1,4 +1,5 @@
use crate::telepathy; use crate::telepathy;
use crate::telepathy::ChannelInterfaceMessages;
use dbus::tree::MethodErr; use dbus::tree::MethodErr;
use super::{Channel, Result}; use super::{Channel, Result};
@@ -28,7 +29,8 @@ impl telepathy::ChannelTypeText for Channel {
fn get_message_types(&self) -> Result<Vec<u32>> { fn get_message_types(&self) -> Result<Vec<u32>> {
println!("Channel::get_message_types()"); println!("Channel::get_message_types()");
Err(MethodErr::no_arg())
self.message_types()
} }
fn list_pending_messages(&self, clear: bool) -> Result<Vec<PendingMessagesSpec>> { fn list_pending_messages(&self, clear: bool) -> Result<Vec<PendingMessagesSpec>> {

View File

@@ -403,7 +403,13 @@ impl Connection {
} }
let handle = contacts.first().unwrap(); let handle = contacts.first().unwrap();
let chan = Channel::new(ctx.clone(), chan_path, *handle, actq.clone()); let chan = Channel::new(
actq.clone(),
ctx.clone(),
chan_path,
false, // FIXME: this needs to handle requested channels
*handle,
);
actq.send(DbusAction::NewChannel(chan)).unwrap(); actq.send(DbusAction::NewChannel(chan)).unwrap();
actq.send(act).unwrap(); actq.send(act).unwrap();