sone.setKnown(storedSone.get().isKnown());
sone.setStatus((sone.getTime() == 0) ? SoneStatus.unknown : SoneStatus.idle);
if (sone.isLocal()) {
- soneInserters.remove(storedSone.get()).stop();
- SoneInserter soneInserter = new SoneInserter(this, eventBus, freenetInterface, sone);
- soneInserters.put(sone, soneInserter);
- soneInserter.start();
+ soneInserters.get(storedSone.get()).setSone(sone);
touchConfiguration();
}
sones.put(sone.getId(), sone);
package net.pterodactylus.sone.core;
+import static com.google.common.base.Preconditions.checkArgument;
+
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.nio.charset.Charset;
private final FreenetInterface freenetInterface;
/** The Sone to insert. */
- private final Sone sone;
+ private volatile Sone sone;
/** Whether a modification has been detected. */
private volatile boolean modified = false;
//
/**
- * Changes the insertion delay, i.e. the time the Sone inserter waits after
- * it has noticed a Sone modification before it starts the insert.
+ * Sets the Sone to insert.
+ *
+ * @param sone
+ * The Sone to insert
+ * @return This Sone inserter
+ */
+ public SoneInserter setSone(Sone sone) {
+ checkArgument((this.sone == null) || sone.equals(this.sone), "Sone to insert can not be set to a different Sone");
+ this.sone = sone;
+ return this;
+ }
+
+ /**
+ * Changes the insertion delay, i.e. the time the Sone inserter waits after it
+ * has noticed a Sone modification before it starts the insert.
*
* @param insertionDelay
* The insertion delay (in seconds)
long lastModificationTime = 0;
String lastInsertedFingerprint = lastInsertFingerprint;
String lastFingerprint = "";
+ Sone sone;
while (!shouldStop()) {
try {
/* check every seconds. */
sleep(1000);
/* don’t insert locked Sones. */
+ sone = this.sone;
if (core.isLocked(sone)) {
/* trigger redetection when the Sone is unlocked. */
synchronized (sone) {