diff --git a/komf-mediaserver/src/commonMain/kotlin/snd/komf/mediaserver/metadata/MetadataService.kt b/komf-mediaserver/src/commonMain/kotlin/snd/komf/mediaserver/metadata/MetadataService.kt index 129f31ab..2c60a248 100644 --- a/komf-mediaserver/src/commonMain/kotlin/snd/komf/mediaserver/metadata/MetadataService.kt +++ b/komf-mediaserver/src/commonMain/kotlin/snd/komf/mediaserver/metadata/MetadataService.kt @@ -68,17 +68,25 @@ class MetadataService( libraryId: MediaServerLibraryId ): Collection { val providers = metadataProviders.providers(libraryId.value) - - return providers - .map { coroutineScope.async { it.searchSeries(seriesName) } } - .flatMap { it.await() } + return searchSeriesMetadata(seriesName, providers) } suspend fun searchSeriesMetadata(seriesName: String): Collection { val providers = metadataProviders.defaultProvidersList() + return searchSeriesMetadata(seriesName, providers) + } + + private suspend fun searchSeriesMetadata( + seriesName: String, + providers: Collection + ): Collection { return providers - .map { coroutineScope.async { it.searchSeries(seriesName) } } - .flatMap { it.await() } + .map { provider -> provider to coroutineScope.async { provider.searchSeries(seriesName) } } + .flatMap { (provider, deferred) -> + runCatching { deferred.await() } + .onFailure { e -> logger.error(e) { "search failed for provider ${provider.providerName()}" } } + .getOrDefault(emptyList()) + } } suspend fun getSeriesCover(