Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions deltachat-ffi/deltachat.h
Original file line number Diff line number Diff line change
Expand Up @@ -7056,11 +7056,6 @@ void dc_event_unref(dc_event_t* event);
/// `%1$s` will be replaced by a possibly more detailed, typically english, error description.
#define DC_STR_ERROR 112

/// "Not supported by your provider."
///
/// Used in the connectivity view.
#define DC_STR_NOT_SUPPORTED_BY_PROVIDER 113

/// "Messages"
///
/// Used as a subtitle in quota context; can be plural always.
Expand Down
24 changes: 19 additions & 5 deletions src/quota.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,39 @@
use std::collections::BTreeMap;
use std::time::Duration;

use anyhow::{Context as _, Result, anyhow};
use anyhow::{Context as _, Result};
use async_imap::types::{Quota, QuotaResource};

use crate::EventType;
use crate::context::Context;
use crate::imap::session::Session as ImapSession;
use crate::tools::{self, time_elapsed};
use crate::{EventType, stock_str};

/// quota icon in connectivity is "yellow".
pub const QUOTA_WARN_THRESHOLD_PERCENTAGE: u64 = 80;

/// quota icon in connectivity is "red".
pub const QUOTA_ERROR_THRESHOLD_PERCENTAGE: u64 = 95;

/// [QuotaInfo] error.
#[derive(Debug, thiserror::Error)]
pub enum Error {
/// Quota info not supported by the provider
#[error("Quota info not supported by the provider")]
NotSupportedByProvider,

/// Any other error: network, parsing, etc.
#[error("{0:#}")]
Other(#[from] anyhow::Error),
}

/// Server quota information with an update timestamp.
#[derive(Debug)]
pub struct QuotaInfo {
/// Recently loaded quota information.
/// set to `Err()` if the provider does not support quota or on other errors,
/// set to `Ok()` for valid quota information.
pub(crate) recent: Result<BTreeMap<String, Vec<QuotaResource>>>,
pub(crate) recent: Result<BTreeMap<String, Vec<QuotaResource>>, Error>,

/// When the structure was modified.
pub(crate) modified: tools::Time,
Expand Down Expand Up @@ -76,9 +88,11 @@ impl Context {
info!(self, "Transport {transport_id}: Updating quota.");

let quota = if session.can_check_quota() {
get_unique_quota_roots_and_usage(session, folder).await
get_unique_quota_roots_and_usage(session, folder)
.await
.map_err(Error::Other)
} else {
Err(anyhow!(stock_str::not_supported_by_provider(self)))
Err(Error::NotSupportedByProvider)
};

self.quota.write().await.insert(
Expand Down
6 changes: 5 additions & 1 deletion src/scheduler/connectivity.rs
Original file line number Diff line number Diff line change
Expand Up @@ -418,7 +418,11 @@ impl Context {
};
match &quota.recent {
Err(e) => {
ret += &escaper::encode_minimal(&e.to_string());
// If not supported by the provider,
// just skip the "quota" section.
if !matches!(e, crate::quota::Error::NotSupportedByProvider) {
ret += &escaper::encode_minimal(&e.to_string());
}
}
Ok(quota) => {
if quota.is_empty() {
Expand Down
8 changes: 0 additions & 8 deletions src/stock_str.rs
Original file line number Diff line number Diff line change
Expand Up @@ -189,9 +189,6 @@ pub enum StockMessage {
#[strum(props(fallback = "Error: %1$s"))]
Error = 112,

#[strum(props(fallback = "Not supported by your provider."))]
NotSupportedByProvider = 113,

#[strum(props(fallback = "Messages"))]
Messages = 114,

Expand Down Expand Up @@ -1137,11 +1134,6 @@ pub(crate) fn error(context: &Context, error: &str) -> String {
translated(context, StockMessage::Error).replace1(error)
}

/// Stock string: `Not supported by your provider.`.
pub(crate) fn not_supported_by_provider(context: &Context) -> String {
translated(context, StockMessage::NotSupportedByProvider)
}

/// Stock string: `Messages`.
/// Used as a subtitle in quota context; can be plural always.
pub(crate) fn messages(context: &Context) -> String {
Expand Down
Loading