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