@@ -44,6 +44,8 @@ import com.duckduckgo.di.scopes.ActivityScope
4444import com.duckduckgo.savedsites.api.SavedSitesRepository
4545import com.duckduckgo.savedsites.api.models.SavedSite.Bookmark
4646import javax.inject.Inject
47+ import kotlinx.coroutines.async
48+ import kotlinx.coroutines.awaitAll
4749import kotlinx.coroutines.flow.MutableStateFlow
4850import kotlinx.coroutines.flow.SharingStarted
4951import kotlinx.coroutines.flow.combine
@@ -246,54 +248,48 @@ class TabSwitcherViewModel @Inject constructor(
246248 }
247249
248250 fun onCloseSelectedTabs () {
249- (selectionViewState.value.mode as ? SelectionViewState .Mode .Selection )?.selectedTabs?.size?.let { numTabs ->
250- if (numTabs > 0 ) {
251- command.value = BookmarkTabs (numTabs)
252- }
253- }
254251 }
255252
256253 fun onCloseOtherTabs () {
257254 }
258255
259256 fun onBookmarkTabsConfirmed (numTabs : Int ) {
260- val numBookmarkedTabs = when (val mode = selectionViewState.value.mode) {
261- is SelectionViewState .Mode .Selection -> {
262- // bookmark selected tabs (or all tabs if none selected)
263- if (mode.selectedTabs.isNotEmpty()) {
264- bookmarkTabs(mode.selectedTabs)
265- } else {
266- bookmarkAllTabs()
257+ viewModelScope.launch {
258+ val numBookmarkedTabs = when (val mode = selectionViewState.value.mode) {
259+ is SelectionViewState .Mode .Selection -> {
260+ // bookmark selected tabs (or all tabs if none selected)
261+ if (mode.selectedTabs.isNotEmpty()) {
262+ bookmarkTabs(mode.selectedTabs)
263+ } else {
264+ bookmarkAllTabs()
265+ }
267266 }
268- }
269267
270- SelectionViewState .Mode .Normal -> {
271- if (numTabs == 1 ) {
272- activeTab.value?.tabId?.let { bookmarkTabs(listOf (it)) } ? : 0
273- } else {
274- bookmarkAllTabs()
268+ SelectionViewState .Mode .Normal -> {
269+ if (numTabs == 1 ) {
270+ activeTab.value?.tabId?.let { bookmarkTabs(listOf (it)) } ? : 0
271+ } else {
272+ bookmarkAllTabs()
273+ }
275274 }
276275 }
276+ command.value = ShowBookmarkToast (numBookmarkedTabs)
277277 }
278- command.value = ShowBookmarkToast (numBookmarkedTabs)
279278 }
280279
281- private fun bookmarkAllTabs (): Int {
280+ private suspend fun bookmarkAllTabs (): Int {
282281 return tabSwitcherItems.value?.filterIsInstance<TabSwitcherItem .Tab >()?.let { tabIds ->
283282 bookmarkTabs(tabIds.map { it.id })
284283 } ? : 0
285284 }
286285
287- private fun bookmarkTabs (tabIds : List <String >): Int {
288- var bookmarkedSites = 0
289- tabIds.forEach {
290- viewModelScope.launch {
291- if (saveSiteBookmark(it) != null ) {
292- bookmarkedSites++
293- }
286+ private suspend fun bookmarkTabs (tabIds : List <String >): Int {
287+ val results = tabIds.map { tabId ->
288+ viewModelScope.async {
289+ saveSiteBookmark(tabId)
294290 }
295291 }
296- return bookmarkedSites
292+ return results.awaitAll().count { it != null }
297293 }
298294
299295 fun onCloseAllTabsConfirmed () {
0 commit comments