Browse Source

Merge branch 'bugfix/122-fix-resource-leakage' into 'develop'

Bugfix/122 fix resource leakage

Closes #122

See merge request funkwhale/funkwhale-android!175
technical/upgrade-exoplayer
Ryan Harg 2 years ago
parent
commit
90c2af7347
  1. 59
      app/src/main/java/audio/funkwhale/ffa/activities/DownloadsActivity.kt
  2. 19
      app/src/main/java/audio/funkwhale/ffa/repositories/TracksRepository.kt
  3. 1
      changes/changelog.d/122.bugfix

59
app/src/main/java/audio/funkwhale/ffa/activities/DownloadsActivity.kt

@ -14,7 +14,6 @@ import com.google.android.exoplayer2.offline.DownloadManager @@ -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() { @@ -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() { @@ -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 {

19
app/src/main/java/audio/funkwhale/ffa/repositories/TracksRepository.kt

@ -42,19 +42,18 @@ class TracksRepository(override val context: Context?, albumId: Int) : @@ -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
}
}

1
changes/changelog.d/122.bugfix

@ -0,0 +1 @@ @@ -0,0 +1 @@
Fix leaked database cursor resource
Loading…
Cancel
Save