Skip to content

Commit 021cbe0

Browse files
distinguish failed jobs from not-yet-completed (#30)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent b3fc8ae commit 021cbe0

5 files changed

Lines changed: 42 additions & 10 deletions

File tree

core/src/main/java/org/mineskin/JobBatchChecker.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import org.mineskin.data.JobInfo;
44
import org.mineskin.data.JobReference;
55
import org.mineskin.data.JobStatus;
6-
import org.mineskin.data.NullJobReference;
6+
import org.mineskin.data.ListJobReferenceImpl;
77
import org.mineskin.exception.MineskinException;
88
import org.mineskin.options.IJobCheckOptions;
99
import org.mineskin.response.JobListResponse;
@@ -185,8 +185,8 @@ private void handleStatus(Pending p, long now) {
185185
JobStatus status = p.jobInfo.status();
186186
if (status == JobStatus.FAILED) {
187187
// List endpoint doesn't return error details, and the result field is empty
188-
// for failures — return a NullJobReference so callers still get the updated JobInfo.
189-
p.future.complete(new NullJobReference(p.jobInfo));
188+
// for failures — return a ListJobReferenceImpl so callers still get the updated JobInfo.
189+
p.future.complete(new ListJobReferenceImpl(p.jobInfo));
190190
pending.remove(p.jobInfo.id());
191191
return;
192192
}

core/src/main/java/org/mineskin/data/JobInfo.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ public CompletableFuture<JobReference> waitForCompletion(MineSkinClient client)
6666
}
6767

6868
public CompletableFuture<SkinResponse> getSkin(MineSkinClient client) {
69+
if (status() == JobStatus.FAILED) {
70+
throw new MineskinException("Job failed").withBreadcrumb(getBreadcrumb());
71+
}
6972
if (result == null) {
7073
throw new MineskinException("Job is not completed yet").withBreadcrumb(getBreadcrumb());
7174
}

core/src/main/java/org/mineskin/data/JobReference.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.mineskin.data;
22

33
import org.mineskin.MineSkinClient;
4+
import org.mineskin.exception.MineskinException;
45
import org.mineskin.response.SkinResponse;
56

67
import java.util.Optional;
@@ -12,10 +13,12 @@ public interface JobReference {
1213
Optional<SkinInfo> getSkin();
1314

1415
default CompletableFuture<SkinInfo> getOrLoadSkin(MineSkinClient client) {
16+
if (getJob().status() == JobStatus.FAILED) {
17+
throw new MineskinException("Job failed").withBreadcrumb(getJob().getBreadcrumb());
18+
}
1519
if (this.getSkin().isPresent()) {
1620
return CompletableFuture.completedFuture(this.getSkin().get());
17-
} else {
18-
return getJob().getSkin(client).thenApply(SkinResponse::getSkin);
1921
}
22+
return getJob().getSkin(client).thenApply(SkinResponse::getSkin);
2023
}
2124
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.mineskin.data;
2+
3+
import java.util.Optional;
4+
5+
public class ListJobReferenceImpl implements JobReference {
6+
7+
private final JobInfo job;
8+
9+
public ListJobReferenceImpl(JobInfo job) {
10+
this.job = job;
11+
}
12+
13+
@Override
14+
public JobInfo getJob() {
15+
return job;
16+
}
17+
18+
@Override
19+
public Optional<SkinInfo> getSkin() {
20+
return Optional.empty();
21+
}
22+
}

core/src/main/java/org/mineskin/response/JobResponseImpl.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import com.google.gson.JsonObject;
55
import org.mineskin.MineSkinClient;
66
import org.mineskin.data.JobInfo;
7+
import org.mineskin.data.JobStatus;
78
import org.mineskin.data.SkinInfo;
9+
import org.mineskin.exception.MineSkinRequestException;
810

911
import java.util.Map;
1012
import java.util.Optional;
@@ -31,15 +33,17 @@ public Optional<SkinInfo> getSkin() {
3133

3234
@Override
3335
public CompletableFuture<SkinInfo> getOrLoadSkin(MineSkinClient client) {
36+
if (getJob().status() == JobStatus.FAILED) {
37+
throw new MineSkinRequestException("job_failed", "Job failed", this);
38+
}
3439
if (this.skin != null) {
3540
this.skin.setBreadcrumb(getBreadcrumb());
3641
return CompletableFuture.completedFuture(this.skin);
37-
} else {
38-
return getJob().getSkin(client).thenApply(skin -> {
39-
this.skin = skin.getSkin();
40-
return this.skin;
41-
});
4242
}
43+
return getJob().getSkin(client).thenApply(skin -> {
44+
this.skin = skin.getSkin();
45+
return this.skin;
46+
});
4347
}
4448

4549
}

0 commit comments

Comments
 (0)