From b1957c9812e7c094c0969fa0c5949ccf03b59d90 Mon Sep 17 00:00:00 2001 From: games647 Date: Mon, 9 May 2016 21:51:21 +0200 Subject: [PATCH] Do not lookup twice for banned players --- .../authme/PurgeBannedPlayersCommand.java | 15 ++++++--------- src/main/java/fr/xephi/authme/task/PurgeTask.java | 13 ++++++++++--- .../AbstractDataSourceIntegrationTest.java | 4 +++- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/main/java/fr/xephi/authme/command/executable/authme/PurgeBannedPlayersCommand.java b/src/main/java/fr/xephi/authme/command/executable/authme/PurgeBannedPlayersCommand.java index e9c61bca..1f0a7c9c 100644 --- a/src/main/java/fr/xephi/authme/command/executable/authme/PurgeBannedPlayersCommand.java +++ b/src/main/java/fr/xephi/authme/command/executable/authme/PurgeBannedPlayersCommand.java @@ -4,7 +4,6 @@ import fr.xephi.authme.AuthMe; import fr.xephi.authme.command.CommandService; import fr.xephi.authme.command.ExecutableCommand; import fr.xephi.authme.datasource.DataSource; -import fr.xephi.authme.hooks.PluginHooks; import fr.xephi.authme.task.PurgeTask; import fr.xephi.authme.util.BukkitService; @@ -27,9 +26,6 @@ public class PurgeBannedPlayersCommand implements ExecutableCommand { @Inject private DataSource dataSource; - @Inject - private PluginHooks pluginHooks; - @Inject private AuthMe plugin; @@ -39,17 +35,18 @@ public class PurgeBannedPlayersCommand implements ExecutableCommand { @Override public void executeCommand(CommandSender sender, List arguments, CommandService commandService) { // Get the list of banned players - Set bannedPlayers = new HashSet<>(); - for (OfflinePlayer offlinePlayer : bukkitService.getBannedPlayers()) { - bannedPlayers.add(offlinePlayer.getName().toLowerCase()); + Set namedBanned = new HashSet<>(); + Set bannedPlayers = bukkitService.getBannedPlayers(); + for (OfflinePlayer offlinePlayer : bannedPlayers) { + namedBanned.add(offlinePlayer.getName().toLowerCase()); } //todo: note this should may run async because it may executes a SQL-Query // Purge the banned players - dataSource.purgeBanned(bannedPlayers); + dataSource.purgeBanned(namedBanned); // Show a status message sender.sendMessage(ChatColor.GOLD + "Purging user accounts..."); - new PurgeTask(plugin, plugin.getSettings(), sender, bannedPlayers).runTaskTimer(plugin, 0, 1); + new PurgeTask(plugin, plugin.getSettings(), sender, namedBanned, bannedPlayers).runTaskTimer(plugin, 0, 1); } } diff --git a/src/main/java/fr/xephi/authme/task/PurgeTask.java b/src/main/java/fr/xephi/authme/task/PurgeTask.java index cf885326..f8835a26 100644 --- a/src/main/java/fr/xephi/authme/task/PurgeTask.java +++ b/src/main/java/fr/xephi/authme/task/PurgeTask.java @@ -27,19 +27,25 @@ public class PurgeTask extends BukkitRunnable { private final UUID sender; private final Set toPurge; - private final OfflinePlayer[] offlinePlayers = Bukkit.getOfflinePlayers(); + private final OfflinePlayer[] offlinePlayers; private final boolean autoPurging; private final int totalPurgeCount; private int currentPage = 0; + public PurgeTask(AuthMe plugin, NewSetting newSetting, CommandSender sender + , Set purged, Set offlinePlayers) { + this(plugin, newSetting, sender, purged, false + , offlinePlayers.toArray(new OfflinePlayer[offlinePlayers.size()])); + } + public PurgeTask(AuthMe plugin, NewSetting newSetting, CommandSender sender, Set purged) { - this(plugin, newSetting, sender, purged, false); + this(plugin, newSetting, sender, purged, false, Bukkit.getOfflinePlayers()); } public PurgeTask(AuthMe plugin, NewSetting newSetting, CommandSender sender, Set purged - , boolean autoPurging) { + , boolean autoPurging, OfflinePlayer[] offlinePlayers) { this.plugin = plugin; this.newSetting = newSetting; @@ -52,6 +58,7 @@ public class PurgeTask extends BukkitRunnable { this.toPurge = purged; this.totalPurgeCount = purged.size(); this.autoPurging = autoPurging; + this.offlinePlayers = offlinePlayers; //this is commented out because I assume all players in the database already have an lowercase name // toPurge = new HashSet<>(purged.size()); diff --git a/src/test/java/fr/xephi/authme/datasource/AbstractDataSourceIntegrationTest.java b/src/test/java/fr/xephi/authme/datasource/AbstractDataSourceIntegrationTest.java index 30f3484e..bf8d54d5 100644 --- a/src/test/java/fr/xephi/authme/datasource/AbstractDataSourceIntegrationTest.java +++ b/src/test/java/fr/xephi/authme/datasource/AbstractDataSourceIntegrationTest.java @@ -10,6 +10,8 @@ import java.util.List; import static fr.xephi.authme.AuthMeMatchers.equalToHash; import static fr.xephi.authme.AuthMeMatchers.hasAuthBasicData; import static fr.xephi.authme.AuthMeMatchers.hasAuthLocation; +import java.util.HashSet; +import java.util.Set; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.hasSize; @@ -221,7 +223,7 @@ public abstract class AbstractDataSourceIntegrationTest { public void shouldDeletePlayers() { // given DataSource dataSource = getDataSource(); - List playersToDelete = Arrays.asList("bobby", "doesNotExist"); + Set playersToDelete = new HashSet<>(Arrays.asList("bobby", "doesNotExist")); assumeThat(dataSource.getAccountsRegistered(), equalTo(2)); // when