Don't allow players to have more than 5 open snapshots at a time
This commit is contained in:
parent
828f39536b
commit
aaa248833e
@ -20,6 +20,8 @@ import mineplex.core.report.data.Report;
|
|||||||
*/
|
*/
|
||||||
public class SnapshotManager
|
public class SnapshotManager
|
||||||
{
|
{
|
||||||
|
public static final int MAX_SNAPSHOTS = 5;
|
||||||
|
|
||||||
// There aren't any List or Set caching implementations
|
// There aren't any List or Set caching implementations
|
||||||
// For an easy work around, we store values as the Key
|
// For an easy work around, we store values as the Key
|
||||||
// For the value we just use some dummy object
|
// For the value we just use some dummy object
|
||||||
|
@ -6,15 +6,16 @@ import java.sql.PreparedStatement;
|
|||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.sql.Types;
|
import java.sql.Types;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import mineplex.core.common.util.UtilTime;
|
import mineplex.core.common.util.UtilTime;
|
||||||
import mineplex.core.report.data.Report;
|
|
||||||
import mineplex.serverdata.database.DBPool;
|
import mineplex.serverdata.database.DBPool;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -72,6 +73,7 @@ public class SnapshotRepository
|
|||||||
private static final String GET_ID_FROM_TOKEN = "SELECT snapshots.id FROM snapshots WHERE snapshots.token = ?;";
|
private static final String GET_ID_FROM_TOKEN = "SELECT snapshots.id FROM snapshots WHERE snapshots.token = ?;";
|
||||||
private static final String GET_METADATA = "SELECT token, creatorId FROM snapshots WHERE id = ?;";
|
private static final String GET_METADATA = "SELECT token, creatorId FROM snapshots WHERE id = ?;";
|
||||||
private static final String SET_TOKEN = "UPDATE snapshots SET token = ? WHERE id = ?;";
|
private static final String SET_TOKEN = "UPDATE snapshots SET token = ? WHERE id = ?;";
|
||||||
|
private static final String GET_USER_SNAPSHOTS = "SELECT snapshots.id FROM snapshots WHERE snapshots.creatorId = ?;";
|
||||||
|
|
||||||
private final String _serverName;
|
private final String _serverName;
|
||||||
private final Logger _logger;
|
private final Logger _logger;
|
||||||
@ -208,6 +210,40 @@ public class SnapshotRepository
|
|||||||
return future;
|
return future;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CompletableFuture<List<Integer>> getUserSnapshots(int creatorId)
|
||||||
|
{
|
||||||
|
CompletableFuture<List<Integer>> future = CompletableFuture.supplyAsync(() ->
|
||||||
|
{
|
||||||
|
try (Connection connection = DBPool.getAccount().getConnection())
|
||||||
|
{
|
||||||
|
PreparedStatement preparedStatement = connection.prepareStatement(GET_USER_SNAPSHOTS);
|
||||||
|
preparedStatement.setInt(1, creatorId);
|
||||||
|
|
||||||
|
ResultSet resultSet = preparedStatement.executeQuery();
|
||||||
|
List<Integer> snapshotIds = new ArrayList<>();
|
||||||
|
|
||||||
|
while (resultSet.next())
|
||||||
|
{
|
||||||
|
snapshotIds.add(resultSet.getInt("id"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return snapshotIds;
|
||||||
|
}
|
||||||
|
catch (SQLException e)
|
||||||
|
{
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
future.exceptionally(throwable ->
|
||||||
|
{
|
||||||
|
_logger.log(Level.SEVERE, "Error getting snapshots for user " + creatorId + ".");
|
||||||
|
return new ArrayList<>();
|
||||||
|
});
|
||||||
|
|
||||||
|
return future;
|
||||||
|
}
|
||||||
|
|
||||||
private void setToken(Connection connection, int snapshotId, String token) throws SQLException
|
private void setToken(Connection connection, int snapshotId, String token) throws SQLException
|
||||||
{
|
{
|
||||||
try (PreparedStatement setTokenStatement = connection.prepareStatement(SET_TOKEN))
|
try (PreparedStatement setTokenStatement = connection.prepareStatement(SET_TOKEN))
|
||||||
|
@ -33,23 +33,34 @@ public class ChatSnapCommand extends CommandBase<SnapshotPlugin>
|
|||||||
{
|
{
|
||||||
SnapshotManager manager = Plugin.getSnapshotManager();
|
SnapshotManager manager = Plugin.getSnapshotManager();
|
||||||
SnapshotRepository repository = manager.getRepository();
|
SnapshotRepository repository = manager.getRepository();
|
||||||
|
|
||||||
int accountId = _commandCenter.GetClientManager().getAccountId(player);
|
int accountId = _commandCenter.GetClientManager().getAccountId(player);
|
||||||
Set<SnapshotMessage> messages = manager.getMessagesInvolving(accountId);
|
|
||||||
|
|
||||||
repository.createSnapshot(accountId).thenAccept(snapshotMetadata ->
|
Plugin.getSnapshotManager().getRepository().getUserSnapshots(accountId).thenAccept(snapshotIds ->
|
||||||
{
|
{
|
||||||
String token = snapshotMetadata.getToken().orElseThrow(() ->
|
if (snapshotIds.size() < SnapshotManager.MAX_SNAPSHOTS)
|
||||||
new IllegalStateException("Snapshot doesn't have a token."));
|
{
|
||||||
|
Set<SnapshotMessage> messages = manager.getMessagesInvolving(accountId);
|
||||||
|
|
||||||
repository.insertMessages(snapshotMetadata.getId(), messages).join();
|
repository.createSnapshot(accountId).thenAccept(snapshotMetadata ->
|
||||||
|
{
|
||||||
|
String token = snapshotMetadata.getToken().orElseThrow(() ->
|
||||||
|
new IllegalStateException("Snapshot doesn't have a token."));
|
||||||
|
|
||||||
UtilPlayer.message(player, F.main(Plugin.getName(), "Snapshot successfully created."));
|
repository.insertMessages(snapshotMetadata.getId(), messages).join();
|
||||||
|
|
||||||
new JsonMessage(F.main(Plugin.getName(), "Your snapshot token is: "))
|
UtilPlayer.message(player, F.main(Plugin.getName(), "Snapshot successfully created."));
|
||||||
.extra(F.elem(token))
|
|
||||||
.click(ClickEvent.OPEN_URL, SnapshotRepository.getURL(token))
|
new JsonMessage(F.main(Plugin.getName(), "Your snapshot token is: "))
|
||||||
.sendToPlayer(player);
|
.extra(F.elem(token))
|
||||||
|
.click(ClickEvent.OPEN_URL, SnapshotRepository.getURL(token))
|
||||||
|
.sendToPlayer(player);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UtilPlayer.message(player, F.main(Plugin.getName(),
|
||||||
|
C.cRed + "Cannot create snapshot, you have reached the limit."));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -92,7 +92,7 @@ public class ReportCommand extends CommandBase<ReportPlugin>
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
UtilPlayer.message(reporter, F.main(Plugin.getName(),
|
UtilPlayer.message(reporter, F.main(Plugin.getName(),
|
||||||
C.cRed + "Cannot create report, you currently have too many open reports."));
|
C.cRed + "Cannot create report, you have reached the limit."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -506,7 +506,7 @@ public class ReportRepository
|
|||||||
|
|
||||||
public CompletableFuture<List<Long>> getOpenReports(int reporterId)
|
public CompletableFuture<List<Long>> getOpenReports(int reporterId)
|
||||||
{
|
{
|
||||||
CompletableFuture<List<Long>> future = CompletableFuture.supplyAsync(() ->
|
return CompletableFuture.supplyAsync(() ->
|
||||||
{
|
{
|
||||||
try (Connection connection = DBPool.getAccount().getConnection())
|
try (Connection connection = DBPool.getAccount().getConnection())
|
||||||
{
|
{
|
||||||
@ -528,8 +528,6 @@ public class ReportRepository
|
|||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return future;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Set<ReportMessage> getReportReasons(Connection connection, long reportId)
|
private Set<ReportMessage> getReportReasons(Connection connection, long reportId)
|
||||||
|
Loading…
Reference in New Issue
Block a user