Upsert for position items

master
sh123 2022-09-03 18:24:43 +03:00
rodzic 4530c58811
commit 0025b790b6
3 zmienionych plików z 29 dodań i 27 usunięć

Wyświetl plik

@ -5,6 +5,7 @@ import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import androidx.room.Transaction;
import androidx.room.Update;
import com.radio.codec2talkie.storage.message.MessageItem;
@ -12,32 +13,48 @@ import com.radio.codec2talkie.storage.message.MessageItem;
import java.util.List;
@Dao
public interface PositionItemDao {
public abstract class PositionItemDao {
@Insert
void insertPositionItem(PositionItem logItem);
public abstract void insertPositionItem(PositionItem positionItem);
@Update
void updatePositionItem(PositionItem logItem);
public abstract void updatePositionItem(PositionItem positionItem);
@Transaction
public void upsertPositionItem(PositionItem positionItem) {
PositionItem oldPosition = getLastPositionItem(positionItem.getSrcCallsign());
if (oldPosition != null && PositionItem.equalTo(positionItem, oldPosition)) {
// update id and coordinates from existing position
positionItem.setId(oldPosition.getId());
positionItem.setLatitude(oldPosition.getLatitude());
positionItem.setLongitude(oldPosition.getLongitude());
//Log.i(TAG, "UPDATE " + positionItem.getSrcCallsign());
updatePositionItem(positionItem);
} else {
//Log.i(TAG, "INSERT " + positionItem.getSrcCallsign());
insertPositionItem(positionItem);
}
}
@Query("SELECT * FROM PositionItem WHERE srcCallsign = :srcCallsign ORDER BY timestampEpoch DESC LIMIT 1")
PositionItem getLastPositionItem(String srcCallsign);
public abstract PositionItem getLastPositionItem(String srcCallsign);
@Query("SELECT srcCallsign from PositionItem GROUP BY srcCallsign")
LiveData<List<String>> getStationNames();
public abstract LiveData<List<String>> getStationNames();
@Query("SELECT * FROM PositionItem ORDER by timestampEpoch DESC")
LiveData<List<PositionItem>> getAllPositionItems();
public abstract LiveData<List<PositionItem>> getAllPositionItems();
@Query("SELECT * FROM PositionItem WHERE srcCallsign = :srcCallsign ORDER BY timestampEpoch ASC")
LiveData<List<PositionItem>> getPositionItems(String srcCallsign);
public abstract LiveData<List<PositionItem>> getPositionItems(String srcCallsign);
@Query("DELETE FROM PositionItem WHERE srcCallsign = :srcCallsign")
void deletePositionItems(String srcCallsign);
public abstract void deletePositionItems(String srcCallsign);
@Query("DELETE FROM PositionItem WHERE timestampEpoch < :timestamp")
void deletePositionItemsOlderThanTimestamp(long timestamp);
public abstract void deletePositionItemsOlderThanTimestamp(long timestamp);
@Query("DELETE FROM PositionItem")
void deleteAllPositionItems();
public abstract void deleteAllPositionItems();
}

Wyświetl plik

@ -2,12 +2,9 @@ package com.radio.codec2talkie.storage.position;
import android.app.Application;
import android.util.Log;
import androidx.lifecycle.LiveData;
import com.radio.codec2talkie.maps.MapActivity;
import com.radio.codec2talkie.storage.AppDatabase;
import com.radio.codec2talkie.tools.DateTools;
import java.util.List;
@ -23,18 +20,7 @@ public class PositionItemRepository {
public void upsertPositionItem(PositionItem positionItem) {
AppDatabase.getDatabaseExecutor().execute(() -> {
PositionItem oldPosition = _positionItemDao.getLastPositionItem(positionItem.getSrcCallsign());
if (oldPosition != null && PositionItem.equalTo(positionItem, oldPosition)) {
// update id and coordinates from existing position
positionItem.setId(oldPosition.getId());
positionItem.setLatitude(oldPosition.getLatitude());
positionItem.setLongitude(oldPosition.getLongitude());
//Log.i(TAG, "UPDATE " + positionItem.getSrcCallsign());
_positionItemDao.updatePositionItem(positionItem);
} else {
//Log.i(TAG, "INSERT " + positionItem.getSrcCallsign());
_positionItemDao.insertPositionItem(positionItem);
}
_positionItemDao.updatePositionItem(positionItem);
});
}

Wyświetl plik

@ -2,7 +2,6 @@ package com.radio.codec2talkie.storage.station;
import android.database.sqlite.SQLiteConstraintException;
import android.util.Log;
import android.util.Pair;
import androidx.lifecycle.LiveData;
import androidx.room.Dao;