Skip to content

Commit

Permalink
Fix errors in upload fallbacks
Browse files Browse the repository at this point in the history
  • Loading branch information
zbx1425 committed Oct 3, 2023
1 parent a31874c commit 69b440a
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,45 +16,52 @@
import java.nio.file.Path;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

public class SubmitDispatcher {

private static final Executor NETWORK_EXECUTOR = Executors.newSingleThreadExecutor();
private static final Long2ObjectMap<SubmitJob> pendingJobs = new Long2ObjectOpenHashMap<>();

public static long addJob(CommentEntry comment, Path imagePath, Consumer<SubmitJob> callback) {
synchronized (pendingJobs) {
long jobId = ServerWorldData.SNOWFLAKE.nextId();
SubmitJob job = new SubmitJob(comment, imagePath, callback, MainClient.CLIENT_CONFIG);
pendingJobs.put(jobId, job);
if (imagePath != null) {
NETWORK_EXECUTOR.execute(() -> {
public static long addJob(CommentEntry comment, Path imagePath, BiConsumer<SubmitJob, Exception> callback) {
long jobId = ServerWorldData.SNOWFLAKE.nextId();
SubmitJob job = new SubmitJob(comment, imagePath, callback, MainClient.CLIENT_CONFIG);
addJob(jobId, job);
return jobId;
}

private static void addJob(long jobId, SubmitJob job) {
pendingJobs.put(jobId, job);
if (job.imagePath != null) {
NETWORK_EXECUTOR.execute(() -> {
try {
ImageUploadConfig uploader = job.uploaderToUse.poll();
if (uploader == null) throw new IllegalStateException("All uploads failed");
ThumbImage thumbImage = ImageUploader.getUploader(uploader).uploadImage(job.imagePath, job.comment);
job.setImage(thumbImage);
trySendPackage(jobId);

try {
ImageUploadConfig uploader = job.uploaderToUse.poll();
if (uploader == null) throw new IllegalStateException("All uploads failed");
ThumbImage thumbImage = ImageUploader.getUploader(uploader).uploadImage(imagePath, comment);
job.setImage(thumbImage);
trySendPackage(jobId);
} catch (Exception ex) {
Main.LOGGER.error("Upload Image", ex);
if (job.uploaderToUse.isEmpty()) {
job.exception = ex;
if (job.callback != null) job.callback.accept(job);
removeJob(jobId);
} else {
addJob(comment, imagePath, callback);
}
} finally {
Files.deleteIfExists(job.imagePath);
} catch (IOException ex) {
Main.LOGGER.error("Delete image file", ex);
}
} catch (Exception ex) {
Main.LOGGER.error("Upload Image", ex);
if (job.callback != null) job.callback.accept(job, ex);
if (job.uploaderToUse.isEmpty()) {
removeJob(jobId);
try {
Files.deleteIfExists(imagePath);
} catch (IOException ex) {
Main.LOGGER.error("Delete image file", ex);
Files.deleteIfExists(job.imagePath);
} catch (IOException ex2) {
Main.LOGGER.error("Delete image file", ex2);
}
} else {
addJob(jobId, job);
}
});
}
return jobId;
}
});
}
}

Expand All @@ -76,11 +83,11 @@ private static void trySendPackage(long jobId) {
SubmitJob job = pendingJobs.get(jobId);
if (job.isReady()) {
PacketEntryCreateC2S.ClientLogics.send(job.comment);
if (job.callback != null) job.callback.accept(null);
if (job.callback != null) job.callback.accept(null, null);
removeJob(jobId);
} else {
if (job.imagePath != null && !job.imageReady) {
if (job.callback != null) job.callback.accept(job);
if (job.callback != null) job.callback.accept(job, null);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,18 @@
import java.nio.file.Path;
import java.util.LinkedList;
import java.util.Queue;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

public class SubmitJob {

public final CommentEntry comment;
public final Path imagePath;
public boolean imageReady, blockPosReady;
public Exception exception;
public Consumer<SubmitJob> callback;
public BiConsumer<SubmitJob, Exception> callback;
public Queue<ImageUploadConfig> uploaderToUse;

public SubmitJob(CommentEntry comment, Path imagePath, Consumer<SubmitJob> callback, ClientConfig config) {
public SubmitJob(CommentEntry comment, Path imagePath, BiConsumer<SubmitJob, Exception> callback, ClientConfig config) {
this.comment = comment;
this.imagePath = imagePath;
if (imagePath == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,14 +192,15 @@ private void sendReport() {
);
long jobId = SubmitDispatcher.addJob(
comment, checkBoxNoImage.selected() ? null : imagePath,
data -> Minecraft.getInstance().execute(() -> {
if (data == null) {
(job, ex) -> Minecraft.getInstance().execute(() -> {
if (job == null) {
Minecraft.getInstance().player.displayClientMessage(
Component.translatable("gui.worldcomment.send_finish"), false);
} else {
if (data.exception != null) {
if (ex != null) {
Minecraft.getInstance().player.displayClientMessage(
Component.translatable("gui.worldcomment.send_fail", data.exception.getMessage()), false);
Component.translatable("gui.worldcomment.send_fail",
ex.getClass().getName() + ": " + ex.getMessage()), false);
} else {
Minecraft.getInstance().player.displayClientMessage(
Component.translatable("gui.worldcomment.send_upload_incomplete"), false);
Expand Down

0 comments on commit 69b440a

Please sign in to comment.