]> git.giacomolli.uk - onechat/blobdiff - schedule_cron.go
Rewrite the README as a user guide
[onechat] / schedule_cron.go
index 78ec90b49362b1c570d7568d565061a2267b2508..91fe8ce8b58e2be552af7138136b945f3b6e114c 100644 (file)
@@ -70,6 +70,7 @@ func scheduleParseCron(expression string) (ScheduleCron, error) {
        }
 
        var sets [5]uint64
        }
 
        var sets [5]uint64
+
        for index, field := range fields {
                set, err := scheduleCronField(field, scheduleCronFields[index].low, scheduleCronFields[index].high)
                if err != nil {
        for index, field := range fields {
                set, err := scheduleCronField(field, scheduleCronFields[index].low, scheduleCronFields[index].high)
                if err != nil {
@@ -146,6 +147,7 @@ func (c ScheduleCron) Next(after time.Time) (time.Time, bool) {
                // one day are not always in order. The first time is the
                // smallest one.
                var next time.Time
                // one day are not always in order. The first time is the
                // smallest one.
                var next time.Time
+
                for hour := range 24 {
                        if c.hours&(1<<hour) == 0 {
                                continue
                for hour := range 24 {
                        if c.hours&(1<<hour) == 0 {
                                continue
@@ -190,6 +192,7 @@ func (c ScheduleCron) day(date time.Time) bool {
 // and the minute fields, also across midnight.
 func (c ScheduleCron) gap() int {
        var times []int
 // and the minute fields, also across midnight.
 func (c ScheduleCron) gap() int {
        var times []int
+
        for hour := range 24 {
                for minute := range 60 {
                        if c.hours&(1<<hour) != 0 && c.minutes&(1<<minute) != 0 {
        for hour := range 24 {
                for minute := range 60 {
                        if c.hours&(1<<hour) != 0 && c.minutes&(1<<minute) != 0 {
@@ -235,11 +238,13 @@ func scheduleWallTime(year int, month time.Month, day, hour, minute int, locatio
 // high.
 func scheduleCronField(field string, low, high int) (uint64, error) {
        var set uint64
 // high.
 func scheduleCronField(field string, low, high int) (uint64, error) {
        var set uint64
+
        for item := range strings.SplitSeq(field, ",") {
                base, stepText, stepped := strings.Cut(item, "/")
                step := 1
                if stepped {
                        var err error
        for item := range strings.SplitSeq(field, ",") {
                base, stepText, stepped := strings.Cut(item, "/")
                step := 1
                if stepped {
                        var err error
+
                        step, err = scheduleCronNumber(stepText, 1, high)
                        if err != nil {
                                return 0, fmt.Errorf("the step of %q: %w", item, err)
                        step, err = scheduleCronNumber(stepText, 1, high)
                        if err != nil {
                                return 0, fmt.Errorf("the step of %q: %w", item, err)
@@ -252,6 +257,7 @@ func scheduleCronField(field string, low, high int) (uint64, error) {
                case base == "*":
                case ranged:
                        var err error
                case base == "*":
                case ranged:
                        var err error
+
                        first, err = scheduleCronNumber(startText, low, high)
                        if err == nil {
                                last, err = scheduleCronNumber(endText, low, high)
                        first, err = scheduleCronNumber(startText, low, high)
                        if err == nil {
                                last, err = scheduleCronNumber(endText, low, high)
@@ -268,6 +274,7 @@ func scheduleCronField(field string, low, high int) (uint64, error) {
                        return 0, fmt.Errorf("%q has a step after a single value: write a range N-M/S or */S", item)
                default:
                        var err error
                        return 0, fmt.Errorf("%q has a step after a single value: write a range N-M/S or */S", item)
                default:
                        var err error
+
                        first, err = scheduleCronNumber(base, low, high)
                        if err != nil {
                                return 0, err
                        first, err = scheduleCronNumber(base, low, high)
                        if err != nil {
                                return 0, err