@@ -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 <>();
0 commit comments