Skip to content

Commit

Permalink
Classifier: Force update the database if the media stored is empty.
Browse files Browse the repository at this point in the history
This fixes classifing images on the first launch of the app.

Signed-off-by: IacobIonut01 <paulionut2003@gmail.com>
  • Loading branch information
IacobIonut01 committed Jan 15, 2025
1 parent e621086 commit 01dbcaa
Showing 1 changed file with 15 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import com.dot.gallery.feature_node.data.data_source.InternalDatabase
import com.dot.gallery.feature_node.domain.model.Media
import com.dot.gallery.feature_node.domain.model.MediaVersion
import com.dot.gallery.feature_node.domain.repository.MediaRepository
import com.dot.gallery.feature_node.presentation.util.isMediaUpToDate
import com.dot.gallery.feature_node.presentation.util.mediaStoreVersion
import com.dot.gallery.feature_node.presentation.util.printWarning
import com.github.panpf.sketch.BitmapImage
Expand Down Expand Up @@ -48,18 +47,14 @@ class ClassifierWorker @AssistedInject constructor(
.filterNot { item -> blacklisted.any { it.matchesMedia(item) } }
if (media.isEmpty()) {
printWarning("ClassifierWorker media is empty, let's try and update the database")
if (database.isMediaUpToDate(appContext)) {
printWarning("ClassifierWorker database is up to date and the media list is empty. We can abort")
return@withContext Result.success()
} else {
val mediaVersion = appContext.mediaStoreVersion
printWarning("ClassifierWorker database is not up to date. Updating to version $mediaVersion")
database.getMediaDao().setMediaVersion(MediaVersion(mediaVersion))
val fetchedMedia = repository.getMedia().map { it.data ?: emptyList() }.firstOrNull()
fetchedMedia?.let {
database.getMediaDao().updateMedia(it)
database.getClassifierDao().deleteDeclassifiedImages(it.fastMap { m -> m.id })
}
val mediaVersion = appContext.mediaStoreVersion
printWarning("ClassifierWorker Force-updating database to version $mediaVersion")
database.getMediaDao().setMediaVersion(MediaVersion(mediaVersion))
val fetchedMedia =
repository.getMedia().map { it.data ?: emptyList() }.firstOrNull()
fetchedMedia?.let {
database.getMediaDao().updateMedia(it)
database.getClassifierDao().deleteDeclassifiedImages(it.fastMap { m -> m.id })
}
}
media = database.getMediaDao().getMedia()
Expand All @@ -72,7 +67,8 @@ class ClassifierWorker @AssistedInject constructor(
printWarning("ClassifierWorker retrieving already checked media")
val classified = database.getClassifierDao().getCheckedMedia()
printWarning("ClassifierWorker classified media size: ${classified.size}")
media = media.filterNot { item -> classified.any { it.id == item.id && it.timestamp == item.timestamp } }
media =
media.filterNot { item -> classified.any { it.id == item.id && it.timestamp == item.timestamp } }
if (media.isEmpty()) {
printWarning("ClassifierWorker media is empty, we can abort")
setProgress(workDataOf("progress" to 100))
Expand Down Expand Up @@ -169,7 +165,11 @@ fun WorkManager.startClassification(indexStart: Int = 0, size: Int = 50) {
.setInputData(inputData)
.build()

enqueueUniqueWork("ClassifierWorker_${indexStart}_$size", ExistingWorkPolicy.REPLACE, uniqueWork)
enqueueUniqueWork(
"ClassifierWorker_${indexStart}_$size",
ExistingWorkPolicy.REPLACE,
uniqueWork
)
}

fun WorkManager.stopClassification() {
Expand Down

0 comments on commit 01dbcaa

Please sign in to comment.