import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.pterodactylus.util.number.Numbers;
import net.pterodactylus.util.service.AbstractService;
import net.pterodactylus.util.thread.NamedThreadFactory;
-import net.pterodactylus.util.thread.Ticker;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
private final Map<String, TemporaryImage> temporaryImages = new HashMap<String, TemporaryImage>();
/** Ticker for threads that mark own elements as known. */
- private final Ticker localElementTicker = new Ticker();
+ private final ScheduledExecutorService localElementTicker = Executors.newScheduledThreadPool(1);
/** The time the configuration was last touched. */
private volatile long lastConfigurationUpdate;
eventBus.post(new NewPostFoundEvent(post));
sone.addPost(post);
touchConfiguration();
- localElementTicker.registerEvent(System.currentTimeMillis() + 10 * 1000, new Runnable() {
+ localElementTicker.schedule(new Runnable() {
/**
* {@inheritDoc}
public void run() {
markPostKnown(post);
}
- }, "Mark " + post + " read.");
+ }, 10, TimeUnit.SECONDS);
return post;
}
}
sone.addReply(reply);
touchConfiguration();
- localElementTicker.registerEvent(System.currentTimeMillis() + 10 * 1000, new Runnable() {
+ localElementTicker.schedule(new Runnable() {
/**
* {@inheritDoc}
public void run() {
markReplyKnown(reply);
}
- }, "Mark " + reply + " read.");
+ }, 10, TimeUnit.SECONDS);
return reply;
}
*/
@Override
public void serviceStop() {
+ localElementTicker.shutdownNow();
synchronized (sones) {
for (Entry<Sone, SoneInserter> soneInserter : soneInserters.entrySet()) {
soneInserter.getValue().stop();
}));
options.addIntegerOption("PostsPerPage", new DefaultOption<Integer>(10, new IntegerRangePredicate(1, Integer.MAX_VALUE)));
options.addIntegerOption("ImagesPerPage", new DefaultOption<Integer>(9, new IntegerRangePredicate(1, Integer.MAX_VALUE)));
- options.addIntegerOption("CharactersPerPost", new DefaultOption<Integer>(400, Predicates.or(new IntegerRangePredicate(50, Integer.MAX_VALUE), Predicates.equalTo(-1))));
- options.addIntegerOption("PostCutOffLength", new DefaultOption<Integer>(200, Predicates.or(new IntegerRangePredicate(50, Integer.MAX_VALUE), Predicates.equalTo(-1))));
+ options.addIntegerOption("CharactersPerPost", new DefaultOption<Integer>(400, Predicates.<Integer> or(new IntegerRangePredicate(50, Integer.MAX_VALUE), Predicates.equalTo(-1))));
+ options.addIntegerOption("PostCutOffLength", new DefaultOption<Integer>(200, Predicates.<Integer> or(new IntegerRangePredicate(50, Integer.MAX_VALUE), Predicates.equalTo(-1))));
options.addBooleanOption("RequireFullAccess", new DefaultOption<Boolean>(false));
options.addIntegerOption("PositiveTrust", new DefaultOption<Integer>(75, new IntegerRangePredicate(0, 100)));
options.addIntegerOption("NegativeTrust", new DefaultOption<Integer>(-25, new IntegerRangePredicate(-100, 100)));