@@ -13,6 +13,7 @@ final class SettingViewModel: Store {
1313 struct State : Equatable {
1414 var theme : SystemTheme = . automatic
1515 var dirSize : Int64 = 0
16+ var isNetworkConnected = true
1617 var isLoading = false
1718 var showAlert : Bool = false
1819 var alertTitle : String = " "
@@ -21,6 +22,7 @@ final class SettingViewModel: Store {
2122 }
2223
2324 enum Action {
25+ case networkStatusChanged( Bool )
2426 case setAlert( isPresented: Bool , type: AlertType ? = nil )
2527 case setLoading( Bool )
2628 case setTheme( SystemTheme )
@@ -43,6 +45,7 @@ final class SettingViewModel: Store {
4345 private( set) var state = State ( )
4446 private let deleteAuthuseCase : DeleteAuthUseCase
4547 private let signOutUseCase : SignOutUseCase
48+ private let networkConnectivityUseCase : ObserveNetworkConnectivityUseCase
4649 private let systemThemeUseCase : ObserveSystemThemeUseCase
4750 private let updateSystemThemeUseCase : UpdateSystemThemeUseCase
4851 private let loadingState = LoadingState ( )
@@ -55,13 +58,16 @@ final class SettingViewModel: Store {
5558 init (
5659 deleteAuthUseCase: DeleteAuthUseCase ,
5760 signOutUseCase: SignOutUseCase ,
61+ networkConnectivityUseCase: ObserveNetworkConnectivityUseCase ,
5862 systemThemeUseCase: ObserveSystemThemeUseCase ,
5963 updateSystemThemeUseCase: UpdateSystemThemeUseCase
6064 ) {
6165 self . deleteAuthuseCase = deleteAuthUseCase
6266 self . signOutUseCase = signOutUseCase
67+ self . networkConnectivityUseCase = networkConnectivityUseCase
6368 self . systemThemeUseCase = systemThemeUseCase
6469 self . updateSystemThemeUseCase = updateSystemThemeUseCase
70+ setupNetworkObserving ( )
6571 setupThemeMonitoring ( )
6672 }
6773
@@ -70,6 +76,8 @@ final class SettingViewModel: Store {
7076 var effects : [ SideEffect ] = [ ]
7177
7278 switch action {
79+ case . networkStatusChanged( let isConnected) :
80+ state. isNetworkConnected = isConnected
7381 case . setAlert( let isPresented, let type) :
7482 setAlert ( & state, isPresented: isPresented, type: type)
7583 case . setLoading( let value) :
@@ -164,6 +172,16 @@ private extension SettingViewModel {
164172 . store ( in: & cancellables)
165173 }
166174
175+ func setupNetworkObserving( ) {
176+ networkConnectivityUseCase. observe ( )
177+ . removeDuplicates ( )
178+ . receive ( on: DispatchQueue . main)
179+ . sink { [ weak self] isConnected in
180+ self ? . send ( . networkStatusChanged( isConnected) )
181+ }
182+ . store ( in: & cancellables)
183+ }
184+
167185 func dirSizeInBytes( ) -> Int64 {
168186 do {
169187 let cachesDir = try FileManager . default. url (
0 commit comments