فهرست منبع

Delete of old entries in db older than 1h

Thomas Chef 3 سال پیش
والد
کامیت
93c80f2f6b

+ 2 - 1
app/src/main/java/com/flacksta/chef/journeygpstracker/JourneyGpsTrackerApplication.kt

@@ -23,7 +23,8 @@ class JourneyGpsTrackerApplication : Application() {
 
     fun initStuff() = runBlocking { // this: CoroutineScope
         launch {
-            repository.deleteAll()
+            //repository.deleteAll()
+            repository.doAnInitOperationOnTheDb()
         }
     }
 }

+ 12 - 9
app/src/main/java/com/flacksta/chef/journeygpstracker/MainActivity.kt

@@ -71,9 +71,18 @@ class MainActivity : AppCompatActivity() {
             mPermApproved = true
         }
 
-        val state : Boolean = isServiceRunning(this)
-        binding.buttonStart.isEnabled = !state
-        binding.buttonStop.isEnabled = state
+        val serviceRunning : Boolean = isServiceActuallyRunning<TrackingService>()
+        Log.i(mTag,"Service is actually running: $serviceRunning")
+
+        val state : Boolean = isServiceStateRunning(this)
+
+        if( state != serviceRunning ) {
+            Log.e(mTag,"Missmatch state=$state vs actual=$serviceRunning. Correcting...")
+            setServiceState(this, if( serviceRunning) ServiceState.STARTED else ServiceState.STOPPED)
+        }
+
+        binding.buttonStart.isEnabled = !serviceRunning
+        binding.buttonStop.isEnabled = serviceRunning
 
         binding.buttonStart.setOnClickListener {
             actionOnService(Actions.START)
@@ -115,12 +124,6 @@ class MainActivity : AppCompatActivity() {
         }
     }
 
-    @Suppress("DEPRECATION") // Deprecated for third party Services.
-    inline fun <reified T> Context.isServiceRunning2() =
-            (getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager)
-                    .getRunningServices(Integer.MAX_VALUE)
-                    .any { it.service.className == T::class.java.name }
-
     override fun onDestroy() {
 /*        if (::mTrackingServiceIntent.isInitialized) {
             stopService(mTrackingServiceIntent)

+ 10 - 2
app/src/main/java/com/flacksta/chef/journeygpstracker/StateOfService.kt

@@ -1,5 +1,6 @@
 package com.flacksta.chef.journeygpstracker
 
+import android.app.ActivityManager
 import android.content.Context
 import android.content.SharedPreferences
 
@@ -25,7 +26,7 @@ fun getServiceState(context: Context): ServiceState {
     return ServiceState.valueOf(value.toString())
 }
 
-fun isServiceRunning(context: Context): Boolean {
+fun isServiceStateRunning(context: Context): Boolean {
     val sharedPrefs = getPreferences(context)
     if( ServiceState.valueOf(sharedPrefs.getString(key, ServiceState.STOPPED.name).toString()) == ServiceState.STARTED )
         return true
@@ -34,4 +35,11 @@ fun isServiceRunning(context: Context): Boolean {
 
 private fun getPreferences(context: Context): SharedPreferences {
     return context.getSharedPreferences(name, 0)
-}
+}
+
+@Suppress("DEPRECATION") // Deprecated for third party Services.
+inline fun <reified T> Context.isServiceActuallyRunning() =
+        (getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager)
+                .getRunningServices(Integer.MAX_VALUE)
+                .any { it.service.className == T::class.java.name }
+

+ 9 - 5
app/src/main/java/com/flacksta/chef/journeygpstracker/backend/BackendClient.kt

@@ -14,6 +14,7 @@ import org.json.JSONArray
 import org.json.JSONObject
 import retrofit2.Retrofit
 import java.text.SimpleDateFormat
+import java.util.concurrent.TimeUnit
 import kotlin.concurrent.fixedRateTimer
 
 
@@ -30,14 +31,14 @@ class BackendClient {
     }
 
     private fun startTimer() {
-        fixedRateTimer(name = "hello-timer",
+        val fixedRateTimer = fixedRateTimer(name = "hello-timer",
                 initialDelay = 10000, period = 60000) {
 
-            val  dao :GpsDataDao = trackApp.database.gpsDataDao()
+            val dao: GpsDataDao = trackApp.database.gpsDataDao()
 
-            Log.i(mTag,"Sending data....")
-            val pos : List<GpsData> = dao.getUnsentGpsPositions()
-            if( pos.isNotEmpty() ) {
+            Log.i(mTag, "Sending data....")
+            val pos: List<GpsData> = dao.getUnsentGpsPositions()
+            if (pos.isNotEmpty()) {
                 val rawJson: String = convertPosListToRawJson(pos)
                 val retVal: Boolean = sendGpsPosDataToBackendServer(rawJson)
                 if (retVal) {
@@ -47,6 +48,9 @@ class BackendClient {
                     dao.setAsUploaded(first, last)
                 }
             }
+
+            // Delete of older data more than 1h old and already uploaded to server
+            dao.deleteOldAndUploaded(System.currentTimeMillis().minus(60L * 60L * 1000L))
         }
     }
 

+ 6 - 0
app/src/main/java/com/flacksta/chef/journeygpstracker/database/GpsDataDao.kt

@@ -20,4 +20,10 @@ interface GpsDataDao {
 
     @Query("DELETE FROM pos_table")
     suspend fun deleteAll()
+
+    @Query("DELETE FROM pos_table WHERE uploaded == 1 AND ts <= :upTo")
+    fun deleteOldAndUploaded(upTo:Long)
+
+    @Query("DELETE FROM pos_table where uploaded == 2")
+    suspend fun doAnInitOperationOnTheDb()
 }

+ 6 - 0
app/src/main/java/com/flacksta/chef/journeygpstracker/database/GpsPosRepository.kt

@@ -19,4 +19,10 @@ class GpsPosRepository(private val gpsDataDao: GpsDataDao) {
     suspend fun deleteAll() {
         gpsDataDao.deleteAll()
     }
+
+    @Suppress("RedundantSuspendModifier")
+    @WorkerThread
+    suspend fun doAnInitOperationOnTheDb() {
+        gpsDataDao.doAnInitOperationOnTheDb()
+    }
 }

+ 2 - 3
app/src/main/java/com/flacksta/chef/journeygpstracker/database/GpsPosRoomDatabase.kt

@@ -29,7 +29,6 @@ public abstract class GpsPosRoomDatabase : RoomDatabase() {
             // if the INSTANCE is not null, then return it,
             // if it is, then create the database
             return INSTANCE ?: synchronized(this) {
-                Log.i(mTag,"getDatabase() B")
                 val instance = Room.databaseBuilder(
                         context.applicationContext,
                         GpsPosRoomDatabase::class.java,
@@ -65,8 +64,8 @@ public abstract class GpsPosRoomDatabase : RoomDatabase() {
         }
 
         suspend fun populateDatabase(gpsDataDao: GpsDataDao) {
-            Log.i(mTag,"populateDatabase() Delete ALL")
-            gpsDataDao.deleteAll()
+            Log.i(mTag,"populateDatabase() Delete ALL (NOT)")
+            //gpsDataDao.deleteAll()
         }
     }
 }