From a048fb38c86f7f8062d233c806b7abe909647ca5 Mon Sep 17 00:00:00 2001 From: Felix Horvat Date: Tue, 30 Mar 2021 00:20:35 +0200 Subject: [PATCH 1/2] fixed crashes with ios offline manager --- ios/Classes/OfflineManagerUtils.swift | 3 +++ ios/Classes/OfflinePackDownloadManager.swift | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ios/Classes/OfflineManagerUtils.swift b/ios/Classes/OfflineManagerUtils.swift index 749baf0b3..b5925dda3 100644 --- a/ios/Classes/OfflineManagerUtils.swift +++ b/ios/Classes/OfflineManagerUtils.swift @@ -70,6 +70,9 @@ class OfflineManagerUtils { } }) if let packToRemoveUnwrapped = packToRemove { + packToRemoveUnwrapped.suspend() + OfflineManagerUtils.releaseDownloader(id: id) + offlineStorage.removePack(packToRemoveUnwrapped) { error in if let error = error { result(FlutterError( diff --git a/ios/Classes/OfflinePackDownloadManager.swift b/ios/Classes/OfflinePackDownloadManager.swift index e1802ff9a..b217c2af8 100644 --- a/ios/Classes/OfflinePackDownloadManager.swift +++ b/ios/Classes/OfflinePackDownloadManager.swift @@ -158,7 +158,6 @@ class OfflinePackDownloader { )) if let region = OfflineRegion.fromOfflinePack(pack) { OfflineManagerUtils.deleteRegion(result: result, id: region.id) - OfflineManagerUtils.releaseDownloader(id: region.id) } } @@ -193,7 +192,7 @@ class OfflinePackDownloader { return false } // We can tell whether 2 packs are the same by comparing metadata we assigned earlier - return pack.context == currentlyManagedPack.context + return pack.state != .invalid && pack.context == currentlyManagedPack.context } private func calculateDownloadingProgress( From 175cb0245f408146fa934a054245b2bf7ad774c4 Mon Sep 17 00:00:00 2001 From: Felix Horvat Date: Tue, 26 Oct 2021 17:04:03 +0200 Subject: [PATCH 2/2] removed redundant call to releaseDownloader added comment --- ios/Classes/OfflineManagerUtils.swift | 1 + ios/Classes/OfflinePackDownloadManager.swift | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/Classes/OfflineManagerUtils.swift b/ios/Classes/OfflineManagerUtils.swift index b5925dda3..4e345dc10 100644 --- a/ios/Classes/OfflineManagerUtils.swift +++ b/ios/Classes/OfflineManagerUtils.swift @@ -70,6 +70,7 @@ class OfflineManagerUtils { } }) if let packToRemoveUnwrapped = packToRemove { + // deletion is only safe if the download is suspended packToRemoveUnwrapped.suspend() OfflineManagerUtils.releaseDownloader(id: id) diff --git a/ios/Classes/OfflinePackDownloadManager.swift b/ios/Classes/OfflinePackDownloadManager.swift index b217c2af8..187953563 100644 --- a/ios/Classes/OfflinePackDownloadManager.swift +++ b/ios/Classes/OfflinePackDownloadManager.swift @@ -134,7 +134,6 @@ class OfflinePackDownloader { )) if let region = OfflineRegion.fromOfflinePack(pack) { OfflineManagerUtils.deleteRegion(result: result, id: region.id) - OfflineManagerUtils.releaseDownloader(id:region.id) } }