sms-receiver 1.0.0

Library for receiving SMS messages.
Documentation
use crate::kdeconnect_client::{
    Connection, ConversationMessage, ConversationMessageCreated, ConversationMessageUpdated,
};
use std::time::Duration;

pub struct SMS<'a> {
    conversation_proxy: dbus::blocking::Proxy<'a, &'a dbus::blocking::Connection>,
    _sms_proxy: dbus::blocking::Proxy<'a, &'a dbus::blocking::Connection>,
}

impl<'a> SMS<'a> {
    pub fn new(connection: &'a Connection, device_id: &str) -> Self {
        Self {
            conversation_proxy: connection.0.with_proxy(
                "org.kde.kdeconnect",
                format!("/modules/kdeconnect/devices/{}", device_id),
                Duration::from_millis(5000),
            ),
            _sms_proxy: connection.0.with_proxy(
                "org.kde.kdeconnect",
                format!("/modules/kdeconnect/devices/{}/sms", device_id),
                Duration::from_millis(5000),
            ),
        }
    }

    pub fn on_conversation_created<F>(&self, mut f: F) -> Result<dbus::channel::Token, dbus::Error>
    where
        F: FnMut(ConversationMessage) -> () + Send + 'static,
    {
        self.conversation_proxy.match_signal(
            move |data: ConversationMessageCreated,
                  _: &dbus::blocking::Connection,
                  _: &dbus::Message| {
                f(data.0);
                true
            },
        )
    }

    pub fn on_conversation_updated<F>(&self, mut f: F) -> Result<dbus::channel::Token, dbus::Error>
    where
        F: FnMut(ConversationMessage) -> () + Send + 'static,
    {
        self.conversation_proxy.match_signal(
            move |data: ConversationMessageUpdated,
                  _: &dbus::blocking::Connection,
                  _: &dbus::Message| {
                f(data.0);
                true
            },
        )
    }
}