mirror of
https://github.com/chatmail/core.git
synced 2026-05-02 12:56:30 +03:00
put jsonrpc stuff in own module
This commit is contained in:
@@ -4427,78 +4427,75 @@ pub unsafe extern "C" fn dc_accounts_get_next_event(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "jsonrpc")]
|
#[cfg(feature = "jsonrpc")]
|
||||||
use deltachat_jsonrpc::api::CommandApi;
|
mod jsonrpc {
|
||||||
#[cfg(feature = "jsonrpc")]
|
use super::*;
|
||||||
use deltachat_jsonrpc::yerpc::{MessageHandle, RpcHandle};
|
use deltachat_jsonrpc::api::CommandApi;
|
||||||
|
use deltachat_jsonrpc::yerpc::{MessageHandle, RpcHandle};
|
||||||
|
|
||||||
#[cfg(feature = "jsonrpc")]
|
pub struct dc_json_api_instance_t {
|
||||||
pub struct dc_json_api_instance_t {
|
receiver: async_std::channel::Receiver<deltachat_jsonrpc::yerpc::Message>,
|
||||||
receiver: async_std::channel::Receiver<deltachat_jsonrpc::yerpc::Message>,
|
handle: MessageHandle<CommandApi>,
|
||||||
handle: MessageHandle<CommandApi>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "jsonrpc")]
|
|
||||||
#[no_mangle]
|
|
||||||
pub unsafe extern "C" fn dc_get_json_api(
|
|
||||||
account_manager: *mut dc_accounts_t,
|
|
||||||
) -> *mut dc_json_api_instance_t {
|
|
||||||
if account_manager.is_null() {
|
|
||||||
eprintln!("ignoring careless call to dc_get_json_api()");
|
|
||||||
return ptr::null_mut();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let cmd_api =
|
#[no_mangle]
|
||||||
deltachat_jsonrpc::api::CommandApi::new_from_cffi((*account_manager).inner.clone());
|
pub unsafe extern "C" fn dc_get_json_api(
|
||||||
|
account_manager: *mut dc_accounts_t,
|
||||||
|
) -> *mut dc_json_api_instance_t {
|
||||||
|
if account_manager.is_null() {
|
||||||
|
eprintln!("ignoring careless call to dc_get_json_api()");
|
||||||
|
return ptr::null_mut();
|
||||||
|
}
|
||||||
|
|
||||||
let (request_handle, receiver) = RpcHandle::new();
|
let cmd_api =
|
||||||
let handle = MessageHandle::new(request_handle, cmd_api);
|
deltachat_jsonrpc::api::CommandApi::new_from_cffi((*account_manager).inner.clone());
|
||||||
|
|
||||||
let instance = dc_json_api_instance_t { receiver, handle };
|
let (request_handle, receiver) = RpcHandle::new();
|
||||||
|
let handle = MessageHandle::new(request_handle, cmd_api);
|
||||||
|
|
||||||
Box::into_raw(Box::new(instance))
|
let instance = dc_json_api_instance_t { receiver, handle };
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "jsonrpc")]
|
Box::into_raw(Box::new(instance))
|
||||||
#[no_mangle]
|
|
||||||
pub unsafe extern "C" fn dc_json_api_unref(json_api_instance: *mut dc_json_api_instance_t) {
|
|
||||||
if json_api_instance.is_null() {
|
|
||||||
eprintln!("ignoring careless call to dc_json_api_unref()");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Box::from_raw(json_api_instance);
|
#[no_mangle]
|
||||||
}
|
pub unsafe extern "C" fn dc_json_api_unref(json_api_instance: *mut dc_json_api_instance_t) {
|
||||||
|
if json_api_instance.is_null() {
|
||||||
|
eprintln!("ignoring careless call to dc_json_api_unref()");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "jsonrpc")]
|
Box::from_raw(json_api_instance);
|
||||||
#[no_mangle]
|
|
||||||
pub unsafe extern "C" fn dc_json_request(
|
|
||||||
json_api_instance: *mut dc_json_api_instance_t,
|
|
||||||
request: *const libc::c_char,
|
|
||||||
) {
|
|
||||||
if json_api_instance.is_null() || request.is_null() {
|
|
||||||
eprintln!("ignoring careless call to dc_json_request()");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let api = &*json_api_instance;
|
#[no_mangle]
|
||||||
let handle = &api.handle;
|
pub unsafe extern "C" fn dc_json_request(
|
||||||
let request = to_string_lossy(request);
|
json_api_instance: *mut dc_json_api_instance_t,
|
||||||
async_std::task::spawn(async move {
|
request: *const libc::c_char,
|
||||||
handle.handle_message(&request).await;
|
) {
|
||||||
});
|
if json_api_instance.is_null() || request.is_null() {
|
||||||
}
|
eprintln!("ignoring careless call to dc_json_request()");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "jsonrpc")]
|
let api = &*json_api_instance;
|
||||||
#[no_mangle]
|
let handle = &api.handle;
|
||||||
pub unsafe extern "C" fn dc_get_next_json_response(
|
let request = to_string_lossy(request);
|
||||||
json_api_instance: *mut dc_json_api_instance_t,
|
async_std::task::spawn(async move {
|
||||||
) -> *mut libc::c_char {
|
handle.handle_message(&request).await;
|
||||||
if json_api_instance.is_null() {
|
});
|
||||||
eprintln!("ignoring careless call to dc_get_next_json_response()");
|
}
|
||||||
return ptr::null_mut();
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn dc_get_next_json_response(
|
||||||
|
json_api_instance: *mut dc_json_api_instance_t,
|
||||||
|
) -> *mut libc::c_char {
|
||||||
|
if json_api_instance.is_null() {
|
||||||
|
eprintln!("ignoring careless call to dc_get_next_json_response()");
|
||||||
|
return ptr::null_mut();
|
||||||
|
}
|
||||||
|
let api = &*json_api_instance;
|
||||||
|
async_std::task::block_on(api.receiver.recv())
|
||||||
|
.map(|result| serde_json::to_string(&result).unwrap_or_default().strdup())
|
||||||
|
.unwrap_or(ptr::null_mut())
|
||||||
}
|
}
|
||||||
let api = &*json_api_instance;
|
|
||||||
async_std::task::block_on(api.receiver.recv())
|
|
||||||
.map(|result| serde_json::to_string(&result).unwrap_or_default().strdup())
|
|
||||||
.unwrap_or(ptr::null_mut())
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user