40 lines
1.5 KiB
Dart
40 lines
1.5 KiB
Dart
class CronUtils {
|
|
static const List<String> shortDays = ['Min', 'Sen', 'Sel', 'Rab', 'Kam', 'Jum', 'Sab'];
|
|
|
|
/// Mengkonversi array of integers [0, 1, 2, ...] ke string (Misal: "Setiap Hari" atau "Sen, Sel")
|
|
static String getRepeatText(List<int> selectedDays) {
|
|
if (selectedDays.isEmpty) return 'Tidak diulang';
|
|
if (selectedDays.length == 7) return 'Setiap Hari';
|
|
|
|
// Sortir agar hari selalu urut (Min=0, Sen=1, ... Sab=6)
|
|
final sortedDays = List<int>.from(selectedDays)..sort();
|
|
return sortedDays.map((d) => shortDays[d]).join(', ');
|
|
}
|
|
|
|
/// Mengubah list dari [1,3,5] menjadi "1,3,5" untuk ditaruh di cron.
|
|
/// Jika 7 hari terpilih, kembalikan "*"
|
|
static String daysToCron(List<int> selectedDays) {
|
|
if (selectedDays.isEmpty) return '*'; // Default fallback
|
|
if (selectedDays.length == 7) return '*';
|
|
// Selalu urutkan agar cron string konsisten, terlepas dari urutan user memilih
|
|
final sorted = List<int>.from(selectedDays)..sort();
|
|
return sorted.join(',');
|
|
}
|
|
|
|
/// Mengekstrak hari aktif (array int 0-6) dari cron "30 17 * * 1,3,5"
|
|
static List<int> parseDaysFromCron(String cron) {
|
|
final parts = cron.split(' ');
|
|
if (parts.length < 5) return [0, 1, 2, 3, 4, 5, 6]; // Fallback setiap hari
|
|
|
|
final dayPart = parts[4];
|
|
if (dayPart == '*') return [0, 1, 2, 3, 4, 5, 6];
|
|
|
|
try {
|
|
final days = dayPart.split(',').map((e) => int.parse(e.trim())).toList();
|
|
return days;
|
|
} catch (_) {
|
|
return [0, 1, 2, 3, 4, 5, 6]; // Fallback jika gagal parse
|
|
}
|
|
}
|
|
}
|