update news tab testing
This commit is contained in:
parent
7a1d0ae197
commit
9a5a469ad0
|
@ -12,11 +12,14 @@ import ctbrec.ui.tabs.TabSelectionListener;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
import javafx.geometry.Pos;
|
import javafx.geometry.Pos;
|
||||||
|
import javafx.scene.control.Hyperlink;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.control.ScrollPane;
|
import javafx.scene.control.ScrollPane;
|
||||||
import javafx.scene.control.Tab;
|
import javafx.scene.control.Tab;
|
||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
|
import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -27,16 +30,14 @@ import static ctbrec.io.HttpConstants.USER_AGENT;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class NewsTab extends Tab implements TabSelectionListener {
|
public class NewsTab extends Tab implements TabSelectionListener {
|
||||||
private static final String ACCESS_TOKEN = "a2804d73a89951a22e0f8483a6fcec8943afd88b7ba17c459c095aa9e6f94fd0";
|
private static final String URL = "https://git.ctbrec.com/api/v1/repos/j62/ctbrec/releases";
|
||||||
private static final String URL = "https://mastodon.cloud/api/v1/accounts/480960/statuses?limit=20&exclude_replies=true";
|
|
||||||
private final Config config;
|
private final Config config;
|
||||||
private final VBox layout = new VBox();
|
private final VBox layout = new VBox();
|
||||||
|
|
||||||
private final ObjectMapper mapper = ObjectMapperFactory.getMapper();
|
private final ObjectMapper mapper = ObjectMapperFactory.getMapper();
|
||||||
|
|
||||||
public NewsTab(Config config) {
|
public NewsTab(Config config) {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
setText("News");
|
setText("Releases");
|
||||||
layout.setMaxWidth(800);
|
layout.setMaxWidth(800);
|
||||||
layout.setAlignment(Pos.CENTER);
|
layout.setAlignment(Pos.CENTER);
|
||||||
setContent(new ScrollPane(layout));
|
setContent(new ScrollPane(layout));
|
||||||
|
@ -44,14 +45,13 @@ public class NewsTab extends Tab implements TabSelectionListener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void selected() {
|
public void selected() {
|
||||||
GlobalThreadPool.submit(this::loadToots);
|
GlobalThreadPool.submit(this::loadReleases);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadToots() {
|
private void loadReleases() {
|
||||||
try {
|
try {
|
||||||
var request = new Request.Builder()
|
var request = new Request.Builder()
|
||||||
.url(URL)
|
.url(URL)
|
||||||
.header("Authorization", "Bearer " + ACCESS_TOKEN)
|
|
||||||
.header(USER_AGENT, "ctbrec " + Version.getVersion())
|
.header(USER_AGENT, "ctbrec " + Version.getVersion())
|
||||||
.build();
|
.build();
|
||||||
try (var response = CamrecApplication.httpClient.execute(request)) {
|
try (var response = CamrecApplication.httpClient.execute(request)) {
|
||||||
|
@ -60,8 +60,6 @@ public class NewsTab extends Tab implements TabSelectionListener {
|
||||||
log.debug(body);
|
log.debug(body);
|
||||||
if (body.startsWith("[")) {
|
if (body.startsWith("[")) {
|
||||||
onSuccess(body);
|
onSuccess(body);
|
||||||
} else if (body.startsWith("{")) {
|
|
||||||
onError(body);
|
|
||||||
} else {
|
} else {
|
||||||
throw new IOException("Unexpected response: " + body);
|
throw new IOException("Unexpected response: " + body);
|
||||||
}
|
}
|
||||||
|
@ -70,30 +68,53 @@ public class NewsTab extends Tab implements TabSelectionListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
log.info("Error while loading news", e);
|
log.info("Error while loading releases", e);
|
||||||
Dialogs.showError(getTabPane().getScene(), "News", "Couldn't load news from mastodon", e);
|
Dialogs.showError(getTabPane().getScene(), "Releases", "Couldn't load release information", e);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void onError(String body) throws IOException {
|
|
||||||
var json = new JSONObject(body);
|
|
||||||
if (json.has("error")) {
|
|
||||||
throw new IOException("Request not successful: " + json.getString("error"));
|
|
||||||
} else {
|
|
||||||
throw new IOException("Unexpected response: " + body);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onSuccess(String body) throws IOException {
|
private void onSuccess(String body) throws IOException {
|
||||||
Status[] statusArray = mapper.readValue(body, Status[].class);
|
JSONArray releases = new JSONArray(body);
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
layout.getChildren().clear();
|
layout.getChildren().clear();
|
||||||
for (Status status : statusArray) {
|
for (int i = 0; i < releases.length(); i++) {
|
||||||
if (status.getInReplyToId() == null && !Objects.equals("direct", status.getVisibility())) {
|
JSONObject release = releases.getJSONObject(i);
|
||||||
var stp = new StatusPane(status, config.getDateTimeFormatter());
|
String tagName = release.optString("tag_name", "Unknown Version");
|
||||||
layout.getChildren().add(stp);
|
String releaseName = release.optString("name", "No Name");
|
||||||
VBox.setMargin(stp, new Insets(10));
|
String description = release.optString("body", "No description available.");
|
||||||
|
JSONArray assets = release.optJSONArray("assets");
|
||||||
|
|
||||||
|
var releasePane = new VBox();
|
||||||
|
releasePane.setPadding(new Insets(10));
|
||||||
|
releasePane.setSpacing(5);
|
||||||
|
|
||||||
|
Label versionLabel = new Label("Version: " + tagName);
|
||||||
|
versionLabel.setStyle("-fx-font-weight: bold;");
|
||||||
|
|
||||||
|
Label nameLabel = new Label("Release: " + releaseName);
|
||||||
|
Label descLabel = new Label(description);
|
||||||
|
|
||||||
|
releasePane.getChildren().addAll(versionLabel, nameLabel, descLabel);
|
||||||
|
|
||||||
|
if (assets != null) {
|
||||||
|
Label assetsLabel = new Label("Assets:");
|
||||||
|
releasePane.getChildren().add(assetsLabel);
|
||||||
|
for (int j = 0; j < assets.length(); j++) {
|
||||||
|
JSONObject asset = assets.getJSONObject(j);
|
||||||
|
String assetName = asset.optString("name", "Unknown File");
|
||||||
|
String downloadUrl = asset.optString("browser_download_url", "#");
|
||||||
|
int size = asset.optInt("size", 0);
|
||||||
|
int downloads = asset.optInt("download_count", 0);
|
||||||
|
|
||||||
|
Hyperlink assetLink = new Hyperlink(assetName + " (" + size / 1024 / 1024 + " MB, " + downloads + " downloads)");
|
||||||
|
assetLink.setOnAction(event -> CamrecApplication.getHostServicesInstance().showDocument(downloadUrl));
|
||||||
|
|
||||||
|
releasePane.getChildren().add(assetLink);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
layout.getChildren().add(releasePane);
|
||||||
|
VBox.setMargin(releasePane, new Insets(10));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -102,4 +123,4 @@ public class NewsTab extends Tab implements TabSelectionListener {
|
||||||
public void deselected() {
|
public void deselected() {
|
||||||
// nothing to do
|
// nothing to do
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue