parent
a46587fb6e
commit
4992bec146
2 changed files with 32 additions and 2 deletions
|
|
@ -38,6 +38,7 @@ pub struct Page {
|
||||||
cosmic_applet_config: cosmic_config::Config,
|
cosmic_applet_config: cosmic_config::Config,
|
||||||
first_day_of_week: usize,
|
first_day_of_week: usize,
|
||||||
military_time: bool,
|
military_time: bool,
|
||||||
|
show_seconds: bool,
|
||||||
ntp_enabled: bool,
|
ntp_enabled: bool,
|
||||||
show_date_in_top_panel: bool,
|
show_date_in_top_panel: bool,
|
||||||
timezone_context: bool,
|
timezone_context: bool,
|
||||||
|
|
@ -63,6 +64,16 @@ impl Default for Page {
|
||||||
false
|
false
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let show_seconds = cosmic_applet_config
|
||||||
|
.get("show_seconds")
|
||||||
|
.unwrap_or_else(|err| {
|
||||||
|
if !matches!(err, cosmic_config::Error::NoConfigDirectory) {
|
||||||
|
error!(?err, "Failed to read config 'show_seconds'");
|
||||||
|
}
|
||||||
|
|
||||||
|
false
|
||||||
|
});
|
||||||
|
|
||||||
let first_day_of_week = cosmic_applet_config
|
let first_day_of_week = cosmic_applet_config
|
||||||
.get("first_day_of_week")
|
.get("first_day_of_week")
|
||||||
.unwrap_or_else(|err| {
|
.unwrap_or_else(|err| {
|
||||||
|
|
@ -89,6 +100,7 @@ impl Default for Page {
|
||||||
formatted_date: String::new(),
|
formatted_date: String::new(),
|
||||||
local_time: None,
|
local_time: None,
|
||||||
military_time,
|
military_time,
|
||||||
|
show_seconds,
|
||||||
ntp_enabled: false,
|
ntp_enabled: false,
|
||||||
show_date_in_top_panel,
|
show_date_in_top_panel,
|
||||||
timezone: None,
|
timezone: None,
|
||||||
|
|
@ -181,6 +193,15 @@ impl Page {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Message::ShowSeconds(enable) => {
|
||||||
|
self.show_seconds = enable;
|
||||||
|
self.update_local_time();
|
||||||
|
|
||||||
|
if let Err(err) = self.cosmic_applet_config.set("show_seconds", enable) {
|
||||||
|
error!(?err, "Failed to set config 'show_seconds'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Message::FirstDayOfWeek(weekday) => {
|
Message::FirstDayOfWeek(weekday) => {
|
||||||
self.first_day_of_week = weekday;
|
self.first_day_of_week = weekday;
|
||||||
|
|
||||||
|
|
@ -322,7 +343,7 @@ impl Page {
|
||||||
self.local_time = Some(update_local_time());
|
self.local_time = Some(update_local_time());
|
||||||
|
|
||||||
self.formatted_date = match self.local_time {
|
self.formatted_date = match self.local_time {
|
||||||
Some(ref time) => format_date(time, self.military_time),
|
Some(ref time) => format_date(time, self.military_time, self.show_seconds),
|
||||||
None => fl!("unknown"),
|
None => fl!("unknown"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -332,6 +353,7 @@ impl Page {
|
||||||
pub enum Message {
|
pub enum Message {
|
||||||
Error(String),
|
Error(String),
|
||||||
MilitaryTime(bool),
|
MilitaryTime(bool),
|
||||||
|
ShowSeconds(bool),
|
||||||
None,
|
None,
|
||||||
FirstDayOfWeek(usize),
|
FirstDayOfWeek(usize),
|
||||||
Refresh(Info),
|
Refresh(Info),
|
||||||
|
|
@ -369,6 +391,7 @@ fn format() -> Section<crate::pages::Message> {
|
||||||
let mut descriptions = Slab::new();
|
let mut descriptions = Slab::new();
|
||||||
|
|
||||||
let military = descriptions.insert(fl!("time-format", "twenty-four"));
|
let military = descriptions.insert(fl!("time-format", "twenty-four"));
|
||||||
|
let show_seconds = descriptions.insert(fl!("time-format", "show-seconds"));
|
||||||
let first = descriptions.insert(fl!("time-format", "first"));
|
let first = descriptions.insert(fl!("time-format", "first"));
|
||||||
let show_date = descriptions.insert(fl!("time-format", "show-date"));
|
let show_date = descriptions.insert(fl!("time-format", "show-date"));
|
||||||
|
|
||||||
|
|
@ -382,6 +405,11 @@ fn format() -> Section<crate::pages::Message> {
|
||||||
settings::item::builder(§ion.descriptions[military])
|
settings::item::builder(§ion.descriptions[military])
|
||||||
.toggler(page.military_time, Message::MilitaryTime),
|
.toggler(page.military_time, Message::MilitaryTime),
|
||||||
)
|
)
|
||||||
|
// Show seconds in time format
|
||||||
|
.add(
|
||||||
|
settings::item::builder(§ion.descriptions[show_seconds])
|
||||||
|
.toggler(page.show_seconds, Message::ShowSeconds),
|
||||||
|
)
|
||||||
// First day of week
|
// First day of week
|
||||||
.add(
|
.add(
|
||||||
settings::item::builder(§ion.descriptions[first]).control(dropdown(
|
settings::item::builder(§ion.descriptions[first]).control(dropdown(
|
||||||
|
|
@ -460,7 +488,7 @@ fn locale() -> Result<Locale, Box<dyn std::error::Error>> {
|
||||||
Ok(locale)
|
Ok(locale)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn format_date(date: &DateTime<Iso>, military: bool) -> String {
|
fn format_date(date: &DateTime<Iso>, military: bool, show_seconds: bool) -> String {
|
||||||
let Ok(locale) = locale() else {
|
let Ok(locale) = locale() else {
|
||||||
return String::new();
|
return String::new();
|
||||||
};
|
};
|
||||||
|
|
@ -472,6 +500,7 @@ fn format_date(date: &DateTime<Iso>, military: bool) -> String {
|
||||||
bag.month = Some(icu::datetime::options::components::Month::Long);
|
bag.month = Some(icu::datetime::options::components::Month::Long);
|
||||||
bag.hour = Some(icu::datetime::options::components::Numeric::Numeric);
|
bag.hour = Some(icu::datetime::options::components::Numeric::Numeric);
|
||||||
bag.minute = Some(icu::datetime::options::components::Numeric::Numeric);
|
bag.minute = Some(icu::datetime::options::components::Numeric::Numeric);
|
||||||
|
bag.second = show_seconds.then_some(icu::datetime::options::components::Numeric::Numeric);
|
||||||
bag.preferences = Some(icu::datetime::options::preferences::Bag::from_hour_cycle(
|
bag.preferences = Some(icu::datetime::options::preferences::Bag::from_hour_cycle(
|
||||||
if military {
|
if military {
|
||||||
icu::datetime::options::preferences::HourCycle::H23
|
icu::datetime::options::preferences::HourCycle::H23
|
||||||
|
|
|
||||||
|
|
@ -532,6 +532,7 @@ time-zone = Time Zone
|
||||||
|
|
||||||
time-format = Date & Time Format
|
time-format = Date & Time Format
|
||||||
.twenty-four = 24-hour time
|
.twenty-four = 24-hour time
|
||||||
|
.show-seconds = Show seconds
|
||||||
.first = First day of week
|
.first = First day of week
|
||||||
.show-date = Show Date on Top Panel
|
.show-date = Show Date on Top Panel
|
||||||
.friday = Friday
|
.friday = Friday
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue