translate the string for qr code

This commit is contained in:
Floris Bruynooghe
2023-02-14 12:07:02 +01:00
parent 323535584b
commit e1087b4145
4 changed files with 27 additions and 13 deletions

View File

@@ -94,12 +94,7 @@ impl BackupProvider {
biased;
res = Self::prepare_inner(context, dir) => {
match res {
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)
},
Ok(slf) => Ok(slf),
Err(err) => {
error!(context, "Failed to set up second device setup: {:#}", err);
Err(err)
@@ -153,6 +148,7 @@ impl BackupProvider {
context.emit_event(SendProgress::CollectionCreated.into());
let provider = Provider::builder(db).auth_token(token).spawn()?;
context.emit_event(SendProgress::ProviderListening.into());
info!(context, "Waiting for remote to connect");
let ticket = provider.ticket(hash);
Ok((provider, ticket))
}

View File

@@ -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`
/// into [`FromStr`].
pub fn format_backup(qr: Qr) -> Result<String> {
pub fn format_backup(qr: &Qr) -> Result<String> {
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")),
}
}

View File

@@ -12,7 +12,8 @@ use crate::{
contact::{Contact, ContactId},
context::Context,
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> {
@@ -61,10 +62,10 @@ pub async fn generate_backup_qr(context: &Context, qr: Qr) -> Result<String> {
};
let content = format!("{DCBACKUP_SCHEME}{ticket}");
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(
description,
&description,
&content,
&color,
avatar,
@@ -297,6 +298,7 @@ mod tests {
use testdir::testdir;
use crate::imex::BackupProvider;
use crate::qr::format_backup;
use crate::test_utils::TestContextManager;
use super::*;
@@ -322,6 +324,7 @@ mod tests {
let provider = BackupProvider::prepare(&ctx, &dir).await.unwrap();
let qr = provider.qr();
println!("{}", format_backup(&qr).unwrap());
let rendered = generate_backup_qr(&ctx, qr).await.unwrap();
tokio::fs::write(dir.join("qr.svg"), &rendered)
.await

View File

@@ -404,6 +404,9 @@ pub enum StockMessage {
#[strum(props(fallback = "Chat protection disabled by %1$s."))]
ProtectionDisabledBy = 161,
#[strum(props(fallback = "Scan to set up second device for %1$s"))]
BackupTransferQr = 162,
}
impl StockMessage {
@@ -740,14 +743,14 @@ pub(crate) async fn setup_contact_qr_description(
display_name: &str,
addr: &str,
) -> String {
let name = &if display_name == addr {
let name = if display_name == addr {
addr.to_owned()
} else {
format!("{display_name} ({addr})")
};
translated(context, StockMessage::SetupContactQRDescription)
.await
.replace1(name)
.replace1(&name)
}
/// Stock string: `Scan to join %1$s`.
@@ -1239,6 +1242,18 @@ pub(crate) async fn aeap_explanation_and_link(
.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 {
/// Set the stock string for the [StockMessage].
///