package io.github.lucaseasedup.logit.account;
import io.github.lucaseasedup.logit.LogItCoreObject;
import io.github.lucaseasedup.logit.config.TimeUnit;
import io.github.lucaseasedup.logit.storage.Infix;
import io.github.lucaseasedup.logit.storage.SelectorBinary;
import io.github.lucaseasedup.logit.storage.SelectorCondition;
import io.github.lucaseasedup.logit.storage.SelectorNegation;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public final class AccountWatcher extends LogItCoreObject implements Runnable
{
/**
* Internal method. Do not call directly.
*/
@Override
public void run()
{
boolean accountDeletionEnabled =
getConfig("config.yml").getBoolean("automaticAccountDeletion.enabled");
if (!accountDeletionEnabled)
return;
long now = System.currentTimeMillis() / 1000L;
long inactivityTime =
getConfig("config.yml").getTime("automaticAccountDeletion.inactivityTime",
TimeUnit.SECONDS);
List<Account> accounts = getAccountManager().selectAccounts(
Arrays.asList(keys().username(), keys().last_active_date()),
new SelectorBinary(
new SelectorCondition(
keys().last_active_date(),
Infix.GREATER_THAN,
"0"
),
Infix.AND,
new SelectorNegation(
new SelectorCondition(
keys().last_active_date(),
Infix.GREATER_THAN,
String.valueOf(now - inactivityTime)
)
)
)
);
if (!accounts.isEmpty())
{
List<String> accountsToDelete = new ArrayList<>();
for (Account account : accounts)
{
String username = account.getUsername();
if (!getSessionManager().isSessionAlive(username))
{
accountsToDelete.add(username);
}
}
getAccountManager().removeAccounts(
accountsToDelete.toArray(new String[accountsToDelete.size()])
);
}
}
/**
* Recommended task period of {@code AccountWatcher} running as a Bukkit task.
*/
public static final long TASK_PERIOD = TimeUnit.MINUTES.convertTo(10, TimeUnit.TICKS);
}