Make DeleteWorker more resilient
This commit is contained in:
parent
69fdd30a26
commit
4bfc72c1c9
2 changed files with 22 additions and 14 deletions
|
@ -9,14 +9,12 @@ import io.heckel.ntfy.BuildConfig
|
|||
import io.heckel.ntfy.db.ATTACHMENT_PROGRESS_DELETED
|
||||
import io.heckel.ntfy.db.Repository
|
||||
import io.heckel.ntfy.msg.DownloadIconWorker
|
||||
import io.heckel.ntfy.ui.DetailAdapter
|
||||
import io.heckel.ntfy.util.Log
|
||||
import io.heckel.ntfy.util.fileStat
|
||||
import io.heckel.ntfy.util.maybeFileStat
|
||||
import io.heckel.ntfy.util.topicShortUrl
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* Deletes notifications marked for deletion and attachments for deleted notifications.
|
||||
|
@ -32,9 +30,23 @@ class DeleteWorker(ctx: Context, params: WorkerParameters) : CoroutineWorker(ctx
|
|||
|
||||
override suspend fun doWork(): Result {
|
||||
return withContext(Dispatchers.IO) {
|
||||
deleteExpiredIcons() // Before notifications, so we will also catch manually deleted notifications
|
||||
deleteExpiredAttachments() // Before notifications, so we will also catch manually deleted notifications
|
||||
deleteExpiredNotifications()
|
||||
// Run "expired icons" and "expired attachments" before notifications,
|
||||
// so we will also catch manually deleted notifications
|
||||
try {
|
||||
deleteExpiredIcons()
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "Failed to delete expired icons", e)
|
||||
}
|
||||
try {
|
||||
deleteExpiredAttachments()
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "Failed to delete expired attachments", e)
|
||||
}
|
||||
try {
|
||||
deleteExpiredNotifications()
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "Failed to delete expired notifications", e)
|
||||
}
|
||||
return@withContext Result.success()
|
||||
}
|
||||
}
|
||||
|
@ -69,14 +81,9 @@ class DeleteWorker(ctx: Context, params: WorkerParameters) : CoroutineWorker(ctx
|
|||
Log.d(TAG, "Deleting icons for deleted notifications")
|
||||
val repository = Repository.getInstance(applicationContext)
|
||||
val activeIconUris = repository.getActiveIconUris()
|
||||
val activeIconFilenames = activeIconUris.mapNotNull {
|
||||
try {
|
||||
fileStat(applicationContext, Uri.parse(it)).filename
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "Unable to stat file $it", e)
|
||||
null
|
||||
}
|
||||
}.toSet()
|
||||
val activeIconFilenames = activeIconUris
|
||||
.mapNotNull { maybeFileStat(applicationContext, it)?.filename }
|
||||
.toSet()
|
||||
val iconDir = File(applicationContext.cacheDir, DownloadIconWorker.ICON_CACHE_DIR)
|
||||
val allIconFilenames = iconDir.listFiles()?.map{ file -> file.name }.orEmpty()
|
||||
val filenamesToDelete = allIconFilenames.minus(activeIconFilenames)
|
||||
|
|
|
@ -2,6 +2,7 @@ Bug fixes + maintenance:
|
|||
* Upgrade Android dependencies to SDK 33 (no ticket)
|
||||
* Android 13: Ask for permission to post notifications (#508)
|
||||
* Remove timestamp when copying message text (#471, thanks to @wunter8)
|
||||
* Fix auto-delete if some icons do not exist anymore (#506)
|
||||
|
||||
Additional translations:
|
||||
* Korean (thanks to @YJSofta0f97461d82447ac)
|
||||
|
|
Loading…
Reference in a new issue