From 1d7e83e89ca6b05e3fbfbafa923a120798e5f1d4 Mon Sep 17 00:00:00 2001 From: cswhite2000 <18whitechristop@gmail.com> Date: Fri, 23 Feb 2018 21:50:33 -0800 Subject: [PATCH] Add an optional delay to broadcast schedules --- .../oc/commons/bukkit/broadcast/BroadcastParser.java | 8 +++++++- .../commons/bukkit/broadcast/BroadcastScheduler.java | 2 +- .../bukkit/broadcast/model/BroadcastSchedule.java | 11 ++++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/broadcast/BroadcastParser.java b/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/broadcast/BroadcastParser.java index c601129..f83782f 100644 --- a/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/broadcast/BroadcastParser.java +++ b/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/broadcast/BroadcastParser.java @@ -5,6 +5,7 @@ import java.util.List; import javax.inject.Inject; import java.time.Duration; +import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import tc.oc.commons.bukkit.broadcast.model.BroadcastPrefix; @@ -44,8 +45,13 @@ public class BroadcastParser implements DocumentParser> } public BroadcastSchedule parseSchedule(Element el) throws ParseException { + Duration delay = Duration.ZERO; + Attr delayAttr = el.getAttributeNode("delay"); + if (delayAttr != null) { + delay = durationParser.parse(delayAttr); + } return new BroadcastSchedule( - durationParser.parse(XML.requireAttr(el, "interval")), + delay, durationParser.parse(XML.requireAttr(el, "interval")), serverFilterParser.parse(el), XML.childrenNamed(el, "messages").map(this::parseMessages) ); } diff --git a/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/broadcast/BroadcastScheduler.java b/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/broadcast/BroadcastScheduler.java index bf8fb70..f90d521 100644 --- a/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/broadcast/BroadcastScheduler.java +++ b/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/broadcast/BroadcastScheduler.java @@ -123,7 +123,7 @@ public class BroadcastScheduler implements PluginFacet { set -> messageMapFactory.create(configPath.resolve(SOURCES_PATH).resolve(set.path()), TRANSLATIONS_PATH.resolve(set.path()))) ); - this.task = scheduler.createRepeatingTask(schedule.interval(), this::dispatch); + this.task = scheduler.createRepeatingTask(schedule.delay(), schedule.interval(), this::dispatch); } void dispatch() { diff --git a/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/broadcast/model/BroadcastSchedule.java b/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/broadcast/model/BroadcastSchedule.java index 744f010..8f83698 100644 --- a/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/broadcast/model/BroadcastSchedule.java +++ b/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/broadcast/model/BroadcastSchedule.java @@ -14,11 +14,13 @@ import tc.oc.minecraft.server.ServerFilter; */ public class BroadcastSchedule extends Inspectable.Impl { + @Inspect private final Duration delay; @Inspect private final Duration interval; @Inspect private final ImmutableList messages; @Inspect private final ServerFilter serverFilter; - public BroadcastSchedule(Duration interval, ServerFilter serverFilter, Stream messages) { + public BroadcastSchedule(Duration delay, Duration interval, ServerFilter serverFilter, Stream messages) { + this.delay = delay; this.interval = interval; this.serverFilter = serverFilter; this.messages = messages.collect(Collectors.toImmutableList()); @@ -31,6 +33,13 @@ public class BroadcastSchedule extends Inspectable.Impl { return interval; } + /** + * Time before first broadcast + */ + public Duration delay() { + return delay; + } + /** * Relative path of the localized message list. *