From c2768dbd7621ac85ef2a63593cc352406bc2cbb7 Mon Sep 17 00:00:00 2001 From: sh123 Date: Mon, 5 Sep 2022 10:20:01 +0300 Subject: [PATCH] Log cleanup improvements --- codec2talkie/build.gradle | 4 +- .../storage/log/LogItemActivity.java | 18 +---- .../codec2talkie/storage/log/LogItemDao.java | 71 ++----------------- .../storage/log/LogItemRepository.java | 21 +++--- .../storage/log/LogItemViewModel.java | 8 +-- .../storage/position/PositionItemDao.java | 5 +- .../position/PositionItemRepository.java | 24 ++++--- .../position/PositionItemViewModel.java | 10 +-- .../storage/station/StationItemDao.java | 3 + .../station/StationItemRepository.java | 24 ++++--- .../storage/station/StationItemViewModel.java | 15 +--- 11 files changed, 61 insertions(+), 142 deletions(-) diff --git a/codec2talkie/build.gradle b/codec2talkie/build.gradle index 9215ba4..bc555b1 100644 --- a/codec2talkie/build.gradle +++ b/codec2talkie/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.radio.codec2talkie" minSdkVersion 23 targetSdkVersion 30 - versionCode 145 - versionName "1.45" + versionCode 146 + versionName "1.46" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemActivity.java b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemActivity.java index 3b2ceb4..9120892 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemActivity.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemActivity.java @@ -164,21 +164,9 @@ public class LogItemActivity extends AppCompatActivity { private void deleteLogItems(int hours) { DialogInterface.OnClickListener deleteAllDialogClickListener = (dialog, which) -> { if (which == DialogInterface.BUTTON_POSITIVE) { - if (_stationName == null) { - if (hours == -1) { - _logItemViewModel.deleteAllLogItems(); - _positionItemViewModel.deleteAllPositionItems(); - _stationItemViewModel.deleteAllStationItems(); - } else { - _logItemViewModel.deleteLogItemsOlderThanHours(hours); - _positionItemViewModel.deletePositionItemsOlderThanHours(hours); - _stationItemViewModel.deleteAllStationItemsOlderThanHours(hours); - } - } else { - _logItemViewModel.deleteLogItems(_stationName); - _positionItemViewModel.deletePositionItems(_stationName); - _stationItemViewModel.deleteStationItem(_stationName); - } + _logItemViewModel.deleteLogItems(_stationName, hours); + _positionItemViewModel.deletePositionItems(_stationName, hours); + _stationItemViewModel.deleteStationItems(_stationName, hours); } }; String alertMessage = getString(R.string.log_item_activity_delete_all_title); diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemDao.java b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemDao.java index a8d9820..b339f58 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemDao.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemDao.java @@ -16,72 +16,6 @@ public interface LogItemDao { @Insert(onConflict = OnConflictStrategy.IGNORE) void insertLogItem(LogItem logItem); - @Query("SELECT pos.timestampEpoch AS timestampEpoch, " + - "pos.id AS id, " + - "log.srcCallsign AS srcCallsign, " + - "log.logLine AS logLine," + - "pos.dstCallsign AS dstCallsign, " + - "pos.latitude AS latitude, " + - "pos.longitude AS longitude, " + - "pos.maidenHead AS maidenHead, " + - "pos.altitudeMeters AS altitudeMeters, " + - "pos.bearingDegrees AS bearingDegrees, " + - "pos.speedMetersPerSecond AS speedMetersPerSecond, " + - "pos.status AS status, " + - "pos.comment AS comment, " + - "pos.symbolCode AS symbolCode, " + - "pos.privacyLevel AS privacyLevel, " + - "pos.rangeMiles AS rangeMiles, " + - "pos.directivityDeg AS directivityDeg, " + - "MAX(pos.timestampEpoch)" + - "FROM LogItem log " + - "LEFT OUTER JOIN PositionItem pos ON (log.srcCallsign = pos.srcCallsign) " + - "GROUP BY log.srcCallsign " + - "UNION " + - "SELECT pos.timestampEpoch AS timestampEpoch, " + - "pos.id AS id, " + - "pos.srcCallsign AS srcCallsign, " + - "log.logLine AS logLine," + - "pos.dstCallsign AS dstCallsign, " + - "pos.latitude AS latitude, " + - "pos.longitude AS longitude, " + - "pos.maidenHead AS maidenHead, " + - "pos.altitudeMeters AS altitudeMeters, " + - "pos.bearingDegrees AS bearingDegrees, " + - "pos.speedMetersPerSecond AS speedMetersPerSecond, " + - "pos.status AS status, " + - "pos.comment AS comment, " + - "pos.symbolCode AS symbolCode, " + - "pos.privacyLevel AS privacyLevel, " + - "pos.rangeMiles AS rangeMiles, " + - "pos.directivityDeg AS directivityDeg, " + - "MAX(pos.timestampEpoch)" + - "FROM PositionItem pos " + - "LEFT OUTER JOIN LogItem log ON (log.srcCallsign = pos.srcCallsign) " + - "GROUP BY pos.srcCallsign " + - "ORDER BY srcCallsign ASC") - LiveData> getLastPositions(); - - @Query("SELECT pos.timestampEpoch AS timestampEpoch, " + - "pos.id AS id, " + - "pos.srcCallsign AS srcCallsign, " + - "pos.dstCallsign AS dstCallsign, " + - "pos.latitude AS latitude, " + - "pos.longitude AS longitude, " + - "pos.maidenHead AS maidenHead, " + - "pos.altitudeMeters AS altitudeMeters, " + - "pos.bearingDegrees AS bearingDegrees, " + - "pos.speedMetersPerSecond AS speedMetersPerSecond, " + - "pos.status AS status, " + - "pos.comment AS comment, " + - "pos.symbolCode AS symbolCode, " + - "pos.privacyLevel AS privacyLevel, " + - "pos.rangeMiles AS rangeMiles, " + - "pos.directivityDeg AS directivityDeg " + - "FROM PositionItem AS pos WHERE pos.srcCallsign = :srcCallsign " + - "ORDER BY pos.timestampEpoch DESC") - LiveData> getStationPositions(String srcCallsign); - @Query("SELECT * FROM LogItem ORDER by timestampEpoch ASC") LiveData> getAllLogItems(); @@ -89,11 +23,14 @@ public interface LogItemDao { LiveData> getLogItems(String srcCallsign); @Query("DELETE FROM LogItem WHERE srcCallsign = :srcCallsign") - void deleteLogItems(String srcCallsign); + void deleteLogItemsFromCallsign(String srcCallsign); @Query("DELETE FROM LogItem") void deleteAllLogItems(); @Query("DELETE FROM LogItem WHERE timestampEpoch < :timestampEpoch") void deleteLogItemsOlderThanTimestamp(long timestampEpoch); + + @Query("DELETE FROM LogItem WHERE srcCallsign = :srcCallsign AND timestampEpoch < :timestampEpoch") + void deleteLogItems(String srcCallsign, long timestampEpoch); } diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemRepository.java b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemRepository.java index fb6c03a..d38ed61 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemRepository.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemRepository.java @@ -32,15 +32,16 @@ public class LogItemRepository { AppDatabase.getDatabaseExecutor().execute(() -> _logItemDao.insertLogItem(logItem)); } - public void deleteAllLogItems() { - AppDatabase.getDatabaseExecutor().execute(_logItemDao::deleteAllLogItems); - } - - public void deleteLogItems(String groupName) { - AppDatabase.getDatabaseExecutor().execute(() -> _logItemDao.deleteLogItems(groupName)); - } - - public void deleteLogItemsOlderThanHours(int hours) { - AppDatabase.getDatabaseExecutor().execute(() -> _logItemDao.deleteLogItemsOlderThanTimestamp(DateTools.currentTimestampMinusHours(hours))); + public void deleteLogItems(String srcCallsign, int hours) { + AppDatabase.getDatabaseExecutor().execute(() -> { + if (srcCallsign == null && hours == -1) + _logItemDao.deleteAllLogItems(); + else if (srcCallsign == null) + _logItemDao.deleteLogItemsOlderThanTimestamp(DateTools.currentTimestampMinusHours(hours)); + else if (hours == -1) + _logItemDao.deleteLogItemsFromCallsign(srcCallsign); + else + _logItemDao.deleteLogItems(srcCallsign, DateTools.currentTimestampMinusHours(hours)); + }); } } diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemViewModel.java b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemViewModel.java index 9d36ffd..1fae1f1 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemViewModel.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemViewModel.java @@ -29,11 +29,7 @@ public class LogItemViewModel extends AndroidViewModel { return _logItemRepository.getLogItems(groupName); } - public void deleteAllLogItems() { _logItemRepository.deleteAllLogItems(); } - - public void deleteLogItems(String groupName) { - _logItemRepository.deleteLogItems(groupName); + public void deleteLogItems(String srcCallsign, int hours) { + _logItemRepository.deleteLogItems(srcCallsign, hours); } - - public void deleteLogItemsOlderThanHours(int hours) { _logItemRepository.deleteLogItemsOlderThanHours(hours); } } 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 98db0bd..0cea0c8 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 @@ -50,11 +50,14 @@ public abstract class PositionItemDao { public abstract LiveData> getPositionItems(String srcCallsign); @Query("DELETE FROM PositionItem WHERE srcCallsign = :srcCallsign") - public abstract void deletePositionItems(String srcCallsign); + public abstract void deletePositionItemsFromCallsign(String srcCallsign); @Query("DELETE FROM PositionItem WHERE timestampEpoch < :timestamp") public abstract void deletePositionItemsOlderThanTimestamp(long timestamp); + @Query("DELETE FROM PositionItem WHERE timestampEpoch < :timestamp AND srcCallsign = :srcCallsign") + public abstract void deletePositionItems(String srcCallsign, long timestamp); + @Query("DELETE FROM PositionItem") public abstract void deleteAllPositionItems(); } diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemRepository.java b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemRepository.java index 679146d..8ab7a8a 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemRepository.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemRepository.java @@ -6,6 +6,7 @@ import androidx.lifecycle.LiveData; import androidx.lifecycle.Transformations; import com.radio.codec2talkie.storage.AppDatabase; +import com.radio.codec2talkie.tools.DateTools; import java.util.List; @@ -28,15 +29,18 @@ public class PositionItemRepository { return Transformations.distinctUntilChanged(_positionItemDao.getPositionItems(srcCallsign)); } - public void deleteAllPositionItems() { - AppDatabase.getDatabaseExecutor().execute(_positionItemDao::deleteAllPositionItems); - } - - public void deletePositionItemsFromCallsign(String srcCallsign) { - AppDatabase.getDatabaseExecutor().execute(() -> _positionItemDao.deletePositionItems(srcCallsign)); - } - - public void deletePositionItemsOlderThanTimestamp(long timestamp) { - AppDatabase.getDatabaseExecutor().execute(() -> _positionItemDao.deletePositionItemsOlderThanTimestamp(timestamp)); + public void deletePositionItems(String srcCallsign, int hours) { + AppDatabase.getDatabaseExecutor().execute(() -> { + AppDatabase.getDatabaseExecutor().execute(() -> { + if (srcCallsign == null && hours == -1) + _positionItemDao.deleteAllPositionItems(); + else if (srcCallsign == null) + _positionItemDao.deletePositionItemsOlderThanTimestamp(DateTools.currentTimestampMinusHours(hours)); + else if (hours == -1) + _positionItemDao.deletePositionItemsFromCallsign(srcCallsign); + else + _positionItemDao.deletePositionItems(srcCallsign, DateTools.currentTimestampMinusHours(hours)); + }); + }); } } diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemViewModel.java b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemViewModel.java index 6b4bd1d..55da59b 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemViewModel.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemViewModel.java @@ -23,13 +23,7 @@ public class PositionItemViewModel extends AndroidViewModel { return _positionItemRepository.getPositionItems(srcCallsign); } - public void deleteAllPositionItems() { _positionItemRepository.deleteAllPositionItems(); } - - public void deletePositionItems(String srcCallsign) { - _positionItemRepository.deletePositionItemsFromCallsign(srcCallsign); - } - - public void deletePositionItemsOlderThanHours(int hours) { - _positionItemRepository.deletePositionItemsOlderThanTimestamp(DateTools.currentTimestampMinusHours(hours)); + public void deletePositionItems(String srcCallsign, int hours) { + _positionItemRepository.deletePositionItems(srcCallsign, hours); } } 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 da195ae..2ef03fd 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 @@ -49,6 +49,9 @@ public abstract class StationItemDao { @Query("DELETE FROM StationItem WHERE timestampEpoch < :timestamp") public abstract void deleteStationItemsOlderThanTimestamp(long timestamp); + @Query("DELETE FROM StationItem WHERE timestampEpoch < :timestamp AND srcCallsign = :srcCallsign") + public abstract void deleteStationItems(String srcCallsign, long timestamp); + @Query("DELETE FROM StationItem") public abstract void deleteAllStationItems(); } \ No newline at end of file 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 8e8646a..9404355 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 @@ -8,6 +8,7 @@ import androidx.lifecycle.LiveData; import androidx.lifecycle.Transformations; import com.radio.codec2talkie.storage.AppDatabase; +import com.radio.codec2talkie.tools.DateTools; import java.util.List; @@ -31,15 +32,18 @@ public class StationItemRepository { }); } - public void deleteAllStationItems() { - AppDatabase.getDatabaseExecutor().execute(_stationItemDao::deleteAllStationItems); - } - - public void deleteStationItemsFromCallsign(String srcCallsign) { - AppDatabase.getDatabaseExecutor().execute(() -> _stationItemDao.deleteStationItemsFromCallsign(srcCallsign)); - } - - public void deleteAllStationItemsOlderThanHours(long timestamp) { - AppDatabase.getDatabaseExecutor().execute(() -> _stationItemDao.deleteStationItemsOlderThanTimestamp(timestamp)); + public void deleteStationItems(String srcCallsign, int hours) { + AppDatabase.getDatabaseExecutor().execute(() -> { + AppDatabase.getDatabaseExecutor().execute(() -> { + if (srcCallsign == null && hours == -1) + _stationItemDao.deleteAllStationItems(); + else if (srcCallsign == null) + _stationItemDao.deleteStationItemsOlderThanTimestamp(DateTools.currentTimestampMinusHours(hours)); + else if (hours == -1) + _stationItemDao.deleteStationItemsFromCallsign(srcCallsign); + else + _stationItemDao.deleteStationItems(srcCallsign, DateTools.currentTimestampMinusHours(hours)); + }); + }); } } diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/station/StationItemViewModel.java b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/station/StationItemViewModel.java index 3f2c228..d970bb0 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/station/StationItemViewModel.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/station/StationItemViewModel.java @@ -1,14 +1,11 @@ package com.radio.codec2talkie.storage.station; import android.app.Application; -import android.text.format.DateUtils; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; -import com.radio.codec2talkie.storage.AppDatabase; -import com.radio.codec2talkie.storage.station.StationItemRepository; import com.radio.codec2talkie.tools.DateTools; import java.util.List; @@ -24,15 +21,7 @@ public class StationItemViewModel extends AndroidViewModel { public LiveData> getAllStationItems() { return _stationItemRepository.getAllStationItems(); } - public void deleteAllStationItems() { - _stationItemRepository.deleteAllStationItems(); - } - - public void deleteAllStationItemsOlderThanHours(int hours) { - _stationItemRepository.deleteAllStationItemsOlderThanHours(hours); - } - - public void deleteStationItem(String srcCallsign) { - _stationItemRepository.deleteStationItemsFromCallsign(srcCallsign); + public void deleteStationItems(String srcCallsign, int hours) { + _stationItemRepository.deleteStationItems(srcCallsign, hours); } }