TKK_E32230206/lib/core/utils/cron_utils.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
}
}
}