expose and test set_stock_translation to Python

This commit is contained in:
holger krekel
2019-10-09 10:58:06 +02:00
parent bdfd548779
commit da99bba025
10 changed files with 122 additions and 32 deletions

View File

@@ -403,12 +403,14 @@ int dc_set_config (dc_context_t* context, const char*
char* dc_get_config (dc_context_t* context, const char* key);
/**
* Set (translated) stock string
* Set stock string translation.
*
* The function will emit warnings if it returns an error state.
*
* @param context The context object
* @param stock_id the integer id of the stock message
* @param stock_id the integer id of the stock message (DC_STR_*)
* @param stock_msg the message to be used
* @return void
* @return int (==0 on error, 1 on success)
*/
int dc_set_stock_translation(dc_context_t* context, uint32_t, const char* value);

View File

@@ -25,6 +25,7 @@ use num_traits::{FromPrimitive, ToPrimitive};
use deltachat::contact::Contact;
use deltachat::context::Context;
use deltachat::dc_tools::{as_path, as_str, dc_strdup, to_string_lossy, OsStrExt, StrExt};
use deltachat::stock::StockMessage;
use deltachat::*;
// as C lacks a good and portable error handling,
@@ -350,19 +351,25 @@ pub unsafe extern "C" fn dc_set_stock_translation(
) -> libc::c_int {
if context.is_null() || stock_msg.is_null() {
eprintln!("ignoring careless call to dc_set_stock_string");
return;
return 0;
}
let msg = as_str(stock_msg);
let msg = as_str(stock_msg).to_string();
let ffi_context = &*context;
ffi_context
.with_inner(|ctx| match ctx.set_stock_translation(stock_id, msg) {
Ok(()) => 1,
Err(err) => {
warn!(ctx, "could not set translation: {}", err);
.with_inner(|ctx| match StockMessage::from_u32(stock_id) {
Some(id) => match ctx.set_stock_translation(id, msg) {
Ok(()) => 1,
Err(err) => {
warn!(ctx, "set_stock_translation failed: {}", err);
0
}
},
None => {
warn!(ctx, "invalid stock message id {}", stock_id);
0
}
})
.unwrap_or(())
.unwrap_or(0)
}
#[no_mangle]