@@ -14,25 +14,34 @@ final class SSHProfileStorage {
1414 private let defaults = UserDefaults . standard
1515 private let encoder = JSONEncoder ( )
1616 private let decoder = JSONDecoder ( )
17+ private var lastLoadFailed = false
1718
1819 private init ( ) { }
1920
2021 // MARK: - Profile CRUD
2122
2223 func loadProfiles( ) -> [ SSHProfile ] {
2324 guard let data = defaults. data ( forKey: profilesKey) else {
25+ lastLoadFailed = false
2426 return [ ]
2527 }
2628
2729 do {
28- return try decoder. decode ( [ SSHProfile ] . self, from: data)
30+ let profiles = try decoder. decode ( [ SSHProfile ] . self, from: data)
31+ lastLoadFailed = false
32+ return profiles
2933 } catch {
3034 Self . logger. error ( " Failed to load SSH profiles: \( error) " )
35+ lastLoadFailed = true
3136 return [ ]
3237 }
3338 }
3439
3540 func saveProfiles( _ profiles: [ SSHProfile ] ) {
41+ guard !lastLoadFailed else {
42+ Self . logger. warning ( " Refusing to save SSH profiles: previous load failed (would overwrite existing data) " )
43+ return
44+ }
3645 do {
3746 let data = try encoder. encode ( profiles)
3847 defaults. set ( data, forKey: profilesKey)
@@ -43,12 +52,14 @@ final class SSHProfileStorage {
4352
4453 func addProfile( _ profile: SSHProfile ) {
4554 var profiles = loadProfiles ( )
55+ guard !lastLoadFailed else { return }
4656 profiles. append ( profile)
4757 saveProfiles ( profiles)
4858 }
4959
5060 func updateProfile( _ profile: SSHProfile ) {
5161 var profiles = loadProfiles ( )
62+ guard !lastLoadFailed else { return }
5263 if let index = profiles. firstIndex ( where: { $0. id == profile. id } ) {
5364 profiles [ index] = profile
5465 saveProfiles ( profiles)
@@ -57,6 +68,7 @@ final class SSHProfileStorage {
5768
5869 func deleteProfile( _ profile: SSHProfile ) {
5970 var profiles = loadProfiles ( )
71+ guard !lastLoadFailed else { return }
6072 profiles. removeAll { $0. id == profile. id }
6173 saveProfiles ( profiles)
6274
0 commit comments