@@ -3,77 +3,78 @@ package com.github.xepozz.crontab.ide
33object CronScheduleDescriber {
44 fun asHumanReadable (cron : String ): String {
55 when (cron) {
6- " @hourly" -> return " Every hour"
7- " @daily" -> return " Every day"
8- " @weekly" -> return " Every week"
9- " @monthly" -> return " Every month"
10- " @yearly" -> return " Every year"
11- " @annually" -> return " Every year"
12- " @reboot" -> return " After machine boot"
6+ " @hourly" -> return " every hour"
7+ " @daily" -> return " every day"
8+ " @weekly" -> return " every week"
9+ " @monthly" -> return " every month"
10+ " @yearly" -> return " every year"
11+ " @annually" -> return " every year"
12+ " @reboot" -> return " after machine boot"
1313 }
1414
1515 val fields = cron.trim().split(" \\ s+" .toRegex())
16- if (fields.size != 5 ) {
17- throw IllegalArgumentException (" Invalid cron expression. Expected 5 fields, got ${fields.size} in: \" $cron \" " )
18- }
19-
20- val (minute, hour, dayOfMonth, month, dayOfWeek) = fields
2116
22- return buildString {
23- append(" Runs " )
17+ // val (minute, hour, dayOfMonth, month, dayOfWeek) = fields
18+ val minute = fields.getOrElse(0 , { " *" })
19+ val hour = fields.getOrElse(1 , { " *" })
20+ val dayOfMonth = fields.getOrElse(2 , { " *" })
21+ val month = fields.getOrElse(3 , { " *" })
22+ val dayOfWeek = fields.getOrElse(4 , { " *" })
2423
24+ return buildList {
2525 // Minute
26- append(
27- when (minute) {
28- " *" -> " every minute"
26+ add(
27+ when {
28+ minute == " *" -> " every minute"
29+ minute.matches(Regex (" \\ */\\ d+" )) -> " every ${minute.split(" /" ).last()} minute"
2930 else -> " at minute $minute "
3031 }
3132 )
3233
3334 // Hour
34- append(
35- when (hour) {
36- " *" -> " "
37- else -> " past hour $hour "
35+ add(
36+ when {
37+ hour == " *" -> " every hour"
38+ hour.matches(Regex (" \\ */\\ d+" )) -> " every ${hour.split(" /" ).last()} hour"
39+ else -> " past hour $hour "
3840 }
3941 )
4042
41- append(" " )
42-
4343 // Day of month
44- append(
45- when (dayOfMonth) {
46- " * " -> " every day "
47- else -> " on day $ dayOfMonth of the month "
48- }
49- )
50-
51- append( " " )
44+ if (dayOfMonth != " * " ) {
45+ add(
46+ when {
47+ dayOfMonth.matches( Regex ( " \\ */ \\ d+ " )) -> " every ${ dayOfMonth.split( " / " ).last()} day "
48+ else -> " on day $dayOfMonth of the month "
49+ }
50+ )
51+ }
5252
5353 // Month
54- append(
55- when (month) {
56- " * " -> " in every month "
57- else -> " in $ month"
58- }
59- )
60-
61- append( " " )
54+ if (month != " * " ) {
55+ add(
56+ when {
57+ month.matches( Regex ( " \\ */ \\ d+ " )) -> " every ${month.split( " / " ).last()} month"
58+ else -> " in $month "
59+ }
60+ )
61+ }
6262
6363 // Day of week
64- append(
65- when (dayOfWeek) {
66- " *" -> " "
67- " 0" , " 7" -> " on Sundays"
68- " 1" -> " on Mondays"
69- " 2" -> " on Tuesdays"
70- " 3" -> " on Wednesdays"
71- " 4" -> " on Thursdays"
72- " 5" -> " on Fridays"
73- " 6" -> " on Saturdays"
74- else -> " on specific days ($dayOfWeek )"
75- }
76- )
77- }
64+ if (dayOfWeek != " *" ) {
65+ add(
66+ when (dayOfWeek) {
67+ " 0" , " 7" -> " on Sundays"
68+ " 1" -> " on Mondays"
69+ " 2" -> " on Tuesdays"
70+ " 3" -> " on Wednesdays"
71+ " 4" -> " on Thursdays"
72+ " 5" -> " on Fridays"
73+ " 6" -> " on Saturdays"
74+ else -> " on specific days ($dayOfWeek )"
75+ }
76+ )
77+ }
78+ }.joinToString(" " )
7879 }
7980}
0 commit comments