summaryrefslogtreecommitdiff
path: root/player-android/lib/utils/duration_formatter.dart
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')}';
}