mirror of
https://github.com/zed-industries/zed.git
synced 2025-02-04 10:12:47 +00:00
Format timestamps more tersely in the notification panel
Co-authored-by: Piotr <piotr@zed.dev>
This commit is contained in:
parent
8766e5f0d0
commit
2f0eaafc39
3 changed files with 53 additions and 29 deletions
|
@ -1,6 +1,5 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
channel_view::ChannelView, format_timestamp, is_channels_feature_enabled, render_avatar,
|
channel_view::ChannelView, is_channels_feature_enabled, render_avatar, ChatPanelSettings,
|
||||||
ChatPanelSettings,
|
|
||||||
};
|
};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use call::ActiveCall;
|
use call::ActiveCall;
|
||||||
|
@ -874,6 +873,31 @@ impl Panel for ChatPanel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn format_timestamp(
|
||||||
|
mut timestamp: OffsetDateTime,
|
||||||
|
mut now: OffsetDateTime,
|
||||||
|
local_timezone: UtcOffset,
|
||||||
|
) -> String {
|
||||||
|
timestamp = timestamp.to_offset(local_timezone);
|
||||||
|
now = now.to_offset(local_timezone);
|
||||||
|
|
||||||
|
let today = now.date();
|
||||||
|
let date = timestamp.date();
|
||||||
|
let mut hour = timestamp.hour();
|
||||||
|
let mut part = "am";
|
||||||
|
if hour > 12 {
|
||||||
|
hour -= 12;
|
||||||
|
part = "pm";
|
||||||
|
}
|
||||||
|
if date == today {
|
||||||
|
format!("{:02}:{:02}{}", hour, timestamp.minute(), part)
|
||||||
|
} else if date.next_day() == Some(today) {
|
||||||
|
format!("yesterday at {:02}:{:02}{}", hour, timestamp.minute(), part)
|
||||||
|
} else {
|
||||||
|
format!("{:02}/{}/{}", date.month() as u32, date.day(), date.year())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn render_icon_button<V: View>(style: &IconButton, svg_path: &'static str) -> impl Element<V> {
|
fn render_icon_button<V: View>(style: &IconButton, svg_path: &'static str) -> impl Element<V> {
|
||||||
Svg::new(svg_path)
|
Svg::new(svg_path)
|
||||||
.with_color(style.color)
|
.with_color(style.color)
|
||||||
|
|
|
@ -21,7 +21,6 @@ use gpui::{
|
||||||
};
|
};
|
||||||
use std::{rc::Rc, sync::Arc};
|
use std::{rc::Rc, sync::Arc};
|
||||||
use theme::AvatarStyle;
|
use theme::AvatarStyle;
|
||||||
use time::{OffsetDateTime, UtcOffset};
|
|
||||||
use util::ResultExt;
|
use util::ResultExt;
|
||||||
use workspace::AppState;
|
use workspace::AppState;
|
||||||
|
|
||||||
|
@ -161,31 +160,6 @@ fn render_avatar<T: 'static>(
|
||||||
.into_any()
|
.into_any()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn format_timestamp(
|
|
||||||
mut timestamp: OffsetDateTime,
|
|
||||||
mut now: OffsetDateTime,
|
|
||||||
local_timezone: UtcOffset,
|
|
||||||
) -> String {
|
|
||||||
timestamp = timestamp.to_offset(local_timezone);
|
|
||||||
now = now.to_offset(local_timezone);
|
|
||||||
|
|
||||||
let today = now.date();
|
|
||||||
let date = timestamp.date();
|
|
||||||
let mut hour = timestamp.hour();
|
|
||||||
let mut part = "am";
|
|
||||||
if hour > 12 {
|
|
||||||
hour -= 12;
|
|
||||||
part = "pm";
|
|
||||||
}
|
|
||||||
if date == today {
|
|
||||||
format!("{:02}:{:02}{}", hour, timestamp.minute(), part)
|
|
||||||
} else if date.next_day() == Some(today) {
|
|
||||||
format!("yesterday at {:02}:{:02}{}", hour, timestamp.minute(), part)
|
|
||||||
} else {
|
|
||||||
format!("{:02}/{}/{}", date.month() as u32, date.day(), date.year())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn is_channels_feature_enabled(cx: &gpui::WindowContext<'_>) -> bool {
|
fn is_channels_feature_enabled(cx: &gpui::WindowContext<'_>) -> bool {
|
||||||
cx.is_staff() || cx.has_flag::<ChannelsAlpha>()
|
cx.is_staff() || cx.has_flag::<ChannelsAlpha>()
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::{chat_panel::ChatPanel, format_timestamp, render_avatar, NotificationPanelSettings};
|
use crate::{chat_panel::ChatPanel, render_avatar, NotificationPanelSettings};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use channel::ChannelStore;
|
use channel::ChannelStore;
|
||||||
use client::{Client, Notification, User, UserStore};
|
use client::{Client, Notification, User, UserStore};
|
||||||
|
@ -848,3 +848,29 @@ impl workspace::notifications::Notification for NotificationToast {
|
||||||
matches!(event, ToastEvent::Dismiss)
|
matches!(event, ToastEvent::Dismiss)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn format_timestamp(
|
||||||
|
mut timestamp: OffsetDateTime,
|
||||||
|
mut now: OffsetDateTime,
|
||||||
|
local_timezone: UtcOffset,
|
||||||
|
) -> String {
|
||||||
|
timestamp = timestamp.to_offset(local_timezone);
|
||||||
|
now = now.to_offset(local_timezone);
|
||||||
|
|
||||||
|
let today = now.date();
|
||||||
|
let date = timestamp.date();
|
||||||
|
if date == today {
|
||||||
|
let difference = now - timestamp;
|
||||||
|
if difference >= Duration::from_secs(3600) {
|
||||||
|
format!("{}h", difference.whole_seconds() / 3600)
|
||||||
|
} else if difference >= Duration::from_secs(60) {
|
||||||
|
format!("{}m", difference.whole_seconds() / 60)
|
||||||
|
} else {
|
||||||
|
"just now".to_string()
|
||||||
|
}
|
||||||
|
} else if date.next_day() == Some(today) {
|
||||||
|
format!("yesterday")
|
||||||
|
} else {
|
||||||
|
format!("{:02}/{}/{}", date.month() as u32, date.day(), date.year())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue