music: increase music load timeout
TagExtractor can take longer than 10 seconds to load, increase it to 60 seconds.
This commit is contained in:
parent
ced462e718
commit
6730766504
2 changed files with 7 additions and 4 deletions
|
@ -42,6 +42,7 @@ import org.oxycblt.auxio.music.metadata.Separators
|
||||||
import org.oxycblt.auxio.music.metadata.TagExtractor
|
import org.oxycblt.auxio.music.metadata.TagExtractor
|
||||||
import org.oxycblt.auxio.music.user.MutableUserLibrary
|
import org.oxycblt.auxio.music.user.MutableUserLibrary
|
||||||
import org.oxycblt.auxio.music.user.UserLibrary
|
import org.oxycblt.auxio.music.user.UserLibrary
|
||||||
|
import org.oxycblt.auxio.util.DEFAULT_TIMEOUT
|
||||||
import org.oxycblt.auxio.util.forEachWithTimeout
|
import org.oxycblt.auxio.util.forEachWithTimeout
|
||||||
import org.oxycblt.auxio.util.logD
|
import org.oxycblt.auxio.util.logD
|
||||||
import org.oxycblt.auxio.util.logE
|
import org.oxycblt.auxio.util.logE
|
||||||
|
@ -481,7 +482,7 @@ constructor(
|
||||||
val rawSongs = LinkedList<RawSong>()
|
val rawSongs = LinkedList<RawSong>()
|
||||||
// Use a longer timeout so that dependent components can timeout and throw errors that
|
// Use a longer timeout so that dependent components can timeout and throw errors that
|
||||||
// provide more context than if we timed out here.
|
// provide more context than if we timed out here.
|
||||||
processedSongs.forEachWithTimeout(20000) {
|
processedSongs.forEachWithTimeout(DEFAULT_TIMEOUT * 2) {
|
||||||
rawSongs.add(it)
|
rawSongs.add(it)
|
||||||
// Since discovery takes up the bulk of the music loading process, we switch to
|
// Since discovery takes up the bulk of the music loading process, we switch to
|
||||||
// indicating a defined amount of loaded songs in comparison to the projected amount
|
// indicating a defined amount of loaded songs in comparison to the projected amount
|
||||||
|
@ -489,7 +490,7 @@ constructor(
|
||||||
emitIndexingProgress(IndexingProgress.Songs(rawSongs.size, query.projectedTotal))
|
emitIndexingProgress(IndexingProgress.Songs(rawSongs.size, query.projectedTotal))
|
||||||
}
|
}
|
||||||
|
|
||||||
withTimeout(10000) {
|
withTimeout(DEFAULT_TIMEOUT) {
|
||||||
mediaStoreJob.await()
|
mediaStoreJob.await()
|
||||||
tagJob.await()
|
tagJob.await()
|
||||||
}
|
}
|
||||||
|
|
|
@ -152,6 +152,8 @@ private fun Fragment.launch(
|
||||||
viewLifecycleOwner.lifecycleScope.launch { viewLifecycleOwner.repeatOnLifecycle(state, block) }
|
viewLifecycleOwner.lifecycleScope.launch { viewLifecycleOwner.repeatOnLifecycle(state, block) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const val DEFAULT_TIMEOUT = 60000L
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wraps [SendChannel.send] with a specified timeout.
|
* Wraps [SendChannel.send] with a specified timeout.
|
||||||
*
|
*
|
||||||
|
@ -160,7 +162,7 @@ private fun Fragment.launch(
|
||||||
* @throws TimeoutException If the timeout is reached, provides context on what element
|
* @throws TimeoutException If the timeout is reached, provides context on what element
|
||||||
* specifically.
|
* specifically.
|
||||||
*/
|
*/
|
||||||
suspend fun <E> SendChannel<E>.sendWithTimeout(element: E, timeout: Long = 10000) {
|
suspend fun <E> SendChannel<E>.sendWithTimeout(element: E, timeout: Long = DEFAULT_TIMEOUT) {
|
||||||
try {
|
try {
|
||||||
withTimeout(timeout) { send(element) }
|
withTimeout(timeout) { send(element) }
|
||||||
} catch (e: TimeoutCancellationException) {
|
} catch (e: TimeoutCancellationException) {
|
||||||
|
@ -179,7 +181,7 @@ suspend fun <E> SendChannel<E>.sendWithTimeout(element: E, timeout: Long = 10000
|
||||||
* specifically.
|
* specifically.
|
||||||
*/
|
*/
|
||||||
suspend fun <E> ReceiveChannel<E>.forEachWithTimeout(
|
suspend fun <E> ReceiveChannel<E>.forEachWithTimeout(
|
||||||
timeout: Long = 10000,
|
timeout: Long = DEFAULT_TIMEOUT,
|
||||||
action: suspend (E) -> Unit
|
action: suspend (E) -> Unit
|
||||||
) {
|
) {
|
||||||
var exhausted = false
|
var exhausted = false
|
||||||
|
|
Loading…
Reference in a new issue