Skip to content

Commit 0807587

Browse files
authored
IOS-4312 :: Feature internal :: Use async-await on the sample app (mobilejazz#52)
1 parent c860f29 commit 0807587

File tree

4 files changed

+40
-23
lines changed

4 files changed

+40
-23
lines changed

Example/Harmony/Core/Features/Item/Data/ItemNetworkDataSource.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class ItemNetworkDataSource : GetDataSource {
3333
case let query as IdQuery<String>:
3434
return getById(query.id)
3535
default:
36-
query.fatalError(.get, self)
36+
return Future(CoreError.QueryNotSupported())
3737
}
3838
}
3939

@@ -44,7 +44,7 @@ class ItemNetworkDataSource : GetDataSource {
4444
case is SearchItemsQuery:
4545
return searchItems((query as! SearchItemsQuery).text)
4646
default:
47-
query.fatalError(.getAll, self)
47+
return Future(CoreError.QueryNotSupported())
4848
}
4949
}
5050
}

Example/Harmony/Core/Features/Item/Domain/Interactors/GetAllItemsInteractor.swift

+4-7
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,10 @@
99
import Harmony
1010

1111
struct GetAllItemsInteractor {
12-
let executor: Executor
13-
let getItems: Interactor.GetAllByQuery<Item>
12+
let getItems: AsyncGetAllInteractor<Item>
1413

15-
func execute(_ operation: Harmony.Operation = DefaultOperation()) -> Future<[Item]> {
16-
return executor.submit { r in
17-
let items = try self.getItems.execute(AllItemsQuery(), operation, in: DirectExecutor()).result.get()
18-
r.set(items)
19-
}
14+
func execute(_ operation: Harmony.Operation = DefaultOperation()) async throws -> [Item] {
15+
return try await self.getItems.execute(AllItemsQuery(), operation)
16+
2017
}
2118
}

Example/Harmony/Core/Features/Item/Domain/Presenters/ItemListPresenter.swift

+28-12
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,19 @@ class ItemListDefaultPresenter: ItemListPresenter {
3333

3434
func onEventLoadList() {
3535
view?.onDisplayProgressHud(show: true)
36-
getItems.execute().then { items in
37-
self.view?.onDisplayProgressHud(show: false)
38-
self.view?.onDisplayItems(items)
39-
}.fail { error in
40-
self.view?.onDisplayProgressHud(show: false)
41-
self.view?.onDisplayFailedToFetchItems(error)
36+
Task {
37+
do {
38+
let items = try await self.getItems.execute()
39+
Task { @MainActor in
40+
self.view?.onDisplayProgressHud(show: false)
41+
self.view?.onDisplayItems(items)
42+
}
43+
} catch {
44+
Task { @MainActor in
45+
self.view?.onDisplayProgressHud(show: false)
46+
self.view?.onDisplayFailedToFetchItems(error)
47+
}
48+
}
4249
}
4350
}
4451

@@ -48,12 +55,21 @@ class ItemListDefaultPresenter: ItemListPresenter {
4855

4956
func onActionReloadList() {
5057
view?.onDisplayProgressHud(show: true)
51-
self.getItems.execute(MainSyncOperation()).then { items in
52-
self.view?.onDisplayProgressHud(show: false)
53-
self.view?.onDisplayItems(items)
54-
}.fail { error in
55-
self.view?.onDisplayProgressHud(show: false)
56-
self.view?.onDisplayFailedToFetchItems(error)
58+
Task {
59+
do {
60+
let items = try await self.getItems.execute(MainSyncOperation())
61+
Task { @MainActor in
62+
self.view?.onDisplayProgressHud(show: false)
63+
self.view?.onDisplayItems(items)
64+
}
65+
} catch {
66+
Task { @MainActor in
67+
self.view?.onDisplayProgressHud(show: false)
68+
self.view?.onDisplayFailedToFetchItems(error)
69+
}
70+
}
5771
}
72+
5873
}
5974
}
75+

Example/Harmony/Core/Features/Item/ItemProvider.swift

+6-2
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,14 @@ class ItemDefaultModule: ItemComponent {
6363
toOutMapper: EncodableToDecodableMapper<ItemEntity, Item>())
6464
)
6565
}()
66+
67+
private lazy var asyncRepository: AsyncAnyGetRepository<Item> = {
68+
let asyncRepositoryWrapper: AsyncGetRepositoryWrapper = AsyncGetRepositoryWrapper(repository)
69+
return AsyncAnyGetRepository(asyncRepositoryWrapper)
70+
}()
6671

6772
private func getAllItemsInteractor() -> GetAllItemsInteractor {
68-
return GetAllItemsInteractor(executor: self.executor,
69-
getItems: Interactor.GetAllByQuery(DirectExecutor(), self.repository))
73+
return GetAllItemsInteractor(getItems: AsyncGetAllInteractor(asyncRepository))
7074
}
7175

7276
func itemListPresenter(view: ItemListPresenterView) -> ItemListPresenter {

0 commit comments

Comments
 (0)