Do not lookup twice for banned players

This commit is contained in:
games647 2016-05-09 21:51:21 +02:00
parent 45ddacc88a
commit b1957c9812
3 changed files with 19 additions and 13 deletions

View File

@ -4,7 +4,6 @@ import fr.xephi.authme.AuthMe;
import fr.xephi.authme.command.CommandService; import fr.xephi.authme.command.CommandService;
import fr.xephi.authme.command.ExecutableCommand; import fr.xephi.authme.command.ExecutableCommand;
import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.datasource.DataSource;
import fr.xephi.authme.hooks.PluginHooks;
import fr.xephi.authme.task.PurgeTask; import fr.xephi.authme.task.PurgeTask;
import fr.xephi.authme.util.BukkitService; import fr.xephi.authme.util.BukkitService;
@ -27,9 +26,6 @@ public class PurgeBannedPlayersCommand implements ExecutableCommand {
@Inject @Inject
private DataSource dataSource; private DataSource dataSource;
@Inject
private PluginHooks pluginHooks;
@Inject @Inject
private AuthMe plugin; private AuthMe plugin;
@ -39,17 +35,18 @@ public class PurgeBannedPlayersCommand implements ExecutableCommand {
@Override @Override
public void executeCommand(CommandSender sender, List<String> arguments, CommandService commandService) { public void executeCommand(CommandSender sender, List<String> arguments, CommandService commandService) {
// Get the list of banned players // Get the list of banned players
Set<String> bannedPlayers = new HashSet<>(); Set<String> namedBanned = new HashSet<>();
for (OfflinePlayer offlinePlayer : bukkitService.getBannedPlayers()) { Set<OfflinePlayer> bannedPlayers = bukkitService.getBannedPlayers();
bannedPlayers.add(offlinePlayer.getName().toLowerCase()); for (OfflinePlayer offlinePlayer : bannedPlayers) {
namedBanned.add(offlinePlayer.getName().toLowerCase());
} }
//todo: note this should may run async because it may executes a SQL-Query //todo: note this should may run async because it may executes a SQL-Query
// Purge the banned players // Purge the banned players
dataSource.purgeBanned(bannedPlayers); dataSource.purgeBanned(namedBanned);
// Show a status message // Show a status message
sender.sendMessage(ChatColor.GOLD + "Purging user accounts..."); 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);
} }
} }

View File

@ -27,19 +27,25 @@ public class PurgeTask extends BukkitRunnable {
private final UUID sender; private final UUID sender;
private final Set<String> toPurge; private final Set<String> toPurge;
private final OfflinePlayer[] offlinePlayers = Bukkit.getOfflinePlayers(); private final OfflinePlayer[] offlinePlayers;
private final boolean autoPurging; private final boolean autoPurging;
private final int totalPurgeCount; private final int totalPurgeCount;
private int currentPage = 0; private int currentPage = 0;
public PurgeTask(AuthMe plugin, NewSetting newSetting, CommandSender sender
, Set<String> purged, Set<OfflinePlayer> offlinePlayers) {
this(plugin, newSetting, sender, purged, false
, offlinePlayers.toArray(new OfflinePlayer[offlinePlayers.size()]));
}
public PurgeTask(AuthMe plugin, NewSetting newSetting, CommandSender sender, Set<String> purged) { public PurgeTask(AuthMe plugin, NewSetting newSetting, CommandSender sender, Set<String> purged) {
this(plugin, newSetting, sender, purged, false); this(plugin, newSetting, sender, purged, false, Bukkit.getOfflinePlayers());
} }
public PurgeTask(AuthMe plugin, NewSetting newSetting, CommandSender sender, Set<String> purged public PurgeTask(AuthMe plugin, NewSetting newSetting, CommandSender sender, Set<String> purged
, boolean autoPurging) { , boolean autoPurging, OfflinePlayer[] offlinePlayers) {
this.plugin = plugin; this.plugin = plugin;
this.newSetting = newSetting; this.newSetting = newSetting;
@ -52,6 +58,7 @@ public class PurgeTask extends BukkitRunnable {
this.toPurge = purged; this.toPurge = purged;
this.totalPurgeCount = purged.size(); this.totalPurgeCount = purged.size();
this.autoPurging = autoPurging; this.autoPurging = autoPurging;
this.offlinePlayers = offlinePlayers;
//this is commented out because I assume all players in the database already have an lowercase name //this is commented out because I assume all players in the database already have an lowercase name
// toPurge = new HashSet<>(purged.size()); // toPurge = new HashSet<>(purged.size());

View File

@ -10,6 +10,8 @@ import java.util.List;
import static fr.xephi.authme.AuthMeMatchers.equalToHash; import static fr.xephi.authme.AuthMeMatchers.equalToHash;
import static fr.xephi.authme.AuthMeMatchers.hasAuthBasicData; import static fr.xephi.authme.AuthMeMatchers.hasAuthBasicData;
import static fr.xephi.authme.AuthMeMatchers.hasAuthLocation; 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.equalTo;
import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.hasSize;
@ -221,7 +223,7 @@ public abstract class AbstractDataSourceIntegrationTest {
public void shouldDeletePlayers() { public void shouldDeletePlayers() {
// given // given
DataSource dataSource = getDataSource(); DataSource dataSource = getDataSource();
List<String> playersToDelete = Arrays.asList("bobby", "doesNotExist"); Set<String> playersToDelete = new HashSet<>(Arrays.asList("bobby", "doesNotExist"));
assumeThat(dataSource.getAccountsRegistered(), equalTo(2)); assumeThat(dataSource.getAccountsRegistered(), equalTo(2));
// when // when