blob: 72e810babec1e7ebb916cf13de942da9da6f5cba (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
// Duration formatting utilities shared across screen widgets.
//
// Centralises the conversion of fractional seconds to a human-readable string
// so that [MediaGridScreen] and [FolderBrowserScreen] do not each carry their
// own copy of the same logic (DRY / Single Responsibility).
//
// All functions are pure data-transformations: no widget state, no Riverpod
// reads, no BuildContext — making them easy to unit-test in isolation.
/// Formats [seconds] as `h:mm:ss` or `m:ss`, omitting leading zeros in the
/// hours and minutes positions.
///
/// Examples:
/// - 7320.0 → "2:02:00"
/// - 210.5 → "3:30"
/// - 30.0 → "0:30"
///
/// Uses integer arithmetic only — no [Duration] dependency — so the helper
/// is lightweight and independently testable.
String formatDuration(double seconds) {
final total = seconds.truncate();
final h = total ~/ 3600;
final m = (total % 3600) ~/ 60;
final s = total % 60;
if (h > 0) {
return '$h:${m.toString().padLeft(2, '0')}:${s.toString().padLeft(2, '0')}';
}
return '$m:${s.toString().padLeft(2, '0')}';
}
|