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.Insert;
|
||||||
import androidx.room.OnConflictStrategy;
|
import androidx.room.OnConflictStrategy;
|
||||||
import androidx.room.Query;
|
import androidx.room.Query;
|
||||||
|
import androidx.room.Transaction;
|
||||||
import androidx.room.Update;
|
import androidx.room.Update;
|
||||||
|
|
||||||
import com.radio.codec2talkie.storage.message.MessageItem;
|
import com.radio.codec2talkie.storage.message.MessageItem;
|
||||||
|
@ -12,32 +13,48 @@ import com.radio.codec2talkie.storage.message.MessageItem;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Dao
|
@Dao
|
||||||
public interface PositionItemDao {
|
public abstract class PositionItemDao {
|
||||||
|
|
||||||
@Insert
|
@Insert
|
||||||
void insertPositionItem(PositionItem logItem);
|
public abstract void insertPositionItem(PositionItem positionItem);
|
||||||
|
|
||||||
@Update
|
@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")
|
@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")
|
@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")
|
@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")
|
@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")
|
@Query("DELETE FROM PositionItem WHERE srcCallsign = :srcCallsign")
|
||||||
void deletePositionItems(String srcCallsign);
|
public abstract void deletePositionItems(String srcCallsign);
|
||||||
|
|
||||||
@Query("DELETE FROM PositionItem WHERE timestampEpoch < :timestamp")
|
@Query("DELETE FROM PositionItem WHERE timestampEpoch < :timestamp")
|
||||||
void deletePositionItemsOlderThanTimestamp(long timestamp);
|
public abstract void deletePositionItemsOlderThanTimestamp(long timestamp);
|
||||||
|
|
||||||
@Query("DELETE FROM PositionItem")
|
@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.app.Application;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.lifecycle.LiveData;
|
import androidx.lifecycle.LiveData;
|
||||||
|
|
||||||
import com.radio.codec2talkie.maps.MapActivity;
|
|
||||||
import com.radio.codec2talkie.storage.AppDatabase;
|
import com.radio.codec2talkie.storage.AppDatabase;
|
||||||
import com.radio.codec2talkie.tools.DateTools;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -23,18 +20,7 @@ public class PositionItemRepository {
|
||||||
|
|
||||||
public void upsertPositionItem(PositionItem positionItem) {
|
public void upsertPositionItem(PositionItem positionItem) {
|
||||||
AppDatabase.getDatabaseExecutor().execute(() -> {
|
AppDatabase.getDatabaseExecutor().execute(() -> {
|
||||||
PositionItem oldPosition = _positionItemDao.getLastPositionItem(positionItem.getSrcCallsign());
|
_positionItemDao.updatePositionItem(positionItem);
|
||||||
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);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@ package com.radio.codec2talkie.storage.station;
|
||||||
|
|
||||||
import android.database.sqlite.SQLiteConstraintException;
|
import android.database.sqlite.SQLiteConstraintException;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Pair;
|
|
||||||
|
|
||||||
import androidx.lifecycle.LiveData;
|
import androidx.lifecycle.LiveData;
|
||||||
import androidx.room.Dao;
|
import androidx.room.Dao;
|
||||||
|
|
Ładowanie…
Reference in New Issue