mirror of
https://github.com/Dr-Blank/Vaani.git
synced 2025-12-06 11:09:28 +00:00
* refactor: enhance sleep timer functionality and improve duration formatting * refactor: update sleep timer settings handling * refactor: update cancel icon for sleep timer button * refactor: implement isBetween method for TimeOfDay and simplify sleep timer logic * refactor: update alwaysAutoTurnOnTimer default value and improve icon usage in settings * refactor: remove unused IconButton and update sleep timer preset durations
49 lines
1.6 KiB
Dart
49 lines
1.6 KiB
Dart
extension DurationFormat on Duration {
|
|
/// formats the duration using only 2 units
|
|
///
|
|
/// if the duration is more than 1 hour, it will return `10h 30m`
|
|
/// if the duration is less than 1 hour, it will return `30m 20s`
|
|
/// if the duration is less than 1 minute, it will return `20s`
|
|
String get smartBinaryFormat {
|
|
final hours = inHours;
|
|
final minutes = inMinutes.remainder(60);
|
|
final seconds = inSeconds.remainder(60);
|
|
if (hours > 0) {
|
|
// skip minutes if it's 0
|
|
if (minutes == 0) {
|
|
return smartSingleFormat;
|
|
}
|
|
return '${Duration(hours: hours).smartBinaryFormat} ${Duration(minutes: minutes).smartSingleFormat}';
|
|
} else if (minutes > 0) {
|
|
if (seconds == 0) {
|
|
return smartSingleFormat;
|
|
}
|
|
return '${Duration(minutes: minutes).smartSingleFormat} ${Duration(seconds: seconds).smartSingleFormat}';
|
|
} else {
|
|
return smartSingleFormat;
|
|
}
|
|
}
|
|
|
|
/// formats the duration using only 1 unit
|
|
/// if the duration is more than 1 hour, it will return `10h`
|
|
/// if the duration is less than 1 hour, it will return `30m`
|
|
/// if the duration is less than 1 minute, it will return `20s`
|
|
///
|
|
/// rest of the duration will be ignored
|
|
String get smartSingleFormat {
|
|
if (inHours > 0) {
|
|
return '${inHours}h';
|
|
} else if (inMinutes > 0) {
|
|
return '${inMinutes}m';
|
|
} else {
|
|
return '${inSeconds}s';
|
|
}
|
|
}
|
|
}
|
|
|
|
extension OnlyTime on DateTime {
|
|
// in format HH:MM:ss
|
|
// padding with 0
|
|
String get time =>
|
|
'${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}:${second.toString().padLeft(2, '0')}';
|
|
}
|