use crate::enums::msnp_status::MsnpStatus;
use crate::errors::contact_error::ContactError;
use crate::errors::sdk_error::SdkError;
use crate::event_handler::EventHandler;
use crate::{Config, Event, MsnpList, PersonalMessage, Switchboard};
use std::sync::Arc;
use tokio::runtime::Runtime;
#[derive(uniffi::Object)]
pub struct Client {
inner: crate::client::Client,
rt: Runtime,
}
#[uniffi::export]
impl Client {
#[uniffi::constructor]
pub fn new(server: &str, port: u16) -> Result<Self, SdkError> {
let rt = Runtime::new().or(Err(SdkError::CouldNotCreateRuntime))?;
let client = rt.block_on(async { crate::client::Client::new(server, port).await })?;
Ok(Self { inner: client, rt })
}
pub fn add_event_handler(&self, handler: Arc<dyn EventHandler>) {
self.rt
.block_on(async { self.inner.add_event_handler(handler) })
}
pub async fn login(
&self,
email: String,
password: &str,
nexus_url: &str,
client_name: &str,
version: &str,
) -> Result<Event, SdkError> {
self.rt.block_on(async {
self.inner
.login(email, password, nexus_url, client_name, version)
.await
})
}
pub async fn get_config(&self, config_url: &str) -> Result<Config, SdkError> {
self.rt
.block_on(async { self.inner.get_config(config_url).await })
}
pub async fn set_presence(&self, presence: MsnpStatus) -> Result<(), SdkError> {
self.inner.set_presence(presence).await
}
pub async fn set_personal_message(
&self,
personal_message: &PersonalMessage,
) -> Result<(), SdkError> {
self.inner.set_personal_message(personal_message).await
}
pub async fn set_display_name(&self, display_name: &str) -> Result<(), SdkError> {
self.inner.set_display_name(display_name).await
}
pub async fn set_contact_display_name(
&self,
guid: &str,
display_name: &str,
) -> Result<(), ContactError> {
self.inner
.set_contact_display_name(guid, display_name)
.await
}
pub async fn add_contact(
&self,
email: &str,
display_name: &str,
list: MsnpList,
) -> Result<Event, ContactError> {
self.inner.add_contact(email, display_name, list).await
}
pub async fn remove_contact(&self, email: &str, list: MsnpList) -> Result<(), ContactError> {
self.inner.remove_contact(email, list).await
}
pub async fn remove_contact_from_forward_list(&self, guid: &str) -> Result<(), ContactError> {
self.inner.remove_contact_from_forward_list(guid).await
}
pub async fn block_contact(&self, email: &str) -> Result<(), ContactError> {
self.inner.block_contact(email).await
}
pub async fn unblock_contact(&self, email: &str) -> Result<(), ContactError> {
self.inner.unblock_contact(email).await
}
pub async fn create_group(&self, name: &str) -> Result<(), ContactError> {
self.inner.create_group(name).await
}
pub async fn delete_group(&self, guid: &str) -> Result<(), ContactError> {
self.inner.delete_group(guid).await
}
pub async fn rename_group(&self, guid: &str, new_name: &str) -> Result<(), ContactError> {
self.inner.rename_group(guid, new_name).await
}
pub async fn add_contact_to_group(
&self,
guid: &str,
group_guid: &str,
) -> Result<(), ContactError> {
self.inner.add_contact_to_group(guid, group_guid).await
}
pub async fn remove_contact_from_group(
&self,
guid: &str,
group_guid: &str,
) -> Result<(), ContactError> {
self.inner.remove_contact_from_group(guid, group_guid).await
}
pub async fn set_gtc(&self, gtc: &str) -> Result<(), SdkError> {
self.inner.set_gtc(gtc).await
}
pub async fn set_blp(&self, blp: &str) -> Result<(), SdkError> {
self.inner.set_blp(blp).await
}
pub async fn create_session(&self, email: &str) -> Result<Switchboard, SdkError> {
self.rt
.block_on(async { self.inner.create_session(email).await })
}
pub async fn set_display_picture(&self, display_picture: Vec<u8>) -> Result<String, SdkError> {
self.inner.set_display_picture(display_picture).await
}
pub async fn disconnect(&self) -> Result<(), SdkError> {
self.inner.disconnect().await
}
}