From 20aab8d253c5b8e0e10cb4ddb7139afebf59cf46 Mon Sep 17 00:00:00 2001 From: sh123 Date: Sat, 3 Sep 2022 17:17:59 +0300 Subject: [PATCH] Improve upsert --- .../java/com/radio/codec2talkie/protocol/Ax25.java | 2 +- .../storage/position/PositionItemDao.java | 4 ++-- .../storage/station/StationItemDao.java | 4 ++-- .../storage/station/StationItemRepository.java | 14 ++++++++++---- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/Ax25.java b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/Ax25.java index dc9301b..58afdb5 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/Ax25.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/Ax25.java @@ -127,8 +127,8 @@ public class Ax25 implements Protocol { if (ax25Data.isAudio) { _parentProtocolCallback.onReceiveCompressedAudio(ax25Data.src, ax25Data.dst, ax25Data.codec2Mode, ax25Data.rawData); } else { - _parentProtocolCallback.onReceiveLog(ax25Data.toString()); _parentProtocolCallback.onReceiveData(ax25Data.src, ax25Data.dst, ax25Data.digipath, ax25Data.rawData); + _parentProtocolCallback.onReceiveLog(ax25Data.toString()); if (_isDigiRepeaterEnabled) digiRepeat(ax25Data); } } else { diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemDao.java b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemDao.java index c0d6e33..44c96ff 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemDao.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemDao.java @@ -14,10 +14,10 @@ import java.util.List; @Dao public interface PositionItemDao { - @Insert(onConflict = OnConflictStrategy.IGNORE) + @Insert void insertPositionItem(PositionItem logItem); - @Update(onConflict = OnConflictStrategy.IGNORE) + @Update void updatePositionItem(PositionItem logItem); @Query("SELECT * FROM PositionItem WHERE srcCallsign = :srcCallsign ORDER BY timestampEpoch DESC LIMIT 1") diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/station/StationItemDao.java b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/station/StationItemDao.java index fec0271..a06c02c 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/station/StationItemDao.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/station/StationItemDao.java @@ -12,10 +12,10 @@ import java.util.List; @Dao public interface StationItemDao { - @Insert(onConflict = OnConflictStrategy.IGNORE) + @Insert void insertStationItem(StationItem stationItem); - @Update(onConflict = OnConflictStrategy.IGNORE) + @Update void updateStationItem(StationItem stationItem); @Query("SELECT * FROM StationItem WHERE srcCallsign = :srcCallsign") diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/station/StationItemRepository.java b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/station/StationItemRepository.java index 53a33f1..5c2c696 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/station/StationItemRepository.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/station/StationItemRepository.java @@ -1,6 +1,7 @@ package com.radio.codec2talkie.storage.station; import android.app.Application; +import android.database.sqlite.SQLiteConstraintException; import android.util.Log; import androidx.lifecycle.LiveData; @@ -27,12 +28,17 @@ public class StationItemRepository { AppDatabase.getDatabaseExecutor().execute(() -> { StationItem oldStationItem = _stationItemDao.getStationItem(stationItem.getSrcCallsign()); if (oldStationItem == null) { - _stationItemDao.insertStationItem(stationItem); - Log.i(TAG, "INSERT " + stationItem.getSrcCallsign()); - } else { + try { + _stationItemDao.insertStationItem(stationItem); + Log.i(TAG, "INSERT " + stationItem.getSrcCallsign() + " '" + stationItem.getMaidenHead() + "'"); + } catch (SQLiteConstraintException ex) { + oldStationItem = _stationItemDao.getStationItem(stationItem.getSrcCallsign()); + } + } + if (oldStationItem != null) { oldStationItem.updateFrom(stationItem); _stationItemDao.updateStationItem(oldStationItem); - Log.i(TAG, "UPDATE " + oldStationItem.getSrcCallsign()); + Log.i(TAG, "UPDATE " + oldStationItem.getSrcCallsign() + " '" + oldStationItem.getMaidenHead() + "'"); } }); }