Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ public void onDisable() {

@Nonnull
private DatabaseAdapter initDatabase() throws IOException {
DatabaseAdapter adapter = new DatabaseAdapter(this.settings.databaseSettings());
DatabaseAdapter adapter = new DatabaseAdapter(this.settings.databaseSettings(), getLogger(), this.settings.postSettings().skipUndeserializableItems());
try {
adapter.init();
} catch (SQLException ex) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ public record PostSettings(
@Setting @Required long packageExpirySeconds,
@Setting @Required long returnPackageExpirySeconds,
@Setting @Required long expiryNotificationExpiryThresholdSeconds,
@Setting @Required double postPrice
@Setting @Required double postPrice,
@Setting @Required boolean skipUndeserializableItems
) {

@Nonnull
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import java.time.Duration;
import java.util.List;
import java.util.UUID;
import java.util.logging.Logger;

public class DatabaseAdapter implements Closeable {

Expand All @@ -20,9 +21,9 @@ public class DatabaseAdapter implements Closeable {

private HikariDataSource dataSource;

public DatabaseAdapter(@Nonnull DatabaseSettings databaseSettings) {
public DatabaseAdapter(@Nonnull DatabaseSettings databaseSettings, @Nonnull Logger logger, boolean skipUndeserializableItems) {
this.databaseSettings = databaseSettings;
this.schema = new MariaSchema();
this.schema = new MariaSchema(logger, skipUndeserializableItems);
}

public void init() throws SQLException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,22 @@
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.logging.Logger;


public class MariaSchema implements DatabaseSchema {

private final Logger logger;
private final boolean skipUndeserializableItems;

public MariaSchema(@Nonnull Logger logger, boolean skipUndeserializableItems) {
this.logger = logger;
this.skipUndeserializableItems = skipUndeserializableItems;
}

private static final String CREATE_POST_PACKAGES_TABLE = """
CREATE TABLE POST_PACKAGE (
package_id BINARY(16) NOT NULL,
Expand Down Expand Up @@ -225,7 +234,21 @@ private List<ItemStack> getItemStacks(@Nonnull byte[] bytes) {
.defaultOptions(options -> options.serializers(Serializers.defaults()));
try {
ConfigurationNode node = builder.buildAndLoadString(s);
return node.getList(ItemStack.class, Collections.emptyList());
List<ItemStack> items = new ArrayList<>();
for (ConfigurationNode child : node.childrenList()) {
try {
ItemStack item = child.get(ItemStack.class);
if (item != null) {
items.add(item);
}
} catch (ConfigurateException ex) {
if (!this.skipUndeserializableItems) {
throw new IllegalStateException("Failed to deserialize item stacks!", ex);
}
this.logger.warning("Skipping item that could not be deserialized: " + ex.getMessage());
}
}
return items;
} catch (ConfigurateException ex) {
throw new IllegalStateException("Failed to deserialize item stacks!", ex);
}
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/settings.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ post-settings:
return-package-expiry-seconds: 2592000
expiry-notification-expiry-threshold-seconds: 259200
post-price: 0.50
skip-undeserializable-items: true

save-duration-seconds: 600
join-message-delay-seconds: 10
Expand Down
Loading