From e03d8e5978b11955a5034a338a11cc4da0b04829 Mon Sep 17 00:00:00 2001 From: Madeline Miller Date: Sun, 23 May 2021 18:33:41 +1000 Subject: [PATCH] Return a consumer from share rather than a URL, allows the share destination to control output --- .../sk89q/worldedit/command/SchematicCommands.java | 10 +++++----- .../io/share/BuiltInClipboardShareDestinations.java | 13 ++++++++++--- .../io/share/ClipboardShareDestination.java | 7 ++++--- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/SchematicCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/SchematicCommands.java index bc748aef18..cc0b73988d 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/SchematicCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/SchematicCommands.java @@ -71,7 +71,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; -import java.net.URL; import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; @@ -79,6 +78,7 @@ import java.util.Comparator; import java.util.List; import java.util.concurrent.Callable; +import java.util.function.Consumer; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; @@ -234,7 +234,7 @@ public void share(Actor actor, LocalSession session, .registerWithSupervisor(worldEdit.getSupervisor(), "Sharing schematic") .setDelayMessage(TranslatableComponent.of("worldedit.schematic.save.saving")) .setWorkingMessage(TranslatableComponent.of("worldedit.schematic.save.still-saving")) - .onSuccess("Shared", (url -> actor.printInfo(TextComponent.of(url.toExternalForm() + ".schem").clickEvent(ClickEvent.openUrl(url.toExternalForm() + ".schem"))))) + .onSuccess("Shared", (consumer -> consumer.accept(actor))) .onFailure("Failed to share schematic", worldEdit.getPlatformManager().getPlatformCommandManager().getExceptionConverter()) .buildAndExec(worldEdit.getExecutorService()); } @@ -408,7 +408,7 @@ public Void call() throws Exception { } } - private static class SchematicShareTask extends SchematicOutputTask { + private static class SchematicShareTask extends SchematicOutputTask> { private final Actor actor; private final String name; private final ClipboardShareDestination destination; @@ -425,14 +425,14 @@ private static class SchematicShareTask extends SchematicOutputTask { } @Override - public URL call() throws Exception { + public Consumer call() throws Exception { ClipboardShareMetadata metadata = new ClipboardShareMetadata( format, this.actor.getName(), name == null ? actor.getName() + "-" + System.currentTimeMillis() : name ); - return destination.share(metadata, this::writeToOutputStream).toURL(); + return destination.share(metadata, this::writeToOutputStream); } } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/share/BuiltInClipboardShareDestinations.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/share/BuiltInClipboardShareDestinations.java index 61cdd4f275..06472f36ac 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/share/BuiltInClipboardShareDestinations.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/share/BuiltInClipboardShareDestinations.java @@ -20,15 +20,19 @@ package com.sk89q.worldedit.extent.clipboard.io.share; import com.google.common.collect.ImmutableSet; +import com.sk89q.worldedit.extension.platform.Actor; import com.sk89q.worldedit.extent.clipboard.io.BuiltInClipboardFormat; import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat; +import com.sk89q.worldedit.util.formatting.text.TextComponent; +import com.sk89q.worldedit.util.formatting.text.event.ClickEvent; import com.sk89q.worldedit.util.paste.EngineHubPaste; import com.sk89q.worldedit.util.paste.PasteMetadata; import java.io.ByteArrayOutputStream; -import java.net.URI; +import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.Base64; +import java.util.function.Consumer; /** * A collection of natively supported clipboard share destinations. @@ -45,7 +49,7 @@ public String getName() { } @Override - public URI share(ClipboardShareMetadata metadata, ShareOutputProvider serializer) throws Exception { + public Consumer share(ClipboardShareMetadata metadata, ShareOutputProvider serializer) throws Exception { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); serializer.writeTo(outputStream); @@ -55,7 +59,10 @@ public URI share(ClipboardShareMetadata metadata, ShareOutputProvider serializer pasteMetadata.extension = "schem"; pasteMetadata.name = metadata.name(); EngineHubPaste pasteService = new EngineHubPaste(); - return pasteService.paste(new String(Base64.getEncoder().encode(outputStream.toByteArray()), StandardCharsets.UTF_8), pasteMetadata).call().toURI(); + + URL url = pasteService.paste(new String(Base64.getEncoder().encode(outputStream.toByteArray()), StandardCharsets.UTF_8), pasteMetadata).call(); + String urlString = url.toExternalForm() + ".schem"; + return actor -> actor.printInfo(TextComponent.of(urlString).clickEvent(ClickEvent.openUrl(urlString))); } @Override diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/share/ClipboardShareDestination.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/share/ClipboardShareDestination.java index ebeb3a7de6..1b0cb9e213 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/share/ClipboardShareDestination.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/share/ClipboardShareDestination.java @@ -19,10 +19,11 @@ package com.sk89q.worldedit.extent.clipboard.io.share; +import com.sk89q.worldedit.extension.platform.Actor; import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat; -import java.net.URI; import java.util.Set; +import java.util.function.Consumer; public interface ClipboardShareDestination { @@ -49,10 +50,10 @@ public interface ClipboardShareDestination { * * @param metadata The clipboard metadata * @param serializer A function taking the {@link java.io.OutputStream} - * @return The URI + * @return A consumer to provide the actor with the share results * @throws Exception if it failed to share */ - URI share(ClipboardShareMetadata metadata, ShareOutputProvider serializer) throws Exception; + Consumer share(ClipboardShareMetadata metadata, ShareOutputProvider serializer) throws Exception; /** * Gets the default clipboard format for this share destination.