Skip to content

Commit dcfd68a

Browse files
Merge pull request #2514 from CruGlobal/GT-2541-fix-download-modal-getting-stuck
GT-2541 fix download modal getting stuck
2 parents 98383ee + 36f5c9b commit dcfd68a

File tree

3 files changed

+32
-8
lines changed

3 files changed

+32
-8
lines changed

godtools/App/Flows/DownloadToolTranslations/DownloadToolTranslationsFlow.swift

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import UIKit
1010
import Combine
1111

1212
class DownloadToolTranslationsFlow: Flow {
13-
13+
1414
private let determineToolTranslationsToDownload: DetermineToolTranslationsToDownloadType
1515
private let getToolTranslationsFilesUseCase: GetToolTranslationsFilesUseCase
1616
private let didDownloadToolTranslations: ((_ result: Result<ToolTranslationsDomainModel, Error>) -> Void)
@@ -47,7 +47,7 @@ class DownloadToolTranslationsFlow: Flow {
4747
case .failure(let error):
4848
self?.dismissDownloadTool(completion: {
4949
self?.didDownloadToolTranslations(.failure(error))
50-
})
50+
}, delaySeconds: 2)
5151
}
5252

5353
}, receiveValue: { [weak self] (toolTranslations: ToolTranslationsDomainModel) in
@@ -121,15 +121,32 @@ class DownloadToolTranslationsFlow: Flow {
121121
downloadToolProgressModal = modal
122122
}
123123

124-
private func dismissDownloadTool(completion: (() -> Void)?) {
124+
private func dismissDownloadTool(completion: (() -> Void)?, delaySeconds: TimeInterval? = nil) {
125125

126126
guard let modal = downloadToolProgressModal else {
127127
return
128128
}
129129

130-
modal.dismiss(animated: true, completion: completion)
130+
delayCallbackSeconds(delaySeconds: delaySeconds) { [weak self] in
131+
132+
modal.dismiss(animated: true, completion: completion)
133+
134+
self?.downloadToolProgressView = nil
135+
self?.downloadToolProgressModal = nil
136+
}
137+
}
138+
139+
private func delayCallbackSeconds(delaySeconds: TimeInterval?, closure: (() -> Void)?) {
140+
141+
if let delaySeconds = delaySeconds {
142+
143+
DispatchQueue.main.asyncAfter(deadline: .now() + delaySeconds) {
131144

132-
downloadToolProgressView = nil
133-
downloadToolProgressModal = nil
145+
closure?()
146+
}
147+
}
148+
else {
149+
closure?()
150+
}
134151
}
135152
}

godtools/App/Services/Renderer/Navigation/MobileContentRendererNavigation.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ class MobileContentRendererNavigation {
7878
delegate?.mobileContentRendererNavigationDismissRenderer(navigation: self, event: event)
7979
}
8080

81+
func presentError(error: Error, appLanguage: AppLanguageDomainModel) {
82+
83+
parentFlow?.presentError(appLanguage: appLanguage, error: error)
84+
}
85+
8186
func errorOccurred(error: MobileContentErrorViewModel) {
8287

8388
let view = MobileContentErrorView(viewModel: error)

godtools/App/Services/Renderer/Views/MobileContent/Views/Renderer/MobileContentRendererViewModel.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ class MobileContentRendererViewModel: MobileContentPagesViewModel {
212212

213213
func setRendererPrimaryLanguage(primaryLanguageId: String, parallelLanguageId: String?, selectedLanguageId: String?) {
214214

215+
let appLanguage: AppLanguageDomainModel = self.appLanguage
215216
let currentRenderer: MobileContentRenderer = renderer.value
216217

217218
var newLanguageIds: [String] = [primaryLanguageId]
@@ -232,8 +233,9 @@ class MobileContentRendererViewModel: MobileContentPagesViewModel {
232233

233234
self?.setRenderer(renderer: newRenderer, pageRendererIndex: newSelectedLanguageIndex, navigationEvent: nil)
234235

235-
case .failure( _):
236-
break
236+
case .failure(let error):
237+
238+
currentRenderer.navigation.presentError(error: error, appLanguage: appLanguage)
237239
}
238240
}
239241

0 commit comments

Comments
 (0)