Add show_date_in_my_timezone pager config flag

Closes #28
pull/144/head
Manos Pitsidianakis 2021-09-15 22:19:19 +03:00
parent d1712557cb
commit 32901f57d2
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
4 changed files with 61 additions and 1 deletions

View File

@ -880,6 +880,11 @@ Minimum text width in columns.
Choose `text/html` alternative if `text/plain` is empty in `multipart/alternative` attachments.
.\" default value
.Pq Em true
.It Ic show_date_in_my_timezone Ar boolean
.Pq Em optional
Show Date: in local timezone
.\" default value
.Pq Em true
.El
.Sh LISTING
.Bl -tag -width 36n

View File

@ -1111,8 +1111,52 @@ impl Component for MailView {
})+
};
}
let find_offset = |s: &str| -> (bool, (i64, i64)) {
let mut diff = (true, (0, 0));
if let Some(pos) = s.as_bytes().iter().position(|b| *b == b'+' || *b == b'-') {
let offset = &s[pos..];
diff.0 = offset.starts_with('+');
if let (Ok(hr_offset), Ok(min_offset)) =
(offset[1..3].parse::<i64>(), offset[3..5].parse::<i64>())
{
diff.1 .0 = hr_offset;
diff.1 .1 = min_offset;
}
}
diff
};
let orig_date = envelope.date_as_str();
let date_str: std::borrow::Cow<str> = if mailbox_settings!(
context[self.coordinates.0][&self.coordinates.1]
.pager
.show_date_in_my_timezone
)
.is_true()
{
let local_date = melib::datetime::timestamp_to_string(
envelope.timestamp,
Some(melib::datetime::RFC822_DATE),
false,
);
let orig_offset = find_offset(orig_date);
let local_offset = find_offset(&local_date);
if orig_offset == local_offset {
orig_date.into()
} else {
format!(
"{} [actual timezone: {}{:02}{:02}]",
local_date,
if orig_offset.0 { '+' } else { '-' },
orig_offset.1 .0,
orig_offset.1 .1
)
.into()
}
} else {
orig_date.into()
};
print_header!(
("Date:", envelope.date_as_str()),
("Date:", date_str),
("From:", envelope.field_from_to_string()),
("To:", envelope.field_to_to_string()),
);

View File

@ -76,6 +76,11 @@ pub struct PagerSettingsOverride {
#[serde(alias = "auto-choose-multipart-alternative")]
#[serde(default)]
pub auto_choose_multipart_alternative: Option<ToggleFlag>,
#[doc = " Show Date: in my timezone"]
#[doc = " Default: true"]
#[serde(alias = "show-date-in-my-timezone")]
#[serde(default)]
pub show_date_in_my_timezone: Option<ToggleFlag>,
}
impl Default for PagerSettingsOverride {
fn default() -> Self {
@ -90,6 +95,7 @@ impl Default for PagerSettingsOverride {
split_long_lines: None,
minimum_width: None,
auto_choose_multipart_alternative: None,
show_date_in_my_timezone: None,
}
}
}

View File

@ -87,6 +87,10 @@ pub struct PagerSettings {
alias = "auto-choose-multipart-alternative"
)]
pub auto_choose_multipart_alternative: ToggleFlag,
/// Show Date: in my timezone
/// Default: true
#[serde(default = "internal_value_true", alias = "show-date-in-my-timezone")]
pub show_date_in_my_timezone: ToggleFlag,
}
impl Default for PagerSettings {
@ -102,6 +106,7 @@ impl Default for PagerSettings {
split_long_lines: true,
minimum_width: 80,
auto_choose_multipart_alternative: ToggleFlag::InternalVal(true),
show_date_in_my_timezone: ToggleFlag::InternalVal(true),
}
}
}