diff --git a/yobble/Network/ProfileModels.swift b/yobble/Network/ProfileModels.swift index 8d9cc70..96b19bd 100644 --- a/yobble/Network/ProfileModels.swift +++ b/yobble/Network/ProfileModels.swift @@ -110,6 +110,41 @@ struct ProfilePermissionsRequestPayload: Encodable { let forceAutoDeleteMessagesInPrivate: Bool let maxMessageAutoDeleteSeconds: Int? let autoDeleteAfterDays: Int? + + enum CodingKeys: String, CodingKey { + case isSearchable = "is_searchable" + case allowMessageForwarding = "allow_message_forwarding" + case allowMessagesFromNonContacts = "allow_messages_from_non_contacts" + case showProfilePhotoToNonContacts = "show_profile_photo_to_non_contacts" + case lastSeenVisibility = "last_seen_visibility" + case showBioToNonContacts = "show_bio_to_non_contacts" + case showStoriesToNonContacts = "show_stories_to_non_contacts" + case allowServerChats = "allow_server_chats" + case publicInvitePermission = "public_invite_permission" + case groupInvitePermission = "group_invite_permission" + case callPermission = "call_permission" + case forceAutoDeleteMessagesInPrivate = "force_auto_delete_messages_in_private" + case maxMessageAutoDeleteSeconds = "max_message_auto_delete_seconds" + case autoDeleteAfterDays = "auto_delete_after_days" + } + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(isSearchable, forKey: .isSearchable) + try container.encode(allowMessageForwarding, forKey: .allowMessageForwarding) + try container.encode(allowMessagesFromNonContacts, forKey: .allowMessagesFromNonContacts) + try container.encode(showProfilePhotoToNonContacts, forKey: .showProfilePhotoToNonContacts) + try container.encode(lastSeenVisibility, forKey: .lastSeenVisibility) + try container.encode(showBioToNonContacts, forKey: .showBioToNonContacts) + try container.encode(showStoriesToNonContacts, forKey: .showStoriesToNonContacts) + try container.encode(allowServerChats, forKey: .allowServerChats) + try container.encode(publicInvitePermission, forKey: .publicInvitePermission) + try container.encode(groupInvitePermission, forKey: .groupInvitePermission) + try container.encode(callPermission, forKey: .callPermission) + try container.encode(forceAutoDeleteMessagesInPrivate, forKey: .forceAutoDeleteMessagesInPrivate) + try container.encodeIfPresent(maxMessageAutoDeleteSeconds, forKey: .maxMessageAutoDeleteSeconds) + try container.encodeIfPresent(autoDeleteAfterDays, forKey: .autoDeleteAfterDays) + } } struct ProfileUpdateRequestPayload: Encodable { diff --git a/yobble/Network/ProfileService.swift b/yobble/Network/ProfileService.swift index 19e8bbb..c086ab6 100644 --- a/yobble/Network/ProfileService.swift +++ b/yobble/Network/ProfileService.swift @@ -76,6 +76,8 @@ final class ProfileService { func updateProfile(_ payload: ProfileUpdateRequestPayload, completion: @escaping (Result) -> Void) { let encoder = JSONEncoder() encoder.keyEncodingStrategy = .convertToSnakeCase + + print("payload \(payload)") guard let body = try? encoder.encode(payload) else { let message = NSLocalizedString("Не удалось подготовить данные запроса.", comment: "Profile update encoding error") diff --git a/yobble/Views/Tab/Settings/EditPrivacyView.swift b/yobble/Views/Tab/Settings/EditPrivacyView.swift index aaa39d9..1115099 100644 --- a/yobble/Views/Tab/Settings/EditPrivacyView.swift +++ b/yobble/Views/Tab/Settings/EditPrivacyView.swift @@ -166,15 +166,23 @@ struct EditPrivacyView: View { } private func formattedAutoDeleteSeconds(_ value: Int) -> String { + let secondsString = "\(value) сек." + switch value { case ..<60: - return "\(value) сек." + return secondsString case 60..<3600: let minutes = value / 60 - return "\(minutes) мин." + return "\(secondsString) (≈ \(minutes) мин.)" default: let hours = Double(value) / 3600.0 - return String(format: "%.1f ч.", hours) + let formattedHours: String + if hours.truncatingRemainder(dividingBy: 1) == 0 { + formattedHours = String(format: "%.0f", hours) + } else { + formattedHours = String(format: "%.1f", hours) + } + return "\(secondsString) (≈ \(formattedHours) ч.)" } } }