Fix Rust 1.64 clippy warnings and tests

This commit is contained in:
link2xt
2022-09-25 02:08:22 +00:00
parent cd6d181bbc
commit 450d113993
22 changed files with 139 additions and 164 deletions

View File

@@ -169,7 +169,7 @@ pub unsafe extern "C" fn dc_context_unref(context: *mut dc_context_t) {
eprintln!("ignoring careless call to dc_context_unref()");
return;
}
Box::from_raw(context);
drop(Box::from_raw(context));
}
#[no_mangle]
@@ -463,7 +463,7 @@ pub unsafe extern "C" fn dc_event_unref(a: *mut dc_event_t) {
return;
}
Box::from_raw(a);
drop(Box::from_raw(a));
}
#[no_mangle]
@@ -687,7 +687,7 @@ pub unsafe extern "C" fn dc_event_emitter_unref(emitter: *mut dc_event_emitter_t
return;
}
Box::from_raw(emitter);
drop(Box::from_raw(emitter));
}
#[no_mangle]
@@ -2426,7 +2426,7 @@ pub unsafe extern "C" fn dc_array_unref(a: *mut dc_array::dc_array_t) {
return;
}
Box::from_raw(a);
drop(Box::from_raw(a));
}
#[no_mangle]
@@ -2607,7 +2607,7 @@ pub unsafe extern "C" fn dc_chatlist_unref(chatlist: *mut dc_chatlist_t) {
eprintln!("ignoring careless call to dc_chatlist_unref()");
return;
}
Box::from_raw(chatlist);
drop(Box::from_raw(chatlist));
}
#[no_mangle]
@@ -2752,7 +2752,7 @@ pub unsafe extern "C" fn dc_chat_unref(chat: *mut dc_chat_t) {
return;
}
Box::from_raw(chat);
drop(Box::from_raw(chat));
}
#[no_mangle]
@@ -3022,7 +3022,7 @@ pub unsafe extern "C" fn dc_msg_unref(msg: *mut dc_msg_t) {
return;
}
Box::from_raw(msg);
drop(Box::from_raw(msg));
}
#[no_mangle]
@@ -3744,7 +3744,7 @@ pub unsafe extern "C" fn dc_contact_unref(contact: *mut dc_contact_t) {
eprintln!("ignoring careless call to dc_contact_unref()");
return;
}
Box::from_raw(contact);
drop(Box::from_raw(contact));
}
#[no_mangle]
@@ -3908,7 +3908,7 @@ pub unsafe extern "C" fn dc_lot_unref(lot: *mut dc_lot_t) {
return;
}
Box::from_raw(lot);
drop(Box::from_raw(lot));
}
#[no_mangle]
@@ -4200,7 +4200,8 @@ pub unsafe extern "C" fn dc_accounts_get_account(
}
let accounts = &*accounts;
block_on(async move { accounts.read().await.get_account(id).await })
block_on(accounts.read())
.get_account(id)
.map(|ctx| Box::into_raw(Box::new(ctx)))
.unwrap_or_else(std::ptr::null_mut)
}
@@ -4215,7 +4216,8 @@ pub unsafe extern "C" fn dc_accounts_get_selected_account(
}
let accounts = &*accounts;
block_on(async move { accounts.read().await.get_selected_account().await })
block_on(accounts.read())
.get_selected_account()
.map(|ctx| Box::into_raw(Box::new(ctx)))
.unwrap_or_else(std::ptr::null_mut)
}
@@ -4360,7 +4362,7 @@ pub unsafe extern "C" fn dc_accounts_get_all(accounts: *mut dc_accounts_t) -> *m
}
let accounts = &*accounts;
let list = block_on(async move { accounts.read().await.get_all().await });
let list = block_on(accounts.read()).get_all();
let array: dc_array_t = list.into();
Box::into_raw(Box::new(array))
@@ -4430,7 +4432,7 @@ pub unsafe extern "C" fn dc_accounts_get_event_emitter(
}
let accounts = &*accounts;
let emitter = block_on(async move { accounts.read().await.get_event_emitter().await });
let emitter = block_on(accounts.read()).get_event_emitter();
Box::into_raw(Box::new(emitter))
}

View File

