X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fxdcc%2Fui%2Fstdin%2FSearchCommand.java;h=170365ae4e81832ad37c40fe160fe7930e364f28;hb=e4882fefb159ba6de40048796c943cc2115fc193;hp=9619f117d10e78dad81f57b399b8964ed79049d2;hpb=1ca482cdf4956eb7dcdcfd75c4d0412cf0261fdf;p=xudocci.git diff --git a/src/main/java/net/pterodactylus/xdcc/ui/stdin/SearchCommand.java b/src/main/java/net/pterodactylus/xdcc/ui/stdin/SearchCommand.java index 9619f11..170365a 100644 --- a/src/main/java/net/pterodactylus/xdcc/ui/stdin/SearchCommand.java +++ b/src/main/java/net/pterodactylus/xdcc/ui/stdin/SearchCommand.java @@ -19,12 +19,16 @@ package net.pterodactylus.xdcc.ui.stdin; import static com.google.common.collect.Lists.newArrayList; import static java.util.Arrays.asList; +import static java.util.regex.Pattern.CASE_INSENSITIVE; +import static java.util.regex.Pattern.UNICODE_CASE; +import static java.util.regex.Pattern.compile; import java.io.IOException; import java.io.Writer; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.regex.Pattern; import net.pterodactylus.xdcc.core.Core; import net.pterodactylus.xdcc.data.Bot; @@ -70,19 +74,8 @@ public class SearchCommand implements Command { List lastResult = newArrayList(); for (Bot bot : newArrayList(core.bots())) { for (Pack pack : newArrayList(bot)) { - boolean found = true; - for (String parameter : parameters) { - if (parameter.startsWith("-") && pack.name().toLowerCase().contains(parameter.toLowerCase().substring(1))) { - found = false; - break; - } - if (!parameter.startsWith("-") && !pack.name().toLowerCase().contains(parameter.toLowerCase())) { - found = false; - break; - } - } - if (found) { - lastResult.add(new Result(bot, pack)); + if (parameters.stream().map(SearchParameter::from).allMatch((parameter) -> parameter.matches(pack.name()))) { + lastResult.add(new Result(core, bot, pack)); } } } @@ -96,4 +89,26 @@ public class SearchCommand implements Command { return state.setLastResults(lastResult); } + private static class SearchParameter { + + private final boolean exclude; + private final Pattern pattern; + + private SearchParameter(boolean exclude, Pattern pattern) { + this.exclude = exclude; + this.pattern = pattern; + } + + public boolean matches(String filename) { + return pattern.matcher(filename).find() && !exclude; + } + + public static SearchParameter from(String parameter) { + boolean exclude = parameter.startsWith("-"); + Pattern pattern = compile(exclude ? parameter.substring(1) : parameter, CASE_INSENSITIVE | UNICODE_CASE); + return new SearchParameter(exclude, pattern); + } + + } + }