You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.5 KiB
103 lines
3.5 KiB
package app.updates;
|
|
|
|
import app.controllers.FileController;
|
|
import app.entities.Stats;
|
|
import app.entities.server.Server;
|
|
import jakarta.annotation.PostConstruct;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
|
import org.springframework.context.event.EventListener;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.web.client.RestClientException;
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
|
import java.util.HashMap;
|
|
|
|
@Component
|
|
public class PreviewUpdater extends BaseUpdater{
|
|
Stats stats;
|
|
RestTemplate restTemplate;
|
|
private final Logger logger = LoggerFactory.getLogger(PreviewUpdater.class);
|
|
//ТУТ НАДО ЧТОБ ЗНАЧЕНИЕ ИЗ ЕНВ БРАЛСЬ
|
|
private String domain = "tf2.pblr-nyk.pro";
|
|
private String preview = "https://%s/site_content/images/preview/%s.%s";
|
|
|
|
//@Value("${backend.updates.a2s}")
|
|
private boolean update = false;
|
|
private HashMap<String, String> preview_cache;
|
|
private FileController fileController;
|
|
|
|
@Autowired
|
|
public PreviewUpdater(Stats stats, FileController fileController) {
|
|
this.stats = stats;
|
|
restTemplate = new RestTemplate();
|
|
preview_cache = new HashMap();
|
|
this.fileController = fileController;
|
|
}
|
|
|
|
@EventListener(ApplicationReadyEvent.class)
|
|
public void updateValues() {
|
|
if (update) {
|
|
logger.warn("Preview loader enabled");
|
|
stats.getServers().forEach((server_name, server) -> {
|
|
CreateTaskUpdater(() -> {
|
|
loadPreview(stats.getServers().get(server_name));
|
|
return null;
|
|
}, 30000, getClass().getName()+"_"+server_name);
|
|
});
|
|
}
|
|
}
|
|
|
|
public void loadPreview(Server server) {
|
|
if (server.getMap() == null || server.getMap().isEmpty()) {
|
|
logger.warn("{} not have map, set default", server.getName());
|
|
server.setPreview(not_found());
|
|
return;
|
|
}
|
|
|
|
if (preview_cache.containsKey(server.getMapCleared())) {
|
|
if (preview_cache.get(server.getMapCleared()).equals(server.getPreview())) return;
|
|
}
|
|
|
|
String url = getPreview(server.getMapCleared());
|
|
if (url != null) {
|
|
server.setPreview(url);
|
|
preview_cache.put(server.getMapCleared(), server.getPreview());
|
|
} else {
|
|
logger.warn("Not found preview for {}", server.getMapCleared());
|
|
server.setPreview(not_found());
|
|
}
|
|
}
|
|
|
|
public String getPreview(String map) {
|
|
String url;
|
|
//Check dbfile
|
|
//try {
|
|
// url = fileController.getUrlWithNameAndTag(map, "map");
|
|
// return url;
|
|
//} catch (Exception ignored) {}
|
|
|
|
//Check jpg
|
|
url = preview.formatted(domain, map, "jpg");
|
|
try {
|
|
logger.info("Request: {}", url);
|
|
restTemplate.headForHeaders(url);
|
|
return url;
|
|
} catch (RestClientException ignored) {}
|
|
|
|
//Check txt contained url
|
|
url = preview.formatted(domain, map, "url");
|
|
try {
|
|
logger.info("Request: {}", url);
|
|
return restTemplate.getForEntity(url, String.class).getBody().replace("\n", "");
|
|
} catch (RestClientException ignored) {}
|
|
|
|
return null;
|
|
}
|
|
|
|
public String not_found() {
|
|
return fileController.getUrlWithNameAndTag("_default", "map");
|
|
}
|
|
}
|
|
|