mirror of
https://github.com/chatmail/core.git
synced 2026-05-06 16:36:59 +03:00
generate qr codes
This commit is contained in:
@@ -2204,6 +2204,67 @@ pub unsafe extern "C" fn dc_imex(
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn dc_send_backup(
|
||||
context: *mut dc_context_t,
|
||||
folder: *const libc::c_char,
|
||||
passphrase: *const libc::c_char,
|
||||
) -> *mut dc_backup_sender {
|
||||
if context.is_null() {
|
||||
eprintln!("ignoring careless call to dc_send_backup()");
|
||||
return ptr::null_mut();
|
||||
}
|
||||
|
||||
let passphrase = to_opt_string_lossy(passphrase);
|
||||
let ctx = &*context;
|
||||
|
||||
if let Some(folder) = to_opt_string_lossy(folder) {
|
||||
block_on(async move {
|
||||
imex::send_backup(ctx, folder.as_ref(), passphrase)
|
||||
.await
|
||||
.map(|(sender, transfer)| {
|
||||
Box::into_raw(Box::new(dc_backup_sender { sender, transfer }))
|
||||
})
|
||||
.log_err(ctx, "send_backup failed")
|
||||
.unwrap_or_else(|_| ptr::null_mut())
|
||||
})
|
||||
} else {
|
||||
eprintln!("dc_imex called without a valid directory");
|
||||
ptr::null_mut()
|
||||
}
|
||||
}
|
||||
|
||||
pub struct dc_backup_sender {
|
||||
sender: iroh_share::Sender,
|
||||
transfer: iroh_share::SenderTransfer,
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn dc_backup_sender_qr(
|
||||
ctx: *mut dc_context_t,
|
||||
bs: *const dc_backup_sender,
|
||||
) -> *mut libc::c_char {
|
||||
if ctx.is_null() || bs.is_null() {
|
||||
eprintln!("ignoring careless call to dc_backup_sender_qr");
|
||||
return ptr::null_mut();
|
||||
}
|
||||
let ctx = &*ctx;
|
||||
let bs = &*bs;
|
||||
let ticket = bs.transfer.ticket();
|
||||
|
||||
qr_code_generator::generate_backup_qr_code(&ticket)
|
||||
.map(|s| s.strdup())
|
||||
.log_err(ctx, "generate_backup_qr_code failed")
|
||||
.unwrap_or_else(|_| ptr::null_mut())
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn dc_backup_sender_unref(bs: *mut dc_backup_sender) {
|
||||
if !bs.is_null() {
|
||||
let _ = Box::from_raw(bs);
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn dc_imex_has_backup(
|
||||
context: *mut dc_context_t,
|
||||
|
||||
@@ -50,6 +50,7 @@ impl Lot {
|
||||
Qr::FprMismatch { .. } => None,
|
||||
Qr::FprWithoutAddr { fingerprint, .. } => Some(fingerprint),
|
||||
Qr::Account { domain } => Some(domain),
|
||||
Qr::Backup { .. } => None,
|
||||
Qr::WebrtcInstance { domain, .. } => Some(domain),
|
||||
Qr::Addr { draft, .. } => draft.as_deref(),
|
||||
Qr::Url { url } => Some(url),
|
||||
@@ -101,6 +102,7 @@ impl Lot {
|
||||
Qr::FprMismatch { .. } => LotState::QrFprMismatch,
|
||||
Qr::FprWithoutAddr { .. } => LotState::QrFprWithoutAddr,
|
||||
Qr::Account { .. } => LotState::QrAccount,
|
||||
Qr::Backup { .. } => LotState::QrBackup,
|
||||
Qr::WebrtcInstance { .. } => LotState::QrWebrtcInstance,
|
||||
Qr::Addr { .. } => LotState::QrAddr,
|
||||
Qr::Url { .. } => LotState::QrUrl,
|
||||
@@ -125,6 +127,7 @@ impl Lot {
|
||||
Qr::FprMismatch { contact_id } => contact_id.unwrap_or_default().to_u32(),
|
||||
Qr::FprWithoutAddr { .. } => Default::default(),
|
||||
Qr::Account { .. } => Default::default(),
|
||||
Qr::Backup { .. } => Default::default(),
|
||||
Qr::WebrtcInstance { .. } => Default::default(),
|
||||
Qr::Addr { contact_id, .. } => contact_id.to_u32(),
|
||||
Qr::Url { .. } => Default::default(),
|
||||
@@ -173,6 +176,9 @@ pub enum LotState {
|
||||
/// text1=domain
|
||||
QrAccount = 250,
|
||||
|
||||
/// TODO
|
||||
QrBackup = 251,
|
||||
|
||||
/// text1=domain, text2=instance pattern
|
||||
QrWebrtcInstance = 260,
|
||||
|
||||
|
||||
Reference in New Issue
Block a user