Skip to content

Commit 70383d0

Browse files
authored
Merge pull request #2 from MCCitiesNetwork/fix/deserialisation-issues
feat: undeserialisable config option
2 parents 9772ed6 + b0caeff commit 70383d0

5 files changed

Lines changed: 32 additions & 6 deletions

File tree

src/main/java/io/github/md5sha256/democracypost/DemocracyPost.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ public void onDisable() {
173173

174174
@Nonnull
175175
private DatabaseAdapter initDatabase() throws IOException {
176-
DatabaseAdapter adapter = new DatabaseAdapter(this.settings.databaseSettings());
176+
DatabaseAdapter adapter = new DatabaseAdapter(this.settings.databaseSettings(), getLogger(), this.settings.postSettings().skipUndeserializableItems());
177177
try {
178178
adapter.init();
179179
} catch (SQLException ex) {

src/main/java/io/github/md5sha256/democracypost/PostSettings.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ public record PostSettings(
1212
@Setting @Required long packageExpirySeconds,
1313
@Setting @Required long returnPackageExpirySeconds,
1414
@Setting @Required long expiryNotificationExpiryThresholdSeconds,
15-
@Setting @Required double postPrice
15+
@Setting @Required double postPrice,
16+
@Setting @Required boolean skipUndeserializableItems
1617
) {
1718

1819
@Nonnull

src/main/java/io/github/md5sha256/democracypost/database/DatabaseAdapter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.time.Duration;
1313
import java.util.List;
1414
import java.util.UUID;
15+
import java.util.logging.Logger;
1516

1617
public class DatabaseAdapter implements Closeable {
1718

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

2122
private HikariDataSource dataSource;
2223

23-
public DatabaseAdapter(@Nonnull DatabaseSettings databaseSettings) {
24+
public DatabaseAdapter(@Nonnull DatabaseSettings databaseSettings, @Nonnull Logger logger, boolean skipUndeserializableItems) {
2425
this.databaseSettings = databaseSettings;
25-
this.schema = new MariaSchema();
26+
this.schema = new MariaSchema(logger, skipUndeserializableItems);
2627
}
2728

2829
public void init() throws SQLException {

src/main/java/io/github/md5sha256/democracypost/database/MariaSchema.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,22 @@
2626
import java.time.Instant;
2727
import java.time.temporal.ChronoUnit;
2828
import java.util.ArrayList;
29-
import java.util.Collections;
3029
import java.util.Date;
3130
import java.util.List;
3231
import java.util.UUID;
32+
import java.util.logging.Logger;
33+
3334

3435
public class MariaSchema implements DatabaseSchema {
3536

37+
private final Logger logger;
38+
private final boolean skipUndeserializableItems;
39+
40+
public MariaSchema(@Nonnull Logger logger, boolean skipUndeserializableItems) {
41+
this.logger = logger;
42+
this.skipUndeserializableItems = skipUndeserializableItems;
43+
}
44+
3645
private static final String CREATE_POST_PACKAGES_TABLE = """
3746
CREATE TABLE POST_PACKAGE (
3847
package_id BINARY(16) NOT NULL,
@@ -225,7 +234,21 @@ private List<ItemStack> getItemStacks(@Nonnull byte[] bytes) {
225234
.defaultOptions(options -> options.serializers(Serializers.defaults()));
226235
try {
227236
ConfigurationNode node = builder.buildAndLoadString(s);
228-
return node.getList(ItemStack.class, Collections.emptyList());
237+
List<ItemStack> items = new ArrayList<>();
238+
for (ConfigurationNode child : node.childrenList()) {
239+
try {
240+
ItemStack item = child.get(ItemStack.class);
241+
if (item != null) {
242+
items.add(item);
243+
}
244+
} catch (ConfigurateException ex) {
245+
if (!this.skipUndeserializableItems) {
246+
throw new IllegalStateException("Failed to deserialize item stacks!", ex);
247+
}
248+
this.logger.warning("Skipping item that could not be deserialized: " + ex.getMessage());
249+
}
250+
}
251+
return items;
229252
} catch (ConfigurateException ex) {
230253
throw new IllegalStateException("Failed to deserialize item stacks!", ex);
231254
}

src/main/resources/settings.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ post-settings:
1313
return-package-expiry-seconds: 2592000
1414
expiry-notification-expiry-threshold-seconds: 259200
1515
post-price: 0.50
16+
skip-undeserializable-items: true
1617

1718
save-duration-seconds: 600
1819
join-message-delay-seconds: 10

0 commit comments

Comments
 (0)