22// Copyright © Essential Developer. All rights reserved.
33//
44
5- import Combine
65import EssentialFeed
76import EssentialFeediOS
87
98@MainActor
10- final class AsyncLoadResourcePresentationAdapter < Resource, View: ResourceView > {
9+ final class LoadResourcePresentationAdapter < Resource, View: ResourceView > {
1110 private let loader : ( ) async throws -> Resource
1211 private var cancellable : Task < Void , Never > ?
1312 private var isLoading = false
@@ -46,57 +45,6 @@ final class AsyncLoadResourcePresentationAdapter<Resource, View: ResourceView> {
4645 }
4746}
4847
49- extension AsyncLoadResourcePresentationAdapter : FeedImageCellControllerDelegate {
50- func didRequestImage( ) {
51- loadResource ( )
52- }
53-
54- func didCancelImageRequest( ) {
55- cancellable? . cancel ( )
56- cancellable = nil
57- isLoading = false
58- }
59- }
60-
61- @MainActor
62- final class LoadResourcePresentationAdapter < Resource, View: ResourceView > {
63- private let loader : ( ) -> AnyPublisher < Resource , Error >
64- private var cancellable : Cancellable ?
65- private var isLoading = false
66-
67- var presenter : LoadResourcePresenter < Resource , View > ?
68-
69- init ( loader: @escaping ( ) -> AnyPublisher < Resource , Error > ) {
70- self . loader = loader
71- }
72-
73- func loadResource( ) {
74- guard !isLoading else { return }
75-
76- presenter? . didStartLoading ( )
77- isLoading = true
78-
79- cancellable = loader ( )
80- . dispatchOnMainThread ( )
81- . handleEvents ( receiveCancel: { [ weak self] in
82- self ? . isLoading = false
83- } )
84- . sink (
85- receiveCompletion: { [ weak self] completion in
86- switch completion {
87- case . finished: break
88-
89- case let . failure( error) :
90- self ? . presenter? . didFinishLoading ( with: error)
91- }
92-
93- self ? . isLoading = false
94- } , receiveValue: { [ weak self] resource in
95- self ? . presenter? . didFinishLoading ( with: resource)
96- } )
97- }
98- }
99-
10048extension LoadResourcePresentationAdapter : FeedImageCellControllerDelegate {
10149 func didRequestImage( ) {
10250 loadResource ( )
@@ -105,5 +53,6 @@ extension LoadResourcePresentationAdapter: FeedImageCellControllerDelegate {
10553 func didCancelImageRequest( ) {
10654 cancellable? . cancel ( )
10755 cancellable = nil
56+ isLoading = false
10857 }
10958}
0 commit comments