Skip to content

Commit f46ccaf

Browse files
committed
Fix SQLite errors
1 parent 2637a2f commit f46ccaf

3 files changed

Lines changed: 59 additions & 2 deletions

File tree

core/src/main/java/net/licks92/WirelessRedstone/Storage/DatabaseClient.java

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,19 @@ protected boolean insertWirelessPoint(WirelessChannel channel, WirelessPoint poi
270270
throw new IllegalArgumentException("WirelessPoint can not be null.");
271271
}
272272

273+
try {
274+
if (isWirelessPointInDb(point)) {
275+
WirelessRedstone.getWRLogger().warning("WirelesPoint " + point + " is a duplicate in the storage. Skipping saving the WirelessPoint");
276+
return false;
277+
}
278+
} catch (SQLException ex) {
279+
WirelessRedstone.getWRLogger().warning("Database exception, enable debug mode to see the full stacktrace.");
280+
281+
if (ConfigManager.getConfig().getDebugMode()) {
282+
ex.printStackTrace();
283+
}
284+
}
285+
273286
ContentValues values = new ContentValues();
274287
try {
275288
if (!isChannelInDb(channel.getName())) {
@@ -309,7 +322,7 @@ protected boolean insertWirelessPoint(WirelessChannel channel, WirelessPoint poi
309322
values.put("delay", ((WirelessReceiverDelayer) point).getDelay());
310323
} else if (point instanceof WirelessReceiverSwitch) {
311324
table = TB_SWITCH;
312-
values.put("state", ((WirelessReceiverSwitch) point).isActive());
325+
values.put("powered", ((WirelessReceiverSwitch) point).isActive());
313326
} else if (point instanceof WirelessReceiverClock) {
314327
table = TB_CLOCKS;
315328
values.put("delay", ((WirelessReceiverClock) point).getDelay());
@@ -348,6 +361,44 @@ protected boolean isChannelInDb(String channelName) throws SQLException {
348361
return exists;
349362
}
350363

364+
protected boolean isWirelessPointInDb(WirelessPoint point) throws SQLException {
365+
boolean exists = false;
366+
String table;
367+
368+
if (point instanceof WirelessTransmitter) {
369+
table = TB_TRANSMITTERS;
370+
} else if (point instanceof WirelessScreen) {
371+
table = TB_SCREENS;
372+
} else if (point instanceof WirelessReceiver) {
373+
if (point instanceof WirelessReceiverInverter) {
374+
table = TB_INVERTERS;
375+
} else if (point instanceof WirelessReceiverDelayer) {
376+
table = TB_DELAYERS;
377+
} else if (point instanceof WirelessReceiverSwitch) {
378+
table = TB_SWITCH;
379+
} else if (point instanceof WirelessReceiverClock) {
380+
table = TB_CLOCKS;
381+
} else {
382+
table = TB_RECEIVERS;
383+
}
384+
} else {
385+
WirelessRedstone.getWRLogger().debug("Can't find wirelesspoint in database. Couldn't find what type the wirelesspoint is.");
386+
WirelessRedstone.getWRLogger().debug(point.toString());
387+
return false;
388+
}
389+
390+
ResultSet resultSet = getDatabase().query(table,
391+
"[x]=" + point.getX() + " AND [y]=" + point.getY() + " AND [z]=" + point.getZ() + " AND [world]=" + point.getWorld(),
392+
null, null);
393+
while (resultSet.next() && !exists) {
394+
exists = true;
395+
}
396+
397+
resultSet.close();
398+
399+
return exists;
400+
}
401+
351402
private void performUpdate1(SQLiteDatabase db) throws SQLException, IOException {
352403
Collection<WirelessChannel> channels = new ArrayList<>();
353404
Collection<String> channelNames = new ArrayList<>();

core/src/main/java/net/licks92/WirelessRedstone/Storage/SQLiteStorage.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ protected Collection<WirelessChannel> getAllChannels() {
5151
@Override
5252
public boolean createChannel(WirelessChannel channel) {
5353
channel.getSigns()
54-
.forEach(wirelessPoint -> DatabaseClient.getInstance().insertWirelessPoint(channel, wirelessPoint));
54+
.forEach(wirelessPoint -> createWirelessPoint(channel, wirelessPoint));
5555

5656
return super.createChannel(channel);
5757
}
@@ -66,6 +66,11 @@ public boolean createWirelessPoint(String channelName, WirelessPoint wirelessPoi
6666
return super.createWirelessPoint(channelName, wirelessPoint);
6767
}
6868

69+
private void createWirelessPoint(WirelessChannel channel, WirelessPoint wirelessPoint) {
70+
DatabaseClient.getInstance().insertWirelessPoint(channel, wirelessPoint);
71+
WirelessRedstone.getStorageManager().updateList(channel.getName(), channel);
72+
}
73+
6974
@Override
7075
public boolean removeWirelessPoint(String channelName, WirelessPoint wirelessPoint) {
7176
WirelessChannel channel = WirelessRedstone.getStorageManager().getChannel(channelName);

core/src/main/java/net/licks92/WirelessRedstone/Storage/StorageManager.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ protected boolean moveStorageFromType(StorageType storageType) {
121121
storage = new YamlStorage(channelFolder);
122122
} else if (storageType == StorageType.SQLITE) {
123123
storage = new SQLiteStorage(channelFolder);
124+
DatabaseClient.init(new File(WirelessRedstone.getInstance().getDataFolder(), channelFolder).toString());
124125
} else {
125126
return false;
126127
}

0 commit comments

Comments
 (0)