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

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");
}
}