mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 01:16:31 +03:00
translate the string for qr code
This commit is contained in:
@@ -94,12 +94,7 @@ impl BackupProvider {
|
|||||||
biased;
|
biased;
|
||||||
res = Self::prepare_inner(context, dir) => {
|
res = Self::prepare_inner(context, dir) => {
|
||||||
match res {
|
match res {
|
||||||
Ok(slf) => {
|
Ok(slf) => Ok(slf),
|
||||||
// TODO: maybe this is the wrong place to log this
|
|
||||||
// TODO: Also needs to log progress somehow.
|
|
||||||
info!(context, "Waiting for remote to connect");
|
|
||||||
Ok(slf)
|
|
||||||
},
|
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
error!(context, "Failed to set up second device setup: {:#}", err);
|
error!(context, "Failed to set up second device setup: {:#}", err);
|
||||||
Err(err)
|
Err(err)
|
||||||
@@ -153,6 +148,7 @@ impl BackupProvider {
|
|||||||
context.emit_event(SendProgress::CollectionCreated.into());
|
context.emit_event(SendProgress::CollectionCreated.into());
|
||||||
let provider = Provider::builder(db).auth_token(token).spawn()?;
|
let provider = Provider::builder(db).auth_token(token).spawn()?;
|
||||||
context.emit_event(SendProgress::ProviderListening.into());
|
context.emit_event(SendProgress::ProviderListening.into());
|
||||||
|
info!(context, "Waiting for remote to connect");
|
||||||
let ticket = provider.ticket(hash);
|
let ticket = provider.ticket(hash);
|
||||||
Ok((provider, ticket))
|
Ok((provider, ticket))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,9 +167,9 @@ pub async fn check_qr(context: &Context, qr: &str) -> Result<Qr> {
|
|||||||
///
|
///
|
||||||
/// TODO: Refactor this so all variants have a correct [`Display`] and transform `check_qr`
|
/// TODO: Refactor this so all variants have a correct [`Display`] and transform `check_qr`
|
||||||
/// into [`FromStr`].
|
/// into [`FromStr`].
|
||||||
pub fn format_backup(qr: Qr) -> Result<String> {
|
pub fn format_backup(qr: &Qr) -> Result<String> {
|
||||||
match qr {
|
match qr {
|
||||||
Qr::Backup { ticket } => Ok(format!("{DCBACKUP_SCHEME}{ticket}")),
|
Qr::Backup { ref ticket } => Ok(format!("{DCBACKUP_SCHEME}{ticket}")),
|
||||||
_ => Err(anyhow!("Not a backup QR code")),
|
_ => Err(anyhow!("Not a backup QR code")),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,8 @@ use crate::{
|
|||||||
contact::{Contact, ContactId},
|
contact::{Contact, ContactId},
|
||||||
context::Context,
|
context::Context,
|
||||||
qr::{Qr, DCBACKUP_SCHEME},
|
qr::{Qr, DCBACKUP_SCHEME},
|
||||||
securejoin, stock_str,
|
securejoin,
|
||||||
|
stock_str::{self, backup_transfer_qr},
|
||||||
};
|
};
|
||||||
|
|
||||||
pub async fn get_securejoin_qr_svg(context: &Context, chat_id: Option<ChatId>) -> Result<String> {
|
pub async fn get_securejoin_qr_svg(context: &Context, chat_id: Option<ChatId>) -> Result<String> {
|
||||||
@@ -61,10 +62,10 @@ pub async fn generate_backup_qr(context: &Context, qr: Qr) -> Result<String> {
|
|||||||
};
|
};
|
||||||
let content = format!("{DCBACKUP_SCHEME}{ticket}");
|
let content = format!("{DCBACKUP_SCHEME}{ticket}");
|
||||||
let (avatar, displayname, _addr, color) = self_info(context).await?;
|
let (avatar, displayname, _addr, color) = self_info(context).await?;
|
||||||
let description = "Scan to setup second device"; // TODO: translation!
|
let description = backup_transfer_qr(context).await?;
|
||||||
|
|
||||||
inner_generate_secure_join_qr_code(
|
inner_generate_secure_join_qr_code(
|
||||||
description,
|
&description,
|
||||||
&content,
|
&content,
|
||||||
&color,
|
&color,
|
||||||
avatar,
|
avatar,
|
||||||
@@ -297,6 +298,7 @@ mod tests {
|
|||||||
use testdir::testdir;
|
use testdir::testdir;
|
||||||
|
|
||||||
use crate::imex::BackupProvider;
|
use crate::imex::BackupProvider;
|
||||||
|
use crate::qr::format_backup;
|
||||||
use crate::test_utils::TestContextManager;
|
use crate::test_utils::TestContextManager;
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
@@ -322,6 +324,7 @@ mod tests {
|
|||||||
let provider = BackupProvider::prepare(&ctx, &dir).await.unwrap();
|
let provider = BackupProvider::prepare(&ctx, &dir).await.unwrap();
|
||||||
let qr = provider.qr();
|
let qr = provider.qr();
|
||||||
|
|
||||||
|
println!("{}", format_backup(&qr).unwrap());
|
||||||
let rendered = generate_backup_qr(&ctx, qr).await.unwrap();
|
let rendered = generate_backup_qr(&ctx, qr).await.unwrap();
|
||||||
tokio::fs::write(dir.join("qr.svg"), &rendered)
|
tokio::fs::write(dir.join("qr.svg"), &rendered)
|
||||||
.await
|
.await
|
||||||
|
|||||||
@@ -404,6 +404,9 @@ pub enum StockMessage {
|
|||||||
|
|
||||||
#[strum(props(fallback = "Chat protection disabled by %1$s."))]
|
#[strum(props(fallback = "Chat protection disabled by %1$s."))]
|
||||||
ProtectionDisabledBy = 161,
|
ProtectionDisabledBy = 161,
|
||||||
|
|
||||||
|
#[strum(props(fallback = "Scan to set up second device for %1$s"))]
|
||||||
|
BackupTransferQr = 162,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl StockMessage {
|
impl StockMessage {
|
||||||
@@ -740,14 +743,14 @@ pub(crate) async fn setup_contact_qr_description(
|
|||||||
display_name: &str,
|
display_name: &str,
|
||||||
addr: &str,
|
addr: &str,
|
||||||
) -> String {
|
) -> String {
|
||||||
let name = &if display_name == addr {
|
let name = if display_name == addr {
|
||||||
addr.to_owned()
|
addr.to_owned()
|
||||||
} else {
|
} else {
|
||||||
format!("{display_name} ({addr})")
|
format!("{display_name} ({addr})")
|
||||||
};
|
};
|
||||||
translated(context, StockMessage::SetupContactQRDescription)
|
translated(context, StockMessage::SetupContactQRDescription)
|
||||||
.await
|
.await
|
||||||
.replace1(name)
|
.replace1(&name)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Stock string: `Scan to join %1$s`.
|
/// Stock string: `Scan to join %1$s`.
|
||||||
@@ -1239,6 +1242,18 @@ pub(crate) async fn aeap_explanation_and_link(
|
|||||||
.replace2(new_addr)
|
.replace2(new_addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) async fn backup_transfer_qr(context: &Context) -> Result<String> {
|
||||||
|
let contact = Contact::get_by_id(context, ContactId::SELF).await?;
|
||||||
|
let addr = contact.get_addr();
|
||||||
|
let full_name = match context.get_config(Config::Displayname).await? {
|
||||||
|
Some(name) if name != addr => format!("{name} ({addr})"),
|
||||||
|
_ => addr.to_string(),
|
||||||
|
};
|
||||||
|
Ok(translated(context, StockMessage::BackupTransferQr)
|
||||||
|
.await
|
||||||
|
.replace1(&full_name))
|
||||||
|
}
|
||||||
|
|
||||||
impl Context {
|
impl Context {
|
||||||
/// Set the stock string for the [StockMessage].
|
/// Set the stock string for the [StockMessage].
|
||||||
///
|
///
|
||||||
|
|||||||
Reference in New Issue
Block a user