kopia lustrzana https://github.com/sh123/codec2_talkie
Upsert for position items
rodzic
4530c58811
commit
0025b790b6
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Ładowanie…
Reference in New Issue