@@ -177,10 +177,10 @@ index 8354209..f061a30 100644
177
177
B41A60AF23D1DB5B00636320 /* TableViewTitleLabel.swift in Sources */,
178
178
diff --git a/LoopKit/LoopKitUI/ViewModels/ProfileViewModel+FileManagement.swift b/LoopKit/LoopKitUI/ViewModels/ProfileViewModel+FileManagement.swift
179
179
new file mode 100644
180
- index 0000000..56dc952
180
+ index 0000000..6d9e370
181
181
--- /dev/null
182
182
+++ b/LoopKit/LoopKitUI/ViewModels/ProfileViewModel+FileManagement.swift
183
- @@ -0,0 +1,400 @@
183
+ @@ -0,0 +1,402 @@
184
184
+ //
185
185
+ // ProfileViewModel+FileManagement.swift
186
186
+ // LoopKitUI
@@ -229,8 +229,9 @@ index 0000000..56dc952
229
229
+ // MARK: File management
230
230
+ extension ProfileViewModel {
231
231
+ private func setCurrentProfile(name: String, syncChange: Bool = false) {
232
- + currentProfileName = name
233
- + if (syncChange) {
232
+ + let sanitizedProfileName = sanitizeProfileName(name)
233
+ + currentProfileName = sanitizedProfileName
234
+ + if syncChange {
234
235
+ triggerProfileSync()
235
236
+ }
236
237
+ }
@@ -277,7 +278,7 @@ index 0000000..56dc952
277
278
+ public func sanitizeProfileName(_ name: String) -> String {
278
279
+ // Replace problematic characters
279
280
+ var sanitized = name.replacingOccurrences(of: ".", with: "_")
280
- +
281
+ +
281
282
+ return sanitized
282
283
+ }
283
284
+
@@ -322,15 +323,15 @@ index 0000000..56dc952
322
323
+ if currentProfileName == oldName {
323
324
+ setCurrentProfile(name: sanitizedProfileName, syncChange: true)
324
325
+ }
325
- +
326
+ +
326
327
+ do {
327
328
+ guard let profileReference = getProfileReference(withName: oldName) else {
328
329
+ print("Profile with old name not found.")
329
330
+ return
330
331
+ }
331
- +
332
+ +
332
333
+ let profile = try getProfile(from: profileReference)
333
- +
334
+ +
334
335
+ let newProfile = Profile(
335
336
+ name: sanitizedProfileName,
336
337
+ correctionRange: profile.correctionRange,
@@ -339,16 +340,16 @@ index 0000000..56dc952
339
340
+ insulinSensitivitySchedule: profile.insulinSensitivitySchedule,
340
341
+ sortOrder: profile.sortOrder
341
342
+ )
342
- +
343
+ +
343
344
+ if let existingProfile = getProfileReference(withName: sanitizedProfileName) {
344
345
+ removeProfile(profileReference: existingProfile)
345
346
+ }
346
- +
347
+ +
347
348
+ let jsonData = try encodeProfile(newProfile)
348
349
+ let fileURL = profilesDirectory.appendingPathComponent(profileReference.fileName)
349
- +
350
+ +
350
351
+ try jsonData.write(to: fileURL)
351
- +
352
+ +
352
353
+ self.loadProfiles()
353
354
+ } catch {
354
355
+ print("An error occurred while renaming profile: \(error)")
@@ -387,7 +388,7 @@ index 0000000..56dc952
387
388
+ for fileURL in profileFiles {
388
389
+ let data = try Data(contentsOf: fileURL)
389
390
+ let profile = try decodeProfile(from: data)
390
- + let profileRef = ProfileReference(name: profile.name, fileName: fileURL.lastPathComponent, sortOrder: profile.sortOrder)
391
+ + let profileRef = ProfileReference(name: sanitizeProfileName( profile.name) , fileName: fileURL.lastPathComponent, sortOrder: profile.sortOrder)
391
392
+ newProfiles.append(profileRef)
392
393
+ }
393
394
+
@@ -433,7 +434,8 @@ index 0000000..56dc952
433
434
+ }
434
435
+
435
436
+ func getProfileReference(withName name: String) -> ProfileReference? {
436
- + return profiles.first(where: { $0.name == name })
437
+ + let sanitizedInputName = sanitizeProfileName(name)
438
+ + return profiles.first(where: { sanitizeProfileName($0.name) == sanitizedInputName })
437
439
+ }
438
440
+
439
441
+ public func removeProfile(profile: Profile) {
0 commit comments