package com.limegroup.gnutella.settings;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.limewire.i18n.I18nMarker;
import org.limewire.inject.EagerSingleton;
import org.limewire.lifecycle.Service;
import org.limewire.lifecycle.ServiceRegistry;
import org.limewire.setting.SettingsGroupManager;
import com.google.inject.Inject;
import com.google.inject.name.Named;
@EagerSingleton
class SettingsSaverService implements Service {
/** How often settings should be saved, in seconds. */
private static final int SAVE_INTERVAL = 300;
private final ScheduledExecutorService backgroundExecutor;
private volatile Future future = null;
@Inject
SettingsSaverService(@Named("backgroundExecutor") ScheduledExecutorService backgroundExecutor) {
this.backgroundExecutor = backgroundExecutor;
}
@Inject
public void register(ServiceRegistry registry) {
registry.register(this);
}
@Override
public String getServiceName() {
return I18nMarker.marktr("Settings Saver");
}
@Override
public void initialize() {
}
@Override
public void start() {
future = backgroundExecutor.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
SettingsGroupManager.instance().save();
}
}, 60, SAVE_INTERVAL, TimeUnit.SECONDS);
}
@Override
public void stop() {
final Future future = this.future;
if(future != null) {
future.cancel(false);
this.future = null;
}
}
}