package com.laboki.eclipse.plugin.smartsave.main;
import com.google.common.eventbus.Subscribe;
import com.laboki.eclipse.plugin.smartsave.contexts.EditorContext;
import com.laboki.eclipse.plugin.smartsave.events.AssistSessionEndedEvent;
import com.laboki.eclipse.plugin.smartsave.events.AssistSessionStartedEvent;
import com.laboki.eclipse.plugin.smartsave.events.CheckPreferencesEvent;
import com.laboki.eclipse.plugin.smartsave.events.ScheduleSaveEvent;
import com.laboki.eclipse.plugin.smartsave.instance.EventBusInstance;
import com.laboki.eclipse.plugin.smartsave.task.BaseTask;
import com.laboki.eclipse.plugin.smartsave.task.Task;
import com.laboki.eclipse.plugin.smartsave.task.TaskMutexRule;
public final class Scheduler extends EventBusInstance {
public static final int DELAY = 10;
public static final TaskMutexRule RULE = new TaskMutexRule();
public static final String FAMILY = "+SmartSaveSchedulerTaskFamily+";
boolean canSchedule = true;
@Subscribe
public void
eventHandler(final AssistSessionStartedEvent event) {
this.canSchedule = false;
Scheduler.cancelTasks();
}
@Subscribe
public void
eventHandler(final AssistSessionEndedEvent event) {
this.canSchedule = true;
}
@Subscribe
public void
eventHandler(final ScheduleSaveEvent event) {
new Task() {
@Override
public boolean
shouldSchedule() {
if (Scheduler.this.canSchedule == false) return false;
return BaseTask.noTaskFamilyExists(Scheduler.FAMILY);
}
@Override
public void
execute() {
Scheduler.cancelTasks();
EventBus.post(new CheckPreferencesEvent());
}
}.setDelay(Scheduler.DELAY)
.setFamily(Scheduler.FAMILY)
.setRule(Scheduler.RULE)
.start();
}
private static void
cancelTasks() {
EditorContext.cancelSaverTasks();
}
}