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
|
@Override
|
||||||
public boolean saveData(WiredSettings settings) {
|
public boolean saveData(WiredSettings settings) {
|
||||||
if(settings.getIntParams().length < 2) return false;
|
if(settings.getIntParams().length < 2) return false;
|
||||||
this.startDate = settings.getIntParams()[0];
|
this.applyRange(settings.getIntParams()[0], settings.getIntParams()[1]);
|
||||||
this.endDate = settings.getIntParams()[1];
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,19 +80,26 @@ public class WiredConditionDateRangeActive extends InteractionWiredCondition {
|
|||||||
@Override
|
@Override
|
||||||
public void loadWiredData(ResultSet set, Room room) throws SQLException {
|
public void loadWiredData(ResultSet set, Room room) throws SQLException {
|
||||||
String wiredData = set.getString("wired_data");
|
String wiredData = set.getString("wired_data");
|
||||||
|
if (wiredData == null || wiredData.isEmpty()) {
|
||||||
|
this.applyRange(0, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (wiredData.startsWith("{")) {
|
if (wiredData.startsWith("{")) {
|
||||||
JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class);
|
JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class);
|
||||||
this.startDate = data.startDate;
|
if (data == null) {
|
||||||
this.endDate = data.endDate;
|
this.applyRange(0, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.applyRange(data.startDate, data.endDate);
|
||||||
} else {
|
} else {
|
||||||
String[] data = wiredData.split("\t");
|
String[] data = wiredData.split("\t");
|
||||||
|
|
||||||
if (data.length == 2) {
|
if (data.length == 2) {
|
||||||
try {
|
try {
|
||||||
this.startDate = Integer.parseInt(data[0]);
|
this.applyRange(Integer.parseInt(data[0]), Integer.parseInt(data[1]));
|
||||||
this.endDate = Integer.parseInt(data[1]);
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
this.applyRange(0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -105,6 +111,12 @@ public class WiredConditionDateRangeActive extends InteractionWiredCondition {
|
|||||||
this.endDate = 0;
|
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 {
|
static class JsonData {
|
||||||
int startDate;
|
int startDate;
|
||||||
int endDate;
|
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