@@ -65,7 +65,6 @@ impl CommandApi {
.read()
.await
.get_account(id)
.await
.ok_or_else(|| anyhow!("account with id {} not found", id))?;
Ok(sc)
}
@@ -100,7 +99,7 @@ impl CommandApi {
}
async fn get_all_account_ids(&self) -> Vec<u32> {
self.accounts.read().await.get_all().await
self.accounts.read().await.get_all()
}
/// Select account id for internally selected state.
@@ -112,14 +111,14 @@ impl CommandApi {
/// Get the selected account id of the internal state..
/// TODO: Likely this is deprecated as all methods take an account id now.
async fn get_selected_account_id(&self) -> Option<u32> {
self.accounts.read().await.get_selected_account_id().await
self.accounts.read().await.get_selected_account_id()
}
/// Get a list of all configured accounts.
async fn get_all_accounts(&self) -> Result<Vec<Account>> {
let mut accounts = Vec::new();
for id in self.accounts.read().await.get_all().await {
let context_option = self.accounts.read().await.get_account(id).await;
for id in self.accounts.read().await.get_all() {
let context_option = self.accounts.read().await.get_account(id);
if let Some(ctx) = context_option {
accounts.push(Account::from_context(&ctx, id).await?)
} else {
@@ -135,7 +134,7 @@ impl CommandApi {
/// Get top-level info for an account.
async fn get_account_info(&self, account_id: u32) -> Result<Account> {
let context_option = self.accounts.read().await.get_account(account_id).await;
let context_option = self.accounts.read().await.get_account(account_id);
if let Some(ctx) = context_option {
Ok(Account::from_context(&ctx, account_id).await?)
} else {

View File

@@ -44,7 +44,7 @@ async fn handler(ws: WebSocketUpgrade, Extension(api): Extension<CommandApi>) ->
let (client, out_receiver) = RpcClient::new();
let session = RpcSession::new(client.clone(), api.clone());
tokio::spawn(async move {
let events = api.accounts.read().await.get_event_emitter().await;
let events = api.accounts.read().await.get_event_emitter();
while let Some(event) = events.recv().await {
let event = event_to_json_rpc_notification(event);
client.send_notification("event", Some(event)).await.ok();

View File

@@ -69,19 +69,19 @@ impl Accounts {
}
/// Get an account by its `id`:
pub async fn get_account(&self, id: u32) -> Option<Context> {
pub fn get_account(&self, id: u32) -> Option<Context> {
self.accounts.get(&id).cloned()
}
/// Get the currently selected account.
pub async fn get_selected_account(&self) -> Option<Context> {
let id = self.config.get_selected_account().await;
pub fn get_selected_account(&self) -> Option<Context> {
let id = self.config.get_selected_account();
self.accounts.get(&id).cloned()
}
/// Returns the currently selected account's id or None if no account is selected.
pub async fn get_selected_account_id(&self) -> Option<u32> {
match self.config.get_selected_account().await {
pub fn get_selected_account_id(&self) -> Option<u32> {
match self.config.get_selected_account() {
0 => None,
id => Some(id),
}
@@ -135,7 +135,7 @@ impl Accounts {
ctx.stop_io().await;
drop(ctx);
if let Some(cfg) = self.config.get_account(id).await {
if let Some(cfg) = self.config.get_account(id) {
// Spend up to 1 minute trying to remove the files.
// Files may remain locked up to 30 seconds due to r2d2 bug:
// https://github.com/sfackler/r2d2/issues/99
@@ -171,7 +171,7 @@ impl Accounts {
ensure!(dbfile.exists(), "no database found: {}", dbfile.display());
ensure!(blobdir.exists(), "no blobdir found: {}", blobdir.display());
let old_id = self.config.get_selected_account().await;
let old_id = self.config.get_selected_account();
// create new account
let account_config = self
@@ -225,7 +225,7 @@ impl Accounts {
}
/// Get a list of all account ids.
pub async fn get_all(&self) -> Vec<u32> {
pub fn get_all(&self) -> Vec<u32> {
self.accounts.keys().copied().collect()
}
@@ -281,7 +281,7 @@ impl Accounts {
}
/// Returns event emitter.
pub async fn get_event_emitter(&self) -> EventEmitter {
pub fn get_event_emitter(&self) -> EventEmitter {
self.events.get_emitter()
}
}
@@ -380,7 +380,6 @@ impl Config {
.context("failed to select just added account")?;
let cfg = self
.get_account(id)
.await
.context("failed to get just added account")?;
Ok(cfg)
}
@@ -402,11 +401,11 @@ impl Config {
self.sync().await
}
async fn get_account(&self, id: u32) -> Option<AccountConfig> {
fn get_account(&self, id: u32) -> Option<AccountConfig> {
self.inner.accounts.iter().find(|e| e.id == id).cloned()
}
pub async fn get_selected_account(&self) -> u32 {
pub fn get_selected_account(&self) -> u32 {
self.inner.selected_account
}
@@ -458,7 +457,7 @@ mod tests {
let accounts2 = Accounts::open(p).await.unwrap();
assert_eq!(accounts1.accounts.len(), 1);
assert_eq!(accounts1.config.get_selected_account().await, 1);
assert_eq!(accounts1.config.get_selected_account(), 1);
assert_eq!(accounts1.dir, accounts2.dir);
assert_eq!(accounts1.config, accounts2.config,);
@@ -472,23 +471,23 @@ mod tests {
let mut accounts = Accounts::new(p.clone()).await.unwrap();
assert_eq!(accounts.accounts.len(), 0);
assert_eq!(accounts.config.get_selected_account().await, 0);
assert_eq!(accounts.config.get_selected_account(), 0);
let id = accounts.add_account().await.unwrap();
assert_eq!(id, 1);
assert_eq!(accounts.accounts.len(), 1);
assert_eq!(accounts.config.get_selected_account().await, 1);
assert_eq!(accounts.config.get_selected_account(), 1);
let id = accounts.add_account().await.unwrap();
assert_eq!(id, 2);
assert_eq!(accounts.config.get_selected_account().await, id);
assert_eq!(accounts.config.get_selected_account(), id);
assert_eq!(accounts.accounts.len(), 2);
accounts.select_account(1).await.unwrap();
assert_eq!(accounts.config.get_selected_account().await, 1);
assert_eq!(accounts.config.get_selected_account(), 1);
accounts.remove_account(1).await.unwrap();
assert_eq!(accounts.config.get_selected_account().await, 2);
assert_eq!(accounts.config.get_selected_account(), 2);
assert_eq!(accounts.accounts.len(), 1);
}
@@ -498,17 +497,17 @@ mod tests {
let p: PathBuf = dir.path().join("accounts");
let mut accounts = Accounts::new(p.clone()).await?;
assert!(accounts.get_selected_account().await.is_none());
assert_eq!(accounts.config.get_selected_account().await, 0);
assert!(accounts.get_selected_account().is_none());
assert_eq!(accounts.config.get_selected_account(), 0);
let id = accounts.add_account().await?;
assert!(accounts.get_selected_account().await.is_some());
assert!(accounts.get_selected_account().is_some());
assert_eq!(id, 1);
assert_eq!(accounts.accounts.len(), 1);
assert_eq!(accounts.config.get_selected_account().await, id);
assert_eq!(accounts.config.get_selected_account(), id);
accounts.remove_account(id).await?;
assert!(accounts.get_selected_account().await.is_none());
assert!(accounts.get_selected_account().is_none());
Ok(())
}
@@ -520,7 +519,7 @@ mod tests {
let mut accounts = Accounts::new(p.clone()).await.unwrap();
assert_eq!(accounts.accounts.len(), 0);
assert_eq!(accounts.config.get_selected_account().await, 0);
assert_eq!(accounts.config.get_selected_account(), 0);
let extern_dbfile: PathBuf = dir.path().join("other");
let ctx = Context::new(&extern_dbfile, 0, Events::new())
@@ -537,9 +536,9 @@ mod tests {
.await
.unwrap();
assert_eq!(accounts.accounts.len(), 1);
assert_eq!(accounts.config.get_selected_account().await, 1);
assert_eq!(accounts.config.get_selected_account(), 1);
let ctx = accounts.get_selected_account().await.unwrap();
let ctx = accounts.get_selected_account().unwrap();
assert_eq!(
"me@mail.com",
ctx.get_config(crate::config::Config::Addr)
@@ -562,7 +561,7 @@ mod tests {
assert_eq!(id, expected_id);
}
let ids = accounts.get_all().await;
let ids = accounts.get_all();
for (i, expected_id) in (1..10).enumerate() {
assert_eq!(ids.get(i), Some(&expected_id));
}
@@ -577,16 +576,16 @@ mod tests {
let (id0, id1, id2) = {
let mut accounts = Accounts::new(p.clone()).await?;
accounts.add_account().await?;
let ids = accounts.get_all().await;
let ids = accounts.get_all();
assert_eq!(ids.len(), 1);
let id0 = *ids.first().unwrap();
let ctx = accounts.get_account(id0).await.unwrap();
let ctx = accounts.get_account(id0).unwrap();
ctx.set_config(crate::config::Config::Addr, Some("one@example.org"))
.await?;
let id1 = accounts.add_account().await?;
let ctx = accounts.get_account(id1).await.unwrap();
let ctx = accounts.get_account(id1).unwrap();
ctx.set_config(crate::config::Config::Addr, Some("two@example.org"))
.await?;
@@ -597,7 +596,7 @@ mod tests {
}
let id2 = accounts.add_account().await?;
let ctx = accounts.get_account(id2).await.unwrap();
let ctx = accounts.get_account(id2).unwrap();
ctx.set_config(crate::config::Config::Addr, Some("three@example.org"))
.await?;
@@ -611,31 +610,31 @@ mod tests {
let (id0_reopened, id1_reopened, id2_reopened) = {
let accounts = Accounts::new(p.clone()).await?;
let ctx = accounts.get_selected_account().await.unwrap();
let ctx = accounts.get_selected_account().unwrap();
assert_eq!(
ctx.get_config(crate::config::Config::Addr).await?,
Some("two@example.org".to_string())
);
let ids = accounts.get_all().await;
let ids = accounts.get_all();
assert_eq!(ids.len(), 3);
let id0 = *ids.first().unwrap();
let ctx = accounts.get_account(id0).await.unwrap();
let ctx = accounts.get_account(id0).unwrap();
assert_eq!(
ctx.get_config(crate::config::Config::Addr).await?,
Some("one@example.org".to_string())
);
let id1 = *ids.get(1).unwrap();
let t = accounts.get_account(id1).await.unwrap();
let t = accounts.get_account(id1).unwrap();
assert_eq!(
t.get_config(crate::config::Config::Addr).await?,
Some("two@example.org".to_string())
);
let id2 = *ids.get(2).unwrap();
let ctx = accounts.get_account(id2).await.unwrap();
let ctx = accounts.get_account(id2).unwrap();
assert_eq!(
ctx.get_config(crate::config::Config::Addr).await?,
Some("three@example.org".to_string())
@@ -661,7 +660,7 @@ mod tests {
assert_eq!(accounts.accounts.len(), 0);
// Create event emitter.
let event_emitter = accounts.get_event_emitter().await;
let event_emitter = accounts.get_event_emitter();
// Test that event emitter does not return `None` immediately.
let duration = std::time::Duration::from_millis(1);
@@ -692,7 +691,6 @@ mod tests {
.context("failed to add closed account")?;
let account = accounts
.get_selected_account()
.await
.context("failed to get account")?;
assert_eq!(account.id, account_id);
let passphrase_set_success = account
@@ -707,7 +705,6 @@ mod tests {
.context("failed to create second accounts manager")?;
let account = accounts
.get_selected_account()
.await
.context("failed to get account")?;
assert_eq!(account.is_open().await, false);

View File

@@ -326,10 +326,7 @@ impl<'a> BlobObject<'a> {
// max_bytes is 20_000 bytes: Outlook servers don't allow headers larger than 32k.
// 32 / 4 * 3 = 24k if you account for base64 encoding. To be safe, we reduced this to 20k.
if let Some(new_name) = self
.recode_to_size(context, blob_abs, img_wh, Some(20_000))
.await?
{
if let Some(new_name) = self.recode_to_size(context, blob_abs, img_wh, Some(20_000))? {
self.name = new_name;
}
Ok(())
@@ -352,8 +349,7 @@ impl<'a> BlobObject<'a> {
};
if self
.recode_to_size(context, blob_abs, img_wh, None)
.await?
.recode_to_size(context, blob_abs, img_wh, None)?
.is_some()
{
return Err(format_err!(
@@ -363,7 +359,7 @@ impl<'a> BlobObject<'a> {
Ok(())
}
async fn recode_to_size(
fn recode_to_size(
&self,
context: &Context,
mut blob_abs: PathBuf,
@@ -746,7 +742,6 @@ mod tests {
let blob = BlobObject::new_from_path(&t, &avatar_blob).await.unwrap();
blob.recode_to_size(&t, blob.to_abs_path(), 1000, Some(3000))
.await
.unwrap();
assert!(file_size(&avatar_blob).await <= 3000);
assert!(file_size(&avatar_blob).await > 2000);

View File

@@ -198,7 +198,7 @@ impl Context {
let rel_path = self.sql.get_raw_config(key).await?;
rel_path.map(|p| get_abs_path(self, &p).to_string_lossy().into_owned())
}
Config::SysVersion => Some((&*DC_VERSION_STR).clone()),
Config::SysVersion => Some((*DC_VERSION_STR).clone()),
Config::SysMsgsizeMaxRecommended => Some(format!("{}", RECOMMENDED_FILE_SIZE)),
Config::SysConfigKeys => Some(get_config_keys_string()),
_ => self.sql.get_raw_config(key).await?,

View File

@@ -579,8 +579,7 @@ async fn try_imap_one_param(
let (_s, r) = async_channel::bounded(1);
let mut imap = match Imap::new(param, socks5_config.clone(), addr, provider_strict_tls, r).await
{
let mut imap = match Imap::new(param, socks5_config.clone(), addr, provider_strict_tls, r) {
Err(err) => {
info!(context, "failure: {}", err);
return Err(ConfigurationError {

View File

@@ -2278,7 +2278,7 @@ Hi."#;
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_was_seen_recently() -> Result<()> {
let mut tcm = TestContextManager::new().await;
let mut tcm = TestContextManager::new();
let alice = tcm.alice().await;
let bob = tcm.bob().await;

View File

@@ -138,7 +138,7 @@ impl Context {
if !blobdir.exists() {
tokio::fs::create_dir_all(&blobdir).await?;
}
let context = Context::with_blobdir(dbfile.into(), blobdir, id, events).await?;
let context = Context::with_blobdir(dbfile.into(), blobdir, id, events)?;
Ok(context)
}
@@ -169,7 +169,7 @@ impl Context {
self.sql.check_passphrase(passphrase).await
}
pub(crate) async fn with_blobdir(
pub(crate) fn with_blobdir(
dbfile: PathBuf,
blobdir: PathBuf,
id: u32,
@@ -883,7 +883,7 @@ mod tests {
let tmp = tempfile::tempdir().unwrap();
let dbfile = tmp.path().join("db.sqlite");
let blobdir = PathBuf::new();
let res = Context::with_blobdir(dbfile, blobdir, 1, Events::new()).await;
let res = Context::with_blobdir(dbfile, blobdir, 1, Events::new());
assert!(res.is_err());
}
@@ -892,7 +892,7 @@ mod tests {
let tmp = tempfile::tempdir().unwrap();
let dbfile = tmp.path().join("db.sqlite");
let blobdir = tmp.path().join("blobs");
let res = Context::with_blobdir(dbfile, blobdir, 1, Events::new()).await;
let res = Context::with_blobdir(dbfile, blobdir, 1, Events::new());
assert!(res.is_err());
}

View File

@@ -98,7 +98,7 @@ impl HtmlMsgParser {
if parser.html.is_empty() {
if let Some(plain) = &parser.plain {
parser.html = plain.to_html().await;
parser.html = plain.to_html();
}
} else {
parser.cid_to_data_recursive(context, &parsedmail).await?;

View File

@@ -237,7 +237,7 @@ impl Imap {
/// Creates new disconnected IMAP client using the specific login parameters.
///
/// `addr` is used to renew token if OAuth2 authentication is used.
pub async fn new(
pub fn new(
lp: &ServerLoginParam,
socks5_config: Option<Socks5Config>,
addr: &str,
@@ -303,8 +303,7 @@ impl Imap {
provider.strict_tls
}),
idle_interrupt,
)
.await?;
)?;
Ok(imap)
}

View File

@@ -1177,17 +1177,17 @@ impl<'a> MimeFactory<'a> {
if command == SystemMessage::MultiDeviceSync && self.is_e2ee_guaranteed() {
let json = self.msg.param.get(Param::Arg).unwrap_or_default();
let ids = self.msg.param.get(Param::Arg2).unwrap_or_default();
parts.push(context.build_sync_part(json.to_string()).await);
parts.push(context.build_sync_part(json.to_string()));
self.sync_ids_to_delete = Some(ids.to_string());
} else if command == SystemMessage::WebxdcStatusUpdate {
let json = self.msg.param.get(Param::Arg).unwrap_or_default();
parts.push(context.build_status_update_part(json).await);
parts.push(context.build_status_update_part(json));
} else if self.msg.viewtype == Viewtype::Webxdc {
if let Some(json) = context
.render_webxdc_status_update_object(self.msg.id, None)
.await?
{
parts.push(context.build_status_update_part(&json).await);
parts.push(context.build_status_update_part(&json));
}
}

View File

@@ -392,15 +392,10 @@ impl MimeMessage {
/// Parses system messages.
fn parse_system_message_headers(&mut self, context: &Context) {
if self.get_header(HeaderDef::AutocryptSetupMessage).is_some() {
self.parts = self
.parts
.iter()
.filter(|part| {
part.mimetype.is_none()
|| part.mimetype.as_ref().unwrap().as_ref() == MIME_AC_SETUP_FILE
})
.cloned()
.collect();
self.parts.retain(|part| {
part.mimetype.is_none()
|| part.mimetype.as_ref().unwrap().as_ref() == MIME_AC_SETUP_FILE
});
if self.parts.len() == 1 {
self.is_system_message = SystemMessage::AutocryptSetupMessage;

View File

@@ -21,7 +21,7 @@ pub struct PlainText {
impl PlainText {
/// Convert plain text to HTML.
/// The function handles quotes, links, fixed and floating text paragraphs.
pub async fn to_html(&self) -> String {
pub fn to_html(&self) -> String {
static LINKIFY_MAIL_RE: Lazy<regex::Regex> =
Lazy::new(|| regex::Regex::new(r#"\b([\w.\-+]+@[\w.\-]+)\b"#).unwrap());
@@ -111,8 +111,7 @@ http://link-at-start-of-line.org
flowed: false,
delsp: false,
}
.to_html()
.await;
.to_html();
assert_eq!(
html,
r##"<!DOCTYPE html>
@@ -134,8 +133,7 @@ line with <a href="https://link-mid-of-line.org">https://link-mid-of-line.org</a
flowed: false,
delsp: false,
}
.to_html()
.await;
.to_html();
assert_eq!(
html,
r#"<!DOCTYPE html>
@@ -153,8 +151,7 @@ line with &lt;<a href="http://encapsulated.link/?foo=_bar">http://encapsulated.l
flowed: false,
delsp: false,
}
.to_html()
.await;
.to_html();
assert_eq!(
html,
r#"<!DOCTYPE html>
@@ -172,8 +169,7 @@ line with nohttp://no.link here<br/>
flowed: false,
delsp: false,
}
.to_html()
.await;
.to_html();
assert_eq!(
html,
r#"<!DOCTYPE html>
@@ -191,8 +187,7 @@ just an address: <a href="mailto:foo@bar.org">foo@bar.org</a> <a href="mailto:an
flowed: true,
delsp: false,
}
.to_html()
.await;
.to_html();
assert_eq!(
html,
r#"<!DOCTYPE html>
@@ -213,8 +208,7 @@ line still line<br/>
flowed: true,
delsp: true,
}
.to_html()
.await;
.to_html();
assert_eq!(
html,
r#"<!DOCTYPE html>
@@ -235,8 +229,7 @@ linestill line<br/>
flowed: false,
delsp: false,
}
.to_html()
.await;
.to_html();
assert_eq!(
html,
r#"<!DOCTYPE html>

View File

@@ -3121,7 +3121,7 @@ Hello mailinglist!\r\n"
let chats = Chatlist::try_load(&t.ctx, 0, None, None).await.unwrap();
assert_eq!(chats.len(), 0); // Test that the message disappeared
t.evtracker.consume_events().await;
t.evtracker.consume_events();
receive_imf(&t.ctx, DC_MAILINGLIST2, false).await.unwrap();
// Check that no notification is displayed for blocked mailing list message.
@@ -4949,7 +4949,7 @@ Reply from different address
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_long_filenames() -> Result<()> {
let mut tcm = TestContextManager::new().await;
let mut tcm = TestContextManager::new();
let alice = tcm.alice().await;
let bob = tcm.bob().await;
@@ -5001,7 +5001,7 @@ Reply from different address
/// Tests that contact request is accepted automatically on outgoing message.
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_accept_outgoing() -> Result<()> {
let mut tcm = TestContextManager::new().await;
let mut tcm = TestContextManager::new();
let alice1 = tcm.alice().await;
let alice2 = tcm.alice().await;
let bob1 = tcm.bob().await;
@@ -5046,7 +5046,7 @@ Reply from different address
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_outgoing_private_reply_multidevice() -> Result<()> {
let mut tcm = TestContextManager::new().await;
let mut tcm = TestContextManager::new();
let alice1 = tcm.alice().await;
let alice2 = tcm.alice().await;
let bob = tcm.bob().await;
@@ -5134,7 +5134,7 @@ Reply from different address
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_no_private_reply_to_blocked_account() -> Result<()> {
let mut tcm = TestContextManager::new().await;
let mut tcm = TestContextManager::new();
let alice = tcm.alice().await;
let bob = tcm.bob().await;

View File

@@ -1,6 +1,6 @@
use anyhow::{bail, Context as _, Result};
use async_channel::{self as channel, Receiver, Sender};
use futures::{join, try_join};
use futures::try_join;
use futures_lite::FutureExt;
use tokio::task;
@@ -42,7 +42,7 @@ impl Context {
pub async fn maybe_network(&self) {
let lock = self.scheduler.read().await;
if let Some(scheduler) = &*lock {
scheduler.maybe_network().await;
scheduler.maybe_network();
}
connectivity::idle_interrupted(lock).await;
}
@@ -51,32 +51,32 @@ impl Context {
pub async fn maybe_network_lost(&self) {
let lock = self.scheduler.read().await;
if let Some(scheduler) = &*lock {
scheduler.maybe_network_lost().await;
scheduler.maybe_network_lost();
}
connectivity::maybe_network_lost(self, lock).await;
}
pub(crate) async fn interrupt_inbox(&self, info: InterruptInfo) {
if let Some(scheduler) = &*self.scheduler.read().await {
scheduler.interrupt_inbox(info).await;
scheduler.interrupt_inbox(info);
}
}
pub(crate) async fn interrupt_smtp(&self, info: InterruptInfo) {
if let Some(scheduler) = &*self.scheduler.read().await {
scheduler.interrupt_smtp(info).await;
scheduler.interrupt_smtp(info);
}
}
pub(crate) async fn interrupt_ephemeral_task(&self) {
if let Some(scheduler) = &*self.scheduler.read().await {
scheduler.interrupt_ephemeral_task().await;
scheduler.interrupt_ephemeral_task();
}
}
pub(crate) async fn interrupt_location(&self) {
if let Some(scheduler) = &*self.scheduler.read().await {
scheduler.interrupt_location().await;
scheduler.interrupt_location();
}
}
}
@@ -501,45 +501,41 @@ impl Scheduler {
Ok(res)
}
async fn maybe_network(&self) {
join!(
self.interrupt_inbox(InterruptInfo::new(true)),
self.interrupt_mvbox(InterruptInfo::new(true)),
self.interrupt_sentbox(InterruptInfo::new(true)),
self.interrupt_smtp(InterruptInfo::new(true))
);
fn maybe_network(&self) {
self.interrupt_inbox(InterruptInfo::new(true));
self.interrupt_mvbox(InterruptInfo::new(true));
self.interrupt_sentbox(InterruptInfo::new(true));
self.interrupt_smtp(InterruptInfo::new(true));
}
async fn maybe_network_lost(&self) {
join!(
self.interrupt_inbox(InterruptInfo::new(false)),
self.interrupt_mvbox(InterruptInfo::new(false)),
self.interrupt_sentbox(InterruptInfo::new(false)),
self.interrupt_smtp(InterruptInfo::new(false))
);
fn maybe_network_lost(&self) {
self.interrupt_inbox(InterruptInfo::new(false));
self.interrupt_mvbox(InterruptInfo::new(false));
self.interrupt_sentbox(InterruptInfo::new(false));
self.interrupt_smtp(InterruptInfo::new(false));
}
async fn interrupt_inbox(&self, info: InterruptInfo) {
self.inbox.interrupt(info).await;
fn interrupt_inbox(&self, info: InterruptInfo) {
self.inbox.interrupt(info);
}
async fn interrupt_mvbox(&self, info: InterruptInfo) {
self.mvbox.interrupt(info).await;
fn interrupt_mvbox(&self, info: InterruptInfo) {
self.mvbox.interrupt(info);
}
async fn interrupt_sentbox(&self, info: InterruptInfo) {
self.sentbox.interrupt(info).await;
fn interrupt_sentbox(&self, info: InterruptInfo) {
self.sentbox.interrupt(info);
}
async fn interrupt_smtp(&self, info: InterruptInfo) {
self.smtp.interrupt(info).await;
fn interrupt_smtp(&self, info: InterruptInfo) {
self.smtp.interrupt(info);
}
async fn interrupt_ephemeral_task(&self) {
fn interrupt_ephemeral_task(&self) {
self.ephemeral_interrupt_send.try_send(()).ok();
}
async fn interrupt_location(&self) {
fn interrupt_location(&self) {
self.location_interrupt_send.try_send(()).ok();
}
@@ -603,7 +599,7 @@ impl ConnectionState {
Ok(())
}
async fn interrupt(&self, info: InterruptInfo) {
fn interrupt(&self, info: InterruptInfo) {
// Use try_send to avoid blocking on interrupts.
self.idle_interrupt_sender.try_send(info).ok();
}
@@ -637,8 +633,8 @@ impl SmtpConnectionState {
}
/// Interrupt any form of idle.
async fn interrupt(&self, info: InterruptInfo) {
self.state.interrupt(info).await;
fn interrupt(&self, info: InterruptInfo) {
self.state.interrupt(info);
}
/// Shutdown this connection completely.
@@ -682,8 +678,8 @@ impl ImapConnectionState {
}
/// Interrupt any form of idle.
async fn interrupt(&self, info: InterruptInfo) {
self.state.interrupt(info).await;
fn interrupt(&self, info: InterruptInfo) {
self.state.interrupt(info);
}
/// Shutdown this connection completely.

View File

@@ -696,7 +696,7 @@ mod tests {
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_setup_contact() {
let mut tcm = TestContextManager::new().await;
let mut tcm = TestContextManager::new();
let alice = tcm.alice().await;
let bob = tcm.bob().await;
assert_eq!(
@@ -910,7 +910,7 @@ mod tests {
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_setup_contact_bob_knows_alice() -> Result<()> {
let mut tcm = TestContextManager::new().await;
let mut tcm = TestContextManager::new();
let alice = tcm.alice().await;
let bob = tcm.bob().await;
@@ -1035,7 +1035,7 @@ mod tests {
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_setup_contact_concurrent_calls() -> Result<()> {
let mut tcm = TestContextManager::new().await;
let mut tcm = TestContextManager::new();
let alice = tcm.alice().await;
let bob = tcm.bob().await;
@@ -1066,7 +1066,7 @@ mod tests {
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_secure_join() -> Result<()> {
let mut tcm = TestContextManager::new().await;
let mut tcm = TestContextManager::new();
let alice = tcm.alice().await;
let bob = tcm.bob().await;

View File

@@ -64,7 +64,7 @@ impl Smtp {
/// Return true if smtp was connected but is not known to
/// have been successfully used the last 60 seconds
pub async fn has_maybe_stale_connection(&self) -> bool {
pub fn has_maybe_stale_connection(&self) -> bool {
if let Some(last_success) = self.last_success {
SystemTime::now()
.duration_since(last_success)
@@ -77,7 +77,7 @@ impl Smtp {
}
/// Check whether we are connected.
pub async fn is_connected(&self) -> bool {
pub fn is_connected(&self) -> bool {
self.transport
.as_ref()
.map(|t| t.is_connected())
@@ -86,12 +86,12 @@ impl Smtp {
/// Connect using configured parameters.
pub async fn connect_configured(&mut self, context: &Context) -> Result<()> {
if self.has_maybe_stale_connection().await {
if self.has_maybe_stale_connection() {
info!(context, "Closing stale connection");
self.disconnect().await;
}
if self.is_connected().await {
if self.is_connected() {
return Ok(());
}
@@ -117,7 +117,7 @@ impl Smtp {
addr: &str,
provider_strict_tls: bool,
) -> Result<()> {
if self.is_connected().await {
if self.is_connected() {
warn!(context, "SMTP already connected.");
return Ok(());
}

View File

@@ -185,7 +185,7 @@ impl Context {
}
}
pub(crate) async fn build_sync_part(&self, json: String) -> PartBuilder {
pub(crate) fn build_sync_part(&self, json: String) -> PartBuilder {
PartBuilder::new()
.content_type(&"application/json".parse::<mime::Mime>().unwrap())
.header((

View File

@@ -44,7 +44,7 @@ pub struct TestContextManager {
}
impl TestContextManager {
pub async fn new() -> Self {
pub fn new() -> Self {
let (log_tx, _log_sink) = LogSink::create();
Self { log_tx, _log_sink }
}
@@ -858,7 +858,7 @@ impl EventTracker {
}
/// Consumes all pending events.
pub async fn consume_events(&self) {
pub fn consume_events(&self) {
while self.try_recv().is_ok() {}
}
}
@@ -1039,7 +1039,7 @@ mod tests {
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_with_both() {
let mut tcm = TestContextManager::new().await;
let mut tcm = TestContextManager::new();
let alice = tcm.alice().await;
let bob = tcm.bob().await;

View File

@@ -18,7 +18,7 @@ use crate::test_utils::TestContextManager;
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_change_primary_self_addr() -> Result<()> {
let mut tcm = TestContextManager::new().await;
let mut tcm = TestContextManager::new();
let alice = tcm.alice().await;
let bob = tcm.bob().await;
@@ -130,7 +130,7 @@ async fn check_aeap_transition(
// the case where Bob already had contact with Alice's new address
const ALICE_NEW_ADDR: &str = "fiona@example.net";
let mut tcm = TestContextManager::new().await;
let mut tcm = TestContextManager::new();
let alice = tcm.alice().await;
let bob = tcm.bob().await;
@@ -362,7 +362,7 @@ async fn get_last_info_msg(t: &TestContext, chat_id: ChatId) -> Option<Message>
/// to make Bob think that there was a transition to Fiona's address.
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_aeap_replay_attack() -> Result<()> {
let mut tcm = TestContextManager::new().await;
let mut tcm = TestContextManager::new();
let alice = tcm.alice().await;
let bob = tcm.bob().await;

View File

@@ -445,7 +445,7 @@ impl Context {
}
}
pub(crate) async fn build_status_update_part(&self, json: &str) -> PartBuilder {
pub(crate) fn build_status_update_part(&self, json: &str) -> PartBuilder {
PartBuilder::new()
.content_type(&"application/json".parse::<mime::Mime>().unwrap())
.header((