Skip to content

Commit

Permalink
Return a consumer from share rather than a URL, allows the share dest…
Browse files Browse the repository at this point in the history
…ination to control output
  • Loading branch information
me4502 committed May 23, 2021
1 parent a689bf8 commit e03d8e5
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 11 deletions.
Expand Up @@ -71,14 +71,14 @@
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;
import java.util.ArrayList;
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;
Expand Down Expand Up @@ -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());
}
Expand Down Expand Up @@ -408,7 +408,7 @@ public Void call() throws Exception {
}
}

private static class SchematicShareTask extends SchematicOutputTask<URL> {
private static class SchematicShareTask extends SchematicOutputTask<Consumer<Actor>> {
private final Actor actor;
private final String name;
private final ClipboardShareDestination destination;
Expand All @@ -425,14 +425,14 @@ private static class SchematicShareTask extends SchematicOutputTask<URL> {
}

@Override
public URL call() throws Exception {
public Consumer<Actor> 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);
}
}

Expand Down
Expand Up @@ -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.
Expand All @@ -45,7 +49,7 @@ public String getName() {
}

@Override
public URI share(ClipboardShareMetadata metadata, ShareOutputProvider serializer) throws Exception {
public Consumer<Actor> share(ClipboardShareMetadata metadata, ShareOutputProvider serializer) throws Exception {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

serializer.writeTo(outputStream);
Expand All @@ -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
Expand Down
Expand Up @@ -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 {

Expand All @@ -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<Actor> share(ClipboardShareMetadata metadata, ShareOutputProvider serializer) throws Exception;

/**
* Gets the default clipboard format for this share destination.
Expand Down

0 comments on commit e03d8e5

Please sign in to comment.