Avoid logboog to grow too much

This commit is contained in:
2024-11-22 07:00:00 +01:00
parent c6b5ec1a4d
commit 653c57e6e0
5 changed files with 80 additions and 5 deletions

View File

@ -192,6 +192,26 @@ class MainActivity : AppCompatActivity() {
alertDialog.show()
}
fun askToTrimLogbook() {
val d = AlertDialog.Builder(this)
d.setTitle(R.string.trim_logbook_dialog_title)
d.setMessage(
when (LocalSettingsRepository(this).loadDataRepository()) {
LocalSettingsRepository.DATA_REPO.WEBDAV -> R.string.trim_logbook_dialog_message_dav
else -> R.string.trim_logbook_dialog_message_local
}
)
d.setPositiveButton(R.string.trim_logbook_dialog_button_ok) { dialogInterface, i ->
logbook.trim()
saveLogbook()
}
d.setNegativeButton(R.string.trim_logbook_dialog_button_cancel) { dialogInterface, i ->
dialogInterface.dismiss()
}
val alertDialog = d.create()
alertDialog.show()
}
fun loadLogbook() {
if (savingEvent)
return
@ -261,13 +281,33 @@ class MainActivity : AppCompatActivity() {
setLoading(true)
logbook.logs.add(0, event)
saveLogbook(event)
// Check logbook size to avoid OOM errors
if (logbook.isTooBig()) {
askToTrimLogbook()
}
}
/**
* Saves the logbook. If saving while adding an event, please specify the event so in case
* of error can be removed from the list.
*/
fun saveLogbook(lastEventAdded: LunaEvent? = null) {
logbookRepo?.saveLogbook(this, logbook, object: LogbookSavedListener{
override fun onLogbookSaved() {
Log.d(TAG, "Logbook saved")
runOnUiThread({
setLoading(false)
Toast.makeText(this@MainActivity, R.string.toast_event_added, Toast.LENGTH_SHORT).show()
Toast.makeText(
this@MainActivity,
if (lastEventAdded != null)
R.string.toast_event_added
else
R.string.toast_logbook_saved,
Toast.LENGTH_SHORT
).show()
savingEvent(false)
})
}
@ -276,7 +316,8 @@ class MainActivity : AppCompatActivity() {
runOnUiThread({
setLoading(false)
onRepoError(getString(R.string.settings_network_error) + error.toString())
onAddError(event, error.toString())
if (lastEventAdded != null)
onAddError(lastEventAdded, error.toString())
})
}
@ -290,7 +331,8 @@ class MainActivity : AppCompatActivity() {
getString(R.string.settings_webdav_error_generic) + error.toString()
}
)
onAddError(event, error.toString())
if (lastEventAdded != null)
onAddError(lastEventAdded, error.toString())
})
}
@ -298,7 +340,8 @@ class MainActivity : AppCompatActivity() {
runOnUiThread({
setLoading(false)
onRepoError(getString(R.string.settings_json_error) + error.toString())
onAddError(event, error.toString())
if (lastEventAdded != null)
onAddError(lastEventAdded, error.toString())
})
}
@ -306,7 +349,8 @@ class MainActivity : AppCompatActivity() {
runOnUiThread({
setLoading(false)
onRepoError(getString(R.string.settings_generic_error) + error.toString())
onAddError(event, error.toString())
if (lastEventAdded != null)
onAddError(lastEventAdded, error.toString())
})
}
})

View File

@ -1,5 +1,19 @@
package it.danieleverducci.lunatracker.entities
class Logbook {
companion object {
val MAX_SAFE_LOGBOOK_SIZE = 30000
}
val logs = ArrayList<LunaEvent>()
fun isTooBig(): Boolean {
return logs.size > MAX_SAFE_LOGBOOK_SIZE
}
/**
* Halves the logbook to avoid the file being too big
*/
fun trim() {
logs.subList(MAX_SAFE_LOGBOOK_SIZE/2, logs.size).clear()
}
}

View File

@ -63,6 +63,7 @@ class WebDAVLogbookRepository(val webDavURL: String, val username: String, val p
val evt = LunaEvent.fromJson(jo)
logbook.logs.add(evt)
}
Log.d(TAG, "Loaded ${logbook.logs.size} events into logbook")
return logbook
}