Skip to content

Commit 39e8240

Browse files
committed
Lighten memory load when pruning orphan images
1 parent c9cc9ed commit 39e8240

File tree

3 files changed

+17
-22
lines changed

3 files changed

+17
-22
lines changed

app/src/main/java/me/devsaki/hentoid/database/DatabaseMaintenance.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -351,18 +351,18 @@ object DatabaseMaintenance {
351351
}
352352
db.insertSearchRecords(searchRecords)
353353

354-
val imageFiles = db.selectImageFilesWithNullPageUrl()
354+
val imageFileIds = db.selectImageFileIdsWithNullPageUrl()
355355
Timber.i(
356356
"Set default value for ImageFile.dbPageUrl field : %s items detected",
357-
imageFiles.size
357+
imageFileIds.size
358358
)
359-
max = imageFiles.size
359+
max = imageFileIds.size
360360
pos = 1f
361-
for (c in imageFiles) {
362-
c.dbPageUrl = ""
363-
withContext(Dispatchers.Main) { emitter(pos++ / max) }
361+
imageFileIds.chunked(50).forEach {
362+
db.resetPageUrlForImageId(it)
363+
withContext(Dispatchers.Main) { emitter(pos / max) }
364+
pos += it.size
364365
}
365-
db.insertImageFiles(imageFiles)
366366

367367
Timber.i("Set default ObjectBox properties : done")
368368
} finally {

app/src/main/java/me/devsaki/hentoid/database/MaintenanceDAO.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,19 @@ class MaintenanceDAO {
104104
.isNull(SearchRecord_.entityType).safeFind()
105105
}
106106

107-
fun selectImageFilesWithNullPageUrl(): List<ImageFile> {
107+
fun selectImageFileIdsWithNullPageUrl(): Set<Long> {
108108
return ObjectBoxDB.store.boxFor(ImageFile::class.java).query()
109109
.isNull(ImageFile_.dbPageUrl)
110110
.or()
111-
.equal(ImageFile_.dbPageUrl, "", QueryBuilder.StringOrder.CASE_INSENSITIVE).safeFind()
111+
.equal(ImageFile_.dbPageUrl, "", QueryBuilder.StringOrder.CASE_INSENSITIVE)
112+
.safeFindIds().toSet()
113+
}
114+
115+
fun resetPageUrlForImageId(ids: Collection<Long>) {
116+
val store = ObjectBoxDB.store.boxFor(ImageFile::class.java)
117+
val imgFiles = store.get(ids)
118+
imgFiles.forEach { it.pageUrl = "" }
119+
store.put(imgFiles)
112120
}
113121

114122
fun selectOrphanQueueRecordIds(): LongArray {
@@ -133,10 +141,6 @@ class MaintenanceDAO {
133141
ObjectBoxDB.insertGroup(g)
134142
}
135143

136-
fun updateImageFileUrl(img: ImageFile) {
137-
ObjectBoxDB.updateImageFileUrl(img)
138-
}
139-
140144
fun insertImageFiles(imgs: List<ImageFile>) {
141145
ObjectBoxDB.insertImageFiles(imgs)
142146
}

app/src/main/java/me/devsaki/hentoid/database/ObjectBoxDB.kt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1651,15 +1651,6 @@ object ObjectBoxDB {
16511651
store.boxFor(ImageFile::class.java).put(imgs)
16521652
}
16531653

1654-
fun updateImageFileUrl(image: ImageFile) {
1655-
val imgBox = store.boxFor(ImageFile::class.java)
1656-
val img = imgBox[image.id]
1657-
if (img != null) {
1658-
img.url = image.url
1659-
imgBox.put(img)
1660-
}
1661-
}
1662-
16631654
fun updateImageFileUri(locations: Map<Long, String>) {
16641655
val imgBox = store.boxFor(ImageFile::class.java)
16651656
store.runInTx {

0 commit comments

Comments
 (0)