Improve fullycopy pattern parsing

- Don't attempt ClipboardFormats#loadAllFromInput if the user is typing #copy or #clipboard to avoid needless "File dialogs are not supported in your environment." message
This commit is contained in:
dordsor21 2021-09-19 20:47:40 +01:00
parent abaa98d2a9
commit f405994346
No known key found for this signature in database
GPG Key ID: 1E53E88969FFCF0B

View File

@ -18,6 +18,7 @@ import javax.annotation.Nonnull;
import java.io.IOException; import java.io.IOException;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.stream.Stream; import java.util.stream.Stream;
public class RandomFullClipboardPatternParser extends RichParser<Pattern> { public class RandomFullClipboardPatternParser extends RichParser<Pattern> {
@ -34,6 +35,16 @@ public class RandomFullClipboardPatternParser extends RichParser<Pattern> {
@Override @Override
protected Stream<String> getSuggestions(String argumentInput, int index) { protected Stream<String> getSuggestions(String argumentInput, int index) {
switch (index) { switch (index) {
case 0:
if (argumentInput.equals("#") || argumentInput.equals("#c")) {
return Stream.of("#copy", "#clipboard");
} else if ("#copy".startsWith(argumentInput.toUpperCase(Locale.ROOT))) {
return Stream.of("#copy");
} else if ("#clipboard".startsWith(argumentInput.toUpperCase(Locale.ROOT))) {
return Stream.of("#clipboard");
} else {
return Stream.empty();
}
case 1: case 1:
case 2: case 2:
return SuggestionHelper.suggestBoolean(argumentInput); return SuggestionHelper.suggestBoolean(argumentInput);
@ -54,16 +65,14 @@ public class RandomFullClipboardPatternParser extends RichParser<Pattern> {
boolean rotate = arguments.length >= 2 && Boolean.getBoolean(arguments[1]); boolean rotate = arguments.length >= 2 && Boolean.getBoolean(arguments[1]);
boolean flip = arguments.length == 3 && Boolean.getBoolean(arguments[2]); boolean flip = arguments.length == 3 && Boolean.getBoolean(arguments[2]);
List<ClipboardHolder> clipboards; List<ClipboardHolder> clipboards;
switch (arguments[0].toLowerCase()) { if ("#copy".startsWith(arguments[0].toUpperCase(Locale.ROOT)) ||
case "#copy": "#clipboard".startsWith(arguments[0].toUpperCase(Locale.ROOT))) {
case "#clipboard":
ClipboardHolder clipboard = context.requireSession().getExistingClipboard(); ClipboardHolder clipboard = context.requireSession().getExistingClipboard();
if (clipboard == null) { if (clipboard == null) {
throw new InputParseException(Caption.of("fawe.error.parse.no-clipboard", getPrefix())); throw new InputParseException(Caption.of("fawe.error.parse.no-clipboard", getPrefix()));
} }
clipboards = Collections.singletonList(clipboard); clipboards = Collections.singletonList(clipboard);
break; } else {
default:
Actor player = context.requireActor(); Actor player = context.requireActor();
MultiClipboardHolder multi = ClipboardFormats.loadAllFromInput(player, MultiClipboardHolder multi = ClipboardFormats.loadAllFromInput(player,
arguments[0], ClipboardFormats.findByAlias("fast"), false arguments[0], ClipboardFormats.findByAlias("fast"), false
@ -82,7 +91,6 @@ public class RandomFullClipboardPatternParser extends RichParser<Pattern> {
throw new InputParseException(Caption.of("fawe.error.parse.no-clipboard-source", arguments[0])); throw new InputParseException(Caption.of("fawe.error.parse.no-clipboard-source", arguments[0]));
} }
clipboards = multi.getHolders(); clipboards = multi.getHolders();
break;
} }
return new RandomFullClipboardPattern(clipboards, rotate, flip); return new RandomFullClipboardPattern(clipboards, rotate, flip);
} catch (IOException e) { } catch (IOException e) {