package com.faforever.client.patch;
import com.faforever.client.task.TaskService;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import javax.annotation.Resource;
import java.lang.invoke.MethodHandles;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
public class GameUpdateServiceImpl extends AbstractPatchService implements GameUpdateService {
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@Resource
TaskService taskService;
@Resource
ApplicationContext applicationContext;
private UpdateGameFilesTask updateTask;
@Override
public CompletionStage<Void> updateInBackground(@NotNull String gameType, @Nullable Integer version, @NotNull Map<String, Integer> modVersions, @NotNull Set<String> simModUids) {
if (!checkDirectories()) {
logger.warn("Aborted patching since directories aren't initialized properly");
return CompletableFuture.completedFuture(null);
}
if (updateTask != null && !updateTask.isDone()) {
logger.warn("Update is already in progress, ignoring request");
return CompletableFuture.completedFuture(null);
}
updateTask = applicationContext.getBean(UpdateGameFilesTask.class);
updateTask.setGameType(gameType);
updateTask.setSimMods(simModUids);
updateTask.setModVersions(modVersions);
if (version != null) {
updateTask.setGameVersion(String.valueOf(version));
}
return taskService.submitTask(updateTask).getFuture();
}
@Override
public CompletionStage<Void> checkForUpdateInBackground() {
logger.info("Ignoring update check since the current server implementation doesn't allow to do so easily");
return null;
}
}