diff --git a/app/src/main/java/audio/funkwhale/ffa/activities/DownloadsActivity.kt b/app/src/main/java/audio/funkwhale/ffa/activities/DownloadsActivity.kt index c5a34082bb5a712f3baf6f7d1a2d293341048cc7..5faa5ffa9306e67dbde1c5633a8c2ae76e27f9e0 100644 --- a/app/src/main/java/audio/funkwhale/ffa/activities/DownloadsActivity.kt +++ b/app/src/main/java/audio/funkwhale/ffa/activities/DownloadsActivity.kt @@ -14,7 +14,6 @@ import com.google.android.exoplayer2.offline.DownloadManager import kotlinx.coroutines.Dispatchers.Default import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.koin.java.KoinJavaComponent.inject @@ -65,20 +64,19 @@ class DownloadsActivity : AppCompatActivity() { private fun refresh() { lifecycleScope.launch(Main) { - val cursor = exoDownloadManager.downloadIndex.getDownloads() - adapter.downloads.clear() - - while (cursor.moveToNext()) { - val download = cursor.download - - download.getMetadata()?.let { info -> - adapter.downloads.add( - info.apply { this.download = download } - ) + exoDownloadManager.downloadIndex.getDownloads() + .use { cursor -> + while (cursor.moveToNext()) { + val download = cursor.download + + download.getMetadata()?.let { info -> + adapter.downloads.add( + info.apply { this.download = download } + ) + } + } } - } - adapter.notifyDataSetChanged() } } @@ -101,26 +99,29 @@ class DownloadsActivity : AppCompatActivity() { } private suspend fun refreshProgress() { - val cursor = exoDownloadManager.downloadIndex.getDownloads() - - while (cursor.moveToNext()) { - val download = cursor.download - - download.getMetadata()?.let { info -> - adapter.downloads.withIndex().associate { it.value to it.index } - .filter { it.key.id == info.id }.toList().getOrNull(0)?.let { match -> - if (download.state == Download.STATE_DOWNLOADING && download.percentDownloaded != info.download?.percentDownloaded ?: 0) { - withContext(Main) { - adapter.downloads[match.second] = info.apply { - this.download = download + exoDownloadManager.downloadIndex.getDownloads() + .use { cursor -> + while (cursor.moveToNext()) { + val download = cursor.download + + download.getMetadata()?.let { info -> + adapter.downloads.withIndex().associate { it.value to it.index } + .filter { it.key.id == info.id }.toList().getOrNull(0)?.let { match -> + if (download.state == Download.STATE_DOWNLOADING + && download.percentDownloaded != (info.download?.percentDownloaded ?: 0) + ) { + withContext(Main) { + adapter.downloads[match.second] = info.apply { + this.download = download + } + + adapter.notifyItemChanged(match.second) + } } - - adapter.notifyItemChanged(match.second) } - } } + } } - } } inner class DownloadChangedListener : DownloadsAdapter.OnDownloadChangedListener { diff --git a/app/src/main/java/audio/funkwhale/ffa/repositories/TracksRepository.kt b/app/src/main/java/audio/funkwhale/ffa/repositories/TracksRepository.kt index 6e14eef5aeea89e0b94b50a7415a9dcbf77ea364..4eb3dd41b1fc6f2a922fb5282bc19a4d1f0c6f97 100644 --- a/app/src/main/java/audio/funkwhale/ffa/repositories/TracksRepository.kt +++ b/app/src/main/java/audio/funkwhale/ffa/repositories/TracksRepository.kt @@ -42,19 +42,18 @@ class TracksRepository(override val context: Context?, albumId: Int) : companion object { fun getDownloadedIds(exoDownloadManager: DownloadManager): List<Int>? { - val cursor = exoDownloadManager.downloadIndex.getDownloads() val ids: MutableList<Int> = mutableListOf() - - while (cursor.moveToNext()) { - val download = cursor.download - - download.getMetadata()?.let { - if (download.state == Download.STATE_COMPLETED) { - ids.add(it.id) + exoDownloadManager.downloadIndex.getDownloads() + .use { cursor -> + while (cursor.moveToNext()) { + val download = cursor.download + download.getMetadata()?.let { + if (download.state == Download.STATE_COMPLETED) { + ids.add(it.id) + } + } } } - } - return ids } } diff --git a/changes/changelog.d/122.bugfix b/changes/changelog.d/122.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..eb3d6bc2392967e0aa2a74116105f5e57208dba6 --- /dev/null +++ b/changes/changelog.d/122.bugfix @@ -0,0 +1 @@ +Fix leaked database cursor resource \ No newline at end of file