From 318d3e1f8e2113c8e3339a864ff571e00569e846 Mon Sep 17 00:00:00 2001 From: Florian Gabach Date: Mon, 26 Feb 2018 14:22:37 +0100 Subject: [PATCH] Use DispatchGroup for download licences --- .../UserInterfaceState.xcuserstate | Bin 27997 -> 27936 bytes Sources/Model/LicenceDownloader.swift | 20 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/Exemple/OpenSourceControllerDemo.xcodeproj/project.xcworkspace/xcuserdata/florian.gabach.xcuserdatad/UserInterfaceState.xcuserstate b/Exemple/OpenSourceControllerDemo.xcodeproj/project.xcworkspace/xcuserdata/florian.gabach.xcuserdatad/UserInterfaceState.xcuserstate index 86767e7e98d89a38b6838b531b4934e44625742d..23986b387115a67d523f6b7592001f3dd604d6e3 100644 GIT binary patch delta 12226 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 Kx9+!F!2bZ=17iaK diff --git a/Sources/Model/LicenceDownloader.swift b/Sources/Model/LicenceDownloader.swift index 30495d4..d83c9d9 100644 --- a/Sources/Model/LicenceDownloader.swift +++ b/Sources/Model/LicenceDownloader.swift @@ -16,22 +16,20 @@ class LicenceDownloader: NSObject { class func downloadLicences(licences: [LicenceFile], config: OpenSourceControllerConfig, completion: @escaping () -> Void) { - // Number of licences - let licenceCount = licences.count - - // Already licence downloaded - var alreadyDownloaded = 0 + let licenceGroupe = DispatchGroup() // Download licence's detail for every lience for licence in licences { + licenceGroupe.enter() + licence.downloadLicenceDetail(config: config, completion: { () in - alreadyDownloaded += 1 - - // If this is the last licence, perfom completion - if licenceCount == alreadyDownloaded { - completion() - } + licenceGroupe.leave() }) } + + // When everything is downloaded + licenceGroupe.notify(queue: .main) { + completion() + } } }