diff --git a/app/src/main/java/eu/faircode/email/EntityRule.java b/app/src/main/java/eu/faircode/email/EntityRule.java index 38ddad86ae..4ca8ed1a0e 100644 --- a/app/src/main/java/eu/faircode/email/EntityRule.java +++ b/app/src/main/java/eu/faircode/email/EntityRule.java @@ -180,25 +180,8 @@ public class EntityRule { int start = jschedule.optInt("start", 0); int end = jschedule.optInt("end", 0); - int dstart = start / (24 * 60); - int hstart = start / 60 % 24; - int mstart = start % 60; - - int dend = end / (24 * 60); - int hend = end / 60 % 24; - int mend = end % 60; - - Calendar cal_start = Calendar.getInstance(); - cal_start.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY + dstart); - cal_start.set(Calendar.HOUR_OF_DAY, hstart); - cal_start.set(Calendar.MINUTE, mstart); - cal_start.set(Calendar.SECOND, 0); - - Calendar cal_end = Calendar.getInstance(); - cal_end.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY + dend); - cal_end.set(Calendar.HOUR_OF_DAY, hend); - cal_end.set(Calendar.MINUTE, mend); - cal_end.set(Calendar.SECOND, 0); + Calendar cal_start = getRelativeCalendar(start); + Calendar cal_end = getRelativeCalendar(end); if (cal_start.getTimeInMillis() > cal_end.getTimeInMillis()) cal_start.add(Calendar.HOUR_OF_DAY, -7 * 24); @@ -372,15 +355,7 @@ public class EntityRule { throw new IllegalArgumentException("Rule snooze schedule not found"); int end = jschedule.optInt("end", 0); - int day = end / (24 * 60); - int hour = end / 60 % 24; - int minute = end % 60; - - Calendar cal = Calendar.getInstance(); - cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY + day); - cal.set(Calendar.HOUR_OF_DAY, hour); - cal.set(Calendar.MINUTE, minute); - cal.set(Calendar.SECOND, 0); + Calendar cal = getRelativeCalendar(end); wakeup = cal.getTimeInMillis() + duration * 3600 * 1000L; } else wakeup = message.received + duration * 3600 * 1000L; @@ -403,6 +378,25 @@ public class EntityRule { return true; } + private static Calendar getRelativeCalendar(int minutes) { + int d = minutes / (24 * 60); + int h = minutes / 60 % 24; + int m = minutes % 60; + + Calendar cal = Calendar.getInstance(); + long now = cal.getTimeInMillis(); + + cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY + d); + if (cal.getTimeInMillis() < now) + cal.add(Calendar.HOUR_OF_DAY, 7 * 24); + + cal.set(Calendar.HOUR_OF_DAY, h); + cal.set(Calendar.MINUTE, m); + cal.set(Calendar.SECOND, 0); + + return cal; + } + @Override public boolean equals(Object obj) { if (obj instanceof EntityRule) {