Skip to content

Commit 263354e

Browse files
committed
refactor: 디렉토리 작업을 백그라운드 스레드에서 작업하도록 개선
1 parent 5462b58 commit 263354e

7 files changed

Lines changed: 41 additions & 20 deletions

File tree

DevLog/Data/Repository/WebPageImageRepositoryImpl.swift

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,17 @@ final class WebPageImageRepositoryImpl: WebPageImageRepository {
1212
self.store = store
1313
}
1414

15-
func fetchDirSizeInBytes() -> Int64 {
16-
store.dirSizeInBytes()
15+
func fetchDirSizeInBytes() async -> Int64 {
16+
let store = self.store
17+
return await Task.detached(priority: .utility) {
18+
store.dirSizeInBytes()
19+
}.value
1720
}
1821

19-
func clearDirectory() throws {
20-
try store.clearDirectory()
22+
func clearDirectory() async throws {
23+
let store = self.store
24+
try await Task.detached(priority: .utility) {
25+
try store.clearDirectory()
26+
}.value
2127
}
2228
}

DevLog/Domain/Protocol/WebPageImageRepository.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
//
77

88
protocol WebPageImageRepository {
9-
func fetchDirSizeInBytes() -> Int64
10-
func clearDirectory() throws
9+
func fetchDirSizeInBytes() async -> Int64
10+
func clearDirectory() async throws
1111
}

DevLog/Domain/UseCase/WebPage/Fetch/FetchWebPageImageDirSizeUseCase.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
//
77

88
protocol FetchWebPageImageDirSizeUseCase {
9-
func execute() -> Int64
9+
func execute() async -> Int64
1010
}

DevLog/Domain/UseCase/WebPage/Fetch/FetchWebPageImageDirSizeUseCaseImpl.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ final class FetchWebPageImageDirSizeUseCaseImpl: FetchWebPageImageDirSizeUseCase
1212
self.repository = repository
1313
}
1414

15-
func execute() -> Int64 {
16-
repository.fetchDirSizeInBytes()
15+
func execute() async -> Int64 {
16+
await repository.fetchDirSizeInBytes()
1717
}
1818
}

DevLog/Domain/UseCase/WebPage/Upsert/ClearWebPageImageDirectoryUseCase.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
//
77

88
protocol ClearWebPageImageDirectoryUseCase {
9-
func execute() throws
9+
func execute() async throws
1010
}

DevLog/Domain/UseCase/WebPage/Upsert/ClearWebPageImageDirectoryUseCaseImpl.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ final class ClearWebPageImageDirectoryUseCaseImpl: ClearWebPageImageDirectoryUse
1212
self.repository = repository
1313
}
1414

15-
func execute() throws {
16-
try repository.clearDirectory()
15+
func execute() async throws {
16+
try await repository.clearDirectory()
1717
}
1818
}

DevLog/Presentation/ViewModel/SettingViewModel.swift

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ final class SettingViewModel: Store {
2424
enum Action {
2525
case networkStatusChanged(Bool)
2626
case setAlert(isPresented: Bool, type: AlertType? = nil)
27+
case setDirSize(Int64)
2728
case setLoading(Bool)
2829
case setTheme(SystemTheme)
2930
case updateDirSize
@@ -34,7 +35,9 @@ final class SettingViewModel: Store {
3435
}
3536

3637
enum SideEffect {
38+
case clearWebPageImageDirectory
3739
case deleteAuth
40+
case fetchWebPageImageDirSize
3841
case signOut
3942
}
4043

@@ -86,27 +89,24 @@ final class SettingViewModel: Store {
8689
state.isNetworkConnected = isConnected
8790
case .setAlert(let isPresented, let type):
8891
setAlert(&state, isPresented: isPresented, type: type)
92+
case .setDirSize(let value):
93+
state.dirSize = value
8994
case .setLoading(let value):
9095
state.isLoading = value
9196
case .setTheme(let value):
9297
state.theme = value
9398
updateSystemThemeUseCase.execute(value)
9499
case .updateDirSize:
95-
state.dirSize = fetchWebPageImageDirSizeUseCase.execute()
100+
effects = [.fetchWebPageImageDirSize]
96101
case .tapDeleteAuthButton:
97102
effects = [.deleteAuth]
98103
case .tapSignOutButton:
99104
effects = [.signOut]
100105
case .tapRemoveCacheButton:
101106
setAlert(&state, isPresented: true, type: .removeCache)
102107
case .confirmRemoveCache:
103-
do {
104-
setAlert(&state, isPresented: false)
105-
try clearWebPageImageDirectoryUseCase.execute()
106-
state.dirSize = fetchWebPageImageDirSizeUseCase.execute()
107-
} catch {
108-
setAlert(&state, isPresented: true, type: .error)
109-
}
108+
setAlert(&state, isPresented: false)
109+
effects = [.clearWebPageImageDirectory]
110110
}
111111

112112
if self.state != state { self.state = state }
@@ -115,6 +115,16 @@ final class SettingViewModel: Store {
115115

116116
func run(_ effect: SideEffect) {
117117
switch effect {
118+
case .clearWebPageImageDirectory:
119+
Task {
120+
do {
121+
try await clearWebPageImageDirectoryUseCase.execute()
122+
let dirSize = await fetchWebPageImageDirSizeUseCase.execute()
123+
send(.setDirSize(dirSize))
124+
} catch {
125+
send(.setAlert(isPresented: true, type: .error))
126+
}
127+
}
118128
case .deleteAuth:
119129
beginLoading(.delayed)
120130
Task {
@@ -126,6 +136,11 @@ final class SettingViewModel: Store {
126136
send(.setAlert(isPresented: true, type: .error))
127137
}
128138
}
139+
case .fetchWebPageImageDirSize:
140+
Task {
141+
let dirSize = await fetchWebPageImageDirSizeUseCase.execute()
142+
send(.setDirSize(dirSize))
143+
}
129144
case .signOut:
130145
beginLoading(.delayed)
131146
Task {

0 commit comments

Comments
 (0)