You've already forked Arcturus-Morningstar-Extended
mirror of
https://github.com/duckietm/Arcturus-Morningstar-Extended.git
synced 2026-06-19 15:06:19 +00:00
Merge pull request #242 from simoleo89/fix/wired-date-time-inputs
fix(wired): bound date range inputs
This commit is contained in:
+18
-6
@@ -53,8 +53,7 @@ public class WiredConditionDateRangeActive extends InteractionWiredCondition {
|
||||
@Override
|
||||
public boolean saveData(WiredSettings settings) {
|
||||
if(settings.getIntParams().length < 2) return false;
|
||||
this.startDate = settings.getIntParams()[0];
|
||||
this.endDate = settings.getIntParams()[1];
|
||||
this.applyRange(settings.getIntParams()[0], settings.getIntParams()[1]);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -81,19 +80,26 @@ public class WiredConditionDateRangeActive extends InteractionWiredCondition {
|
||||
@Override
|
||||
public void loadWiredData(ResultSet set, Room room) throws SQLException {
|
||||
String wiredData = set.getString("wired_data");
|
||||
if (wiredData == null || wiredData.isEmpty()) {
|
||||
this.applyRange(0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (wiredData.startsWith("{")) {
|
||||
JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class);
|
||||
this.startDate = data.startDate;
|
||||
this.endDate = data.endDate;
|
||||
if (data == null) {
|
||||
this.applyRange(0, 0);
|
||||
return;
|
||||
}
|
||||
this.applyRange(data.startDate, data.endDate);
|
||||
} else {
|
||||
String[] data = wiredData.split("\t");
|
||||
|
||||
if (data.length == 2) {
|
||||
try {
|
||||
this.startDate = Integer.parseInt(data[0]);
|
||||
this.endDate = Integer.parseInt(data[1]);
|
||||
this.applyRange(Integer.parseInt(data[0]), Integer.parseInt(data[1]));
|
||||
} catch (Exception e) {
|
||||
this.applyRange(0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -105,6 +111,12 @@ public class WiredConditionDateRangeActive extends InteractionWiredCondition {
|
||||
this.endDate = 0;
|
||||
}
|
||||
|
||||
private void applyRange(int startDate, int endDate) {
|
||||
int[] range = WiredDateRangeInputGuard.normalizeRange(startDate, endDate);
|
||||
this.startDate = range[0];
|
||||
this.endDate = range[1];
|
||||
}
|
||||
|
||||
static class JsonData {
|
||||
int startDate;
|
||||
int endDate;
|
||||
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package com.eu.habbo.habbohotel.items.interactions.wired.conditions;
|
||||
|
||||
public final class WiredDateRangeInputGuard {
|
||||
private WiredDateRangeInputGuard() {
|
||||
}
|
||||
|
||||
public static int[] normalizeRange(int startDate, int endDate) {
|
||||
int start = normalizeTimestamp(startDate);
|
||||
int end = normalizeTimestamp(endDate);
|
||||
|
||||
if (start > end) {
|
||||
return new int[]{0, 0};
|
||||
}
|
||||
|
||||
return new int[]{start, end};
|
||||
}
|
||||
|
||||
public static int normalizeTimestamp(int value) {
|
||||
return Math.max(0, value);
|
||||
}
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package com.eu.habbo.habbohotel.items.interactions.wired.conditions;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class WiredDateRangeInputGuardTest {
|
||||
|
||||
@Test
|
||||
void timestampsAreNonNegative() {
|
||||
assertEquals(0, WiredDateRangeInputGuard.normalizeTimestamp(-1));
|
||||
assertEquals(42, WiredDateRangeInputGuard.normalizeTimestamp(42));
|
||||
}
|
||||
|
||||
@Test
|
||||
void validRangesArePreserved() {
|
||||
assertArrayEquals(new int[]{100, 200}, WiredDateRangeInputGuard.normalizeRange(100, 200));
|
||||
}
|
||||
|
||||
@Test
|
||||
void negativeAndInvertedRangesBecomeInactive() {
|
||||
assertArrayEquals(new int[]{0, 0}, WiredDateRangeInputGuard.normalizeRange(-10, -1));
|
||||
assertArrayEquals(new int[]{0, 0}, WiredDateRangeInputGuard.normalizeRange(200, 100));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user