Skip to content

Commit 4058ec1

Browse files
committed
拆分更新日志和依赖列表
1 parent c3e0384 commit 4058ec1

1 file changed

Lines changed: 29 additions & 21 deletions

File tree

HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DownloadPage.java

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -475,8 +475,9 @@ public AddonVersion(RemoteMod mod, RemoteMod.Version version, DownloadPage selfP
475475
SpinnerPane spinnerPane = new SpinnerPane();
476476
ScrollPane scrollPane = new ScrollPane();
477477
ComponentList dependenciesList = new ComponentList(Lang::immutableListOf);
478-
loadChangelogAndDependencies(version, selfPage, spinnerPane, dependenciesList, changelogButton);
479-
spinnerPane.setOnFailedAction(e -> loadChangelogAndDependencies(version, selfPage, spinnerPane, dependenciesList, changelogButton));
478+
loadDependencies(version, selfPage, spinnerPane, dependenciesList);
479+
loadChangelog(version, selfPage, changelogButton);
480+
spinnerPane.setOnFailedAction(e -> loadDependencies(version, selfPage, spinnerPane, dependenciesList));
480481

481482
scrollPane.setContent(dependenciesList);
482483
scrollPane.setFitToWidth(true);
@@ -524,19 +525,9 @@ public AddonVersion(RemoteMod mod, RemoteMod.Version version, DownloadPage selfP
524525
onEscPressed(this, cancelButton::fire);
525526
}
526527

527-
private void loadChangelogAndDependencies(RemoteMod.Version version, DownloadPage selfPage, SpinnerPane spinnerPane, ComponentList dependenciesList, Button changelogButton) {
528+
private void loadDependencies(RemoteMod.Version version, DownloadPage selfPage, SpinnerPane spinnerPane, ComponentList dependenciesList) {
528529
spinnerPane.setLoading(true);
529-
changelogButton.setDisable(true);
530530
Task.supplyAsync(() -> {
531-
Optional<String> changelog;
532-
if (changelogCache.containsKey(version)) {
533-
changelog = Optional.ofNullable(changelogCache.get(version));
534-
} else if (version.getChangelog() != null) {
535-
changelog = StringUtils.nullIfBlank(version.getChangelog());
536-
} else {
537-
changelog = StringUtils.nullIfBlank(selfPage.repository.getModChangelog(version.getModid(), version.getVersionId()));
538-
}
539-
540531
EnumMap<RemoteMod.DependencyType, List<Node>> dependencies = new EnumMap<>(RemoteMod.DependencyType.class);
541532
for (RemoteMod.Dependency dependency : version.getDependencies()) {
542533
if (dependency.getType() == RemoteMod.DependencyType.INCOMPATIBLE || dependency.getType() == RemoteMod.DependencyType.BROKEN) {
@@ -554,26 +545,43 @@ private void loadChangelogAndDependencies(RemoteMod.Version version, DownloadPag
554545
dependencies.get(dependency.getType()).add(dependencyAddonItem);
555546
}
556547

557-
return new Pair<>(changelog, dependencies.values().stream().flatMap(Collection::stream).collect(Collectors.toList()));
548+
return dependencies.values().stream().flatMap(Collection::stream).collect(Collectors.toList());
558549
}).whenComplete(Schedulers.javafx(), (result, exception) -> {
559550
if (exception == null) {
560-
if (result.getKey().isPresent()) {
561-
String s = StringUtils.markdownToHTML(result.getKey().get());
551+
dependenciesList.getContent().setAll(result);
552+
spinnerPane.setFailedReason(null);
553+
} else {
554+
dependenciesList.getContent().setAll();
555+
spinnerPane.setFailedReason(i18n("download.failed.refresh"));
556+
}
557+
spinnerPane.setLoading(false);
558+
}).start();
559+
}
560+
561+
private void loadChangelog(RemoteMod.Version version, DownloadPage selfPage, Button changelogButton) {
562+
changelogButton.setDisable(true);
563+
Task.supplyAsync(() -> {
564+
if (changelogCache.containsKey(version)) {
565+
return Optional.ofNullable(changelogCache.get(version));
566+
} else if (version.getChangelog() != null) {
567+
return StringUtils.nullIfBlank(version.getChangelog());
568+
} else {
569+
return StringUtils.nullIfBlank(selfPage.repository.getModChangelog(version.getModid(), version.getVersionId()));
570+
}
571+
}).whenComplete(Schedulers.javafx(), (result, exception) -> {
572+
if (exception == null) {
573+
if (result.isPresent()) {
574+
String s = StringUtils.markdownToHTML(result.get());
562575
changelogCache.put(version, s);
563576
changelogButton.setDisable(false);
564577
changelogButton.setOnAction(e -> Controllers.dialog(new AddonChangelog(AddonVersion.this.title, s)));
565578
} else {
566579
changelogCache.put(version, null);
567580
changelogButton.setOnAction(null);
568581
}
569-
dependenciesList.getContent().setAll(result.getValue());
570-
spinnerPane.setFailedReason(null);
571582
} else {
572583
changelogButton.setOnAction(null);
573-
dependenciesList.getContent().setAll();
574-
spinnerPane.setFailedReason(i18n("download.failed.refresh"));
575584
}
576-
spinnerPane.setLoading(false);
577585
}).start();
578586
}
579587
}

0 commit comments

Comments
 (0)