package de.pbauerochse.worklogviewer.fx.tasks; import com.fasterxml.jackson.core.type.TypeReference; import de.pbauerochse.worklogviewer.util.FormattingUtil; import de.pbauerochse.worklogviewer.util.HttpClientUtil; import de.pbauerochse.worklogviewer.util.JacksonUtil; import de.pbauerochse.worklogviewer.version.GitHubVersion; import javafx.concurrent.Task; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.StringReader; import java.util.List; import java.util.Optional; /** * Created by patrick on 01.11.15. */ public class VersionCheckerTask extends Task<GitHubVersion> { private static final Logger LOGGER = LoggerFactory.getLogger(VersionCheckerTask.class); public VersionCheckerTask() { updateTitle("VersionChecker-Task"); } @Override protected GitHubVersion call() throws Exception { updateMessage(FormattingUtil.getFormatted("worker.updatecheck.checking")); updateProgress(0, 1); HttpGet request = new HttpGet("https://api.github.com/repos/pbauerochse/youtrack-worklog-viewer/releases"); request.addHeader("Accept", "application/json, text/plain, */*"); CloseableHttpClient client = HttpClientUtil.getDefaultClientBuilder(1) .setDefaultHeaders(HttpClientUtil.getRegularBrowserHeaders()) .build(); GitHubVersion version = null; try (CloseableHttpResponse httpResponse = client.execute(request)) { if (!HttpClientUtil.isValidResponseCode(httpResponse.getStatusLine())) { LOGGER.warn("Could not get most recent version: {}", httpResponse.getStatusLine().getReasonPhrase()); EntityUtils.consumeQuietly(httpResponse.getEntity()); } else { String jsonResponse = EntityUtils.toString(httpResponse.getEntity()); StringReader response = new StringReader(jsonResponse); List<GitHubVersion> versions = JacksonUtil.parseValue(response, new TypeReference<List<GitHubVersion>>() { }); if (versions != null && versions.size() > 0) { Optional<GitHubVersion> mostRecent = versions.stream() .filter(gitHubVersion -> !gitHubVersion.isDraft()) .sorted((o1, o2) -> o2.getPublished().compareTo(o1.getPublished())) .findFirst(); if (mostRecent.isPresent()) { version = mostRecent.get(); } } } } updateMessage(FormattingUtil.getFormatted("worker.progress.done")); updateProgress(1, 1); return version; } }