diff --git a/deltachat-jsonrpc/src/api.rs b/deltachat-jsonrpc/src/api.rs index 3af97db87a..1237624430 100644 --- a/deltachat-jsonrpc/src/api.rs +++ b/deltachat-jsonrpc/src/api.rs @@ -53,6 +53,7 @@ use types::contact::{ContactObject, VcardContact}; use types::events::Event; use types::http::HttpResponse; use types::message::{MessageData, MessageObject, MessageReadReceipt}; +use types::notify_state::JsonrpcNotifyState; use types::provider_info::ProviderInfo; use types::reactions::JsonrpcReactions; use types::webxdc::WebxdcMessageInfo; @@ -312,6 +313,12 @@ impl CommandApi { } } + /// Get the current push notification state. + async fn get_push_state(&self, account_id: u32) -> Result { + let ctx = self.get_context(account_id).await?; + Ok(ctx.push_state().await.into()) + } + /// Get the combined filesize of an account in bytes async fn get_account_file_size(&self, account_id: u32) -> Result { let ctx = self.get_context(account_id).await?; diff --git a/deltachat-jsonrpc/src/api/types/mod.rs b/deltachat-jsonrpc/src/api/types/mod.rs index 0f49fcaa37..c71a995c8f 100644 --- a/deltachat-jsonrpc/src/api/types/mod.rs +++ b/deltachat-jsonrpc/src/api/types/mod.rs @@ -8,6 +8,7 @@ pub mod http; pub mod location; pub mod login_param; pub mod message; +pub mod notify_state; pub mod provider_info; pub mod qr; pub mod reactions; diff --git a/deltachat-jsonrpc/src/api/types/notify_state.rs b/deltachat-jsonrpc/src/api/types/notify_state.rs new file mode 100644 index 0000000000..027f0ee23d --- /dev/null +++ b/deltachat-jsonrpc/src/api/types/notify_state.rs @@ -0,0 +1,26 @@ +use deltachat::push::NotifyState; +use serde::Serialize; +use typescript_type_def::TypeDef; + +#[derive(Serialize, TypeDef, schemars::JsonSchema)] +#[serde(rename = "NotifyState")] +pub enum JsonrpcNotifyState { + /// Not subscribed to push notifications. + NotConnected, + + /// Subscribed to heartbeat push notifications. + Heartbeat, + + /// Subscribed to push notifications for new messages. + Connected, +} + +impl From for JsonrpcNotifyState { + fn from(state: NotifyState) -> Self { + match state { + NotifyState::NotConnected => Self::NotConnected, + NotifyState::Heartbeat => Self::Heartbeat, + NotifyState::Connected => Self::Connected, + } + } +} diff --git a/src/lib.rs b/src/lib.rs index d3d30e3868..089b486868 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -98,7 +98,7 @@ pub mod color; pub mod html; pub mod net; pub mod plaintext; -mod push; +pub mod push; mod stats; pub use stats::SecurejoinSource; pub use stats::SecurejoinUiPath; diff --git a/src/push.rs b/src/push.rs index a16f946da7..5c9933c9b2 100644 --- a/src/push.rs +++ b/src/push.rs @@ -170,6 +170,7 @@ pub(crate) struct PushSubscriberState { heartbeat_subscribed: bool, } +/// Push notification state #[derive(Debug, Default, Clone, Copy, PartialEq, Eq, FromPrimitive, ToPrimitive)] #[repr(i8)] pub enum NotifyState {