Skip to content

Commit 063a2ec

Browse files
committed
fix: show seconds in all duration displays across UI
Seconds were never calculated or displayed in duration formats, causing sub-minute activity to show as "0m". All duration displays now show Xh Ym Zs, Ym Zs, or Zs as appropriate.
1 parent 8c2aa35 commit 063a2ec

File tree

1 file changed

+41
-15
lines changed

1 file changed

+41
-15
lines changed

src/ui/render.rs

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,15 @@ pub fn draw(app: &App, f: &mut Frame) {
7474
let duration = item.duration;
7575
let hours = duration / 3600;
7676
let minutes = (duration % 3600) / 60;
77+
let seconds = duration % 60;
7778
let prefix = if i == *selected_index { "→ " } else { " " };
7879

7980
let time_display = if hours > 0 {
80-
format!("{}h {}m", hours, minutes)
81+
format!("{}h {}m {}s", hours, minutes, seconds)
82+
} else if minutes > 0 {
83+
format!("{}m {}s", minutes, seconds)
8184
} else {
82-
format!("{}m", minutes)
85+
format!("{}s", seconds)
8386
};
8487

8588
let clean_app = App::clean_app_name(&item.display_name);
@@ -134,12 +137,15 @@ pub fn draw(app: &App, f: &mut Frame) {
134137
let duration = item.duration;
135138
let hours = duration / 3600;
136139
let minutes = (duration % 3600) / 60;
140+
let seconds = duration % 60;
137141
let prefix = if actual_index == *selected_index { "→ " } else { " " };
138142

139143
let time_display = if hours > 0 {
140-
format!("{}h {}m", hours, minutes)
144+
format!("{}h {}m {}s", hours, minutes, seconds)
145+
} else if minutes > 0 {
146+
format!("{}m {}s", minutes, seconds)
141147
} else {
142-
format!("{}m", minutes)
148+
format!("{}s", seconds)
143149
};
144150

145151
let clean_app = App::clean_app_name(&item.display_name);
@@ -324,7 +330,12 @@ pub fn draw(app: &App, f: &mut Frame) {
324330
clean_app
325331
};
326332

327-
let display = format!("{} {} - {}m", time, display_name, minutes);
333+
let seconds = session.duration % 60;
334+
let display = if minutes > 0 {
335+
format!("{} {} - {}m {}s", time, display_name, minutes, seconds)
336+
} else {
337+
format!("{} {} - {}s", time, display_name, seconds)
338+
};
328339
let style = if idx == 0 && start_idx == 0 {
329340
Style::default().fg(Color::Yellow) // Highlight first (most recent)
330341
} else {
@@ -693,6 +704,7 @@ pub fn draw_stats(f: &mut Frame, area: Rect, data: &[crate::ui::hierarchical::Hi
693704

694705
let hours = item.duration / 3600;
695706
let minutes = (item.duration % 3600) / 60;
707+
let seconds = item.duration % 60;
696708

697709
// Check if this is a child item (hierarchical sub-entry)
698710
let is_child = item.is_sub_entry;
@@ -710,9 +722,11 @@ pub fn draw_stats(f: &mut Frame, area: Rect, data: &[crate::ui::hierarchical::Hi
710722
};
711723

712724
let time_str = if hours > 0 {
713-
format!("{}h {}m", hours, minutes)
725+
format!("{}h {}m {}s", hours, minutes, seconds)
726+
} else if minutes > 0 {
727+
format!("{}m {}s", minutes, seconds)
714728
} else {
715-
format!("{}m", minutes)
729+
format!("{}s", seconds)
716730
};
717731

718732
// Format display based on whether it's a parent or child entry
@@ -750,10 +764,13 @@ pub fn draw_stats(f: &mut Frame, area: Rect, data: &[crate::ui::hierarchical::Hi
750764
.sum();
751765
let total_hours = total_duration / 3600;
752766
let total_minutes = (total_duration % 3600) / 60;
767+
let total_seconds = total_duration % 60;
753768
let stats_title = if total_hours > 0 {
754-
format!("📈 Detailed Stats (Total: {}h {}m)", total_hours, total_minutes)
769+
format!("📈 Detailed Stats (Total: {}h {}m {}s)", total_hours, total_minutes, total_seconds)
770+
} else if total_minutes > 0 {
771+
format!("📈 Detailed Stats (Total: {}m {}s)", total_minutes, total_seconds)
755772
} else {
756-
format!("📈 Detailed Stats (Total: {}m)", total_minutes)
773+
format!("📈 Detailed Stats (Total: {}s)", total_seconds)
757774
};
758775

759776
let stats_list = List::new(stats_items)
@@ -795,10 +812,13 @@ pub fn draw_pie_chart(app: &App, f: &mut Frame, area: Rect, data: &[crate::ui::h
795812
let bar = "█".repeat(bar_length);
796813
let hours = duration / 3600;
797814
let minutes = (duration % 3600) / 60;
815+
let seconds = duration % 60;
798816
let time_str = if hours > 0 {
799-
format!("{}h {}m", hours, minutes)
817+
format!("{}h {}m {}s", hours, minutes, seconds)
818+
} else if minutes > 0 {
819+
format!("{}m {}s", minutes, seconds)
800820
} else {
801-
format!("{}m", minutes)
821+
format!("{}s", seconds)
802822
};
803823

804824
pie_lines.push(Line::from(vec![
@@ -1255,10 +1275,13 @@ pub fn draw_breakdown_section_with_style(
12551275
for (name, duration) in data[start_idx..end_idx].iter() {
12561276
let hours = duration / 3600;
12571277
let minutes = (duration % 3600) / 60;
1278+
let seconds = duration % 60;
12581279
let time_str = if hours > 0 {
1259-
format!("{}h {}m", hours, minutes)
1280+
format!("{}h {}m {}s", hours, minutes, seconds)
1281+
} else if minutes > 0 {
1282+
format!("{}m {}s", minutes, seconds)
12601283
} else {
1261-
format!("{}m", minutes)
1284+
format!("{}s", seconds)
12621285
};
12631286

12641287
// For categories, extract color from category name
@@ -1298,10 +1321,13 @@ pub fn draw_file_breakdown_section_with_style(
12981321
for (filename, language, duration) in app.file_breakdown[start_idx..end_idx].iter() {
12991322
let hours = duration / 3600;
13001323
let minutes = (duration % 3600) / 60;
1324+
let seconds = duration % 60;
13011325
let time_str = if hours > 0 {
1302-
format!("{}h {}m", hours, minutes)
1326+
format!("{}h {}m {}s", hours, minutes, seconds)
1327+
} else if minutes > 0 {
1328+
format!("{}m {}s", minutes, seconds)
13031329
} else {
1304-
format!("{}m", minutes)
1330+
format!("{}s", seconds)
13051331
};
13061332

13071333
let display = format!(" {} ({}) {}", filename, language, time_str);

0 commit comments

Comments
 (0)