add rating
This commit is contained in:
parent
76f3fdefdf
commit
95a5c77cb9
@ -172,6 +172,7 @@ struct ChatProfile: Decodable {
|
|||||||
let permissions: ChatPermissions?
|
let permissions: ChatPermissions?
|
||||||
let profilePermissions: ChatProfilePermissions?
|
let profilePermissions: ChatProfilePermissions?
|
||||||
let relationship: RelationshipStatus?
|
let relationship: RelationshipStatus?
|
||||||
|
let rating: Int?
|
||||||
let isOfficial: Bool
|
let isOfficial: Bool
|
||||||
|
|
||||||
private enum CodingKeys: String, CodingKey {
|
private enum CodingKeys: String, CodingKey {
|
||||||
@ -187,6 +188,7 @@ struct ChatProfile: Decodable {
|
|||||||
case permissions
|
case permissions
|
||||||
case profilePermissions
|
case profilePermissions
|
||||||
case relationship
|
case relationship
|
||||||
|
case rating
|
||||||
case isOfficial
|
case isOfficial
|
||||||
case isVerified
|
case isVerified
|
||||||
}
|
}
|
||||||
@ -205,12 +207,43 @@ struct ChatProfile: Decodable {
|
|||||||
self.permissions = try container.decodeIfPresent(ChatPermissions.self, forKey: .permissions)
|
self.permissions = try container.decodeIfPresent(ChatPermissions.self, forKey: .permissions)
|
||||||
self.profilePermissions = try container.decodeIfPresent(ChatProfilePermissions.self, forKey: .profilePermissions)
|
self.profilePermissions = try container.decodeIfPresent(ChatProfilePermissions.self, forKey: .profilePermissions)
|
||||||
self.relationship = try container.decodeIfPresent(RelationshipStatus.self, forKey: .relationship)
|
self.relationship = try container.decodeIfPresent(RelationshipStatus.self, forKey: .relationship)
|
||||||
|
let ratingPayload = try container.decodeIfPresent(ChatProfileRatingPayload.self, forKey: .rating)
|
||||||
|
self.rating = ratingPayload?.resolvedRating
|
||||||
let explicitOfficial = try container.decodeIfPresent(Bool.self, forKey: .isOfficial)
|
let explicitOfficial = try container.decodeIfPresent(Bool.self, forKey: .isOfficial)
|
||||||
let verifiedFlag = try container.decodeIfPresent(Bool.self, forKey: .isVerified)
|
let verifiedFlag = try container.decodeIfPresent(Bool.self, forKey: .isVerified)
|
||||||
self.isOfficial = explicitOfficial ?? verifiedFlag ?? false
|
self.isOfficial = explicitOfficial ?? verifiedFlag ?? false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private struct ChatProfileRatingPayload: Decodable {
|
||||||
|
let status: String?
|
||||||
|
let rating: Int?
|
||||||
|
|
||||||
|
private enum CodingKeys: String, CodingKey {
|
||||||
|
case rating
|
||||||
|
case status
|
||||||
|
}
|
||||||
|
|
||||||
|
init(from decoder: Decoder) throws {
|
||||||
|
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||||
|
status = try container.decodeIfPresent(String.self, forKey: .status)
|
||||||
|
|
||||||
|
if let intValue = try? container.decode(Int.self, forKey: .rating) {
|
||||||
|
rating = intValue
|
||||||
|
} else if let stringValue = try? container.decode(String.self, forKey: .rating),
|
||||||
|
let intValue = Int(stringValue) {
|
||||||
|
rating = intValue
|
||||||
|
} else {
|
||||||
|
rating = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var resolvedRating: Int? {
|
||||||
|
guard status?.lowercased() == "fine" else { return nil }
|
||||||
|
return rating
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
extension ChatProfile {
|
extension ChatProfile {
|
||||||
init(
|
init(
|
||||||
userId: String,
|
userId: String,
|
||||||
@ -225,6 +258,7 @@ extension ChatProfile {
|
|||||||
permissions: ChatPermissions? = nil,
|
permissions: ChatPermissions? = nil,
|
||||||
profilePermissions: ChatProfilePermissions? = nil,
|
profilePermissions: ChatProfilePermissions? = nil,
|
||||||
relationship: RelationshipStatus? = nil,
|
relationship: RelationshipStatus? = nil,
|
||||||
|
rating: Int? = nil,
|
||||||
isOfficial: Bool = false
|
isOfficial: Bool = false
|
||||||
) {
|
) {
|
||||||
self.userId = userId
|
self.userId = userId
|
||||||
@ -239,6 +273,7 @@ extension ChatProfile {
|
|||||||
self.permissions = permissions
|
self.permissions = permissions
|
||||||
self.profilePermissions = profilePermissions
|
self.profilePermissions = profilePermissions
|
||||||
self.relationship = relationship
|
self.relationship = relationship
|
||||||
|
self.rating = rating
|
||||||
self.isOfficial = isOfficial
|
self.isOfficial = isOfficial
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -43,6 +43,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"%d из 5" : {
|
||||||
|
"comment" : "Message profile rating format"
|
||||||
|
},
|
||||||
"%d символов" : {
|
"%d символов" : {
|
||||||
"comment" : "feedback: character count",
|
"comment" : "feedback: character count",
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
@ -1497,6 +1500,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"Недоступно" : {
|
||||||
|
"comment" : "Message profile rating unavailable"
|
||||||
|
},
|
||||||
"Неизвестная ошибка" : {
|
"Неизвестная ошибка" : {
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
"en" : {
|
"en" : {
|
||||||
@ -2546,6 +2552,9 @@
|
|||||||
},
|
},
|
||||||
"Режим мессенжера" : {
|
"Режим мессенжера" : {
|
||||||
|
|
||||||
|
},
|
||||||
|
"Рейтинг собеседника" : {
|
||||||
|
"comment" : "Message profile rating title"
|
||||||
},
|
},
|
||||||
"Сборка:" : {
|
"Сборка:" : {
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
|
|||||||
@ -245,6 +245,15 @@ struct MessageProfileView: View {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if loginDisplay != nil || membershipDescription != nil {
|
||||||
|
rowDivider
|
||||||
|
}
|
||||||
|
|
||||||
|
infoRow(
|
||||||
|
title: NSLocalizedString("Рейтинг собеседника", comment: "Message profile rating title"),
|
||||||
|
value: ratingDisplayValue
|
||||||
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -616,6 +625,18 @@ struct MessageProfileView: View {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var ratingDisplayValue: String {
|
||||||
|
guard let rating = chat.chatData?.rating else {
|
||||||
|
return NSLocalizedString("Недоступно", comment: "Message profile rating unavailable")
|
||||||
|
}
|
||||||
|
|
||||||
|
let safeRating = max(0, min(5, rating))
|
||||||
|
return String(
|
||||||
|
format: NSLocalizedString("%d из 5", comment: "Message profile rating format"),
|
||||||
|
safeRating
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
private var chatTypeDescription: String {
|
private var chatTypeDescription: String {
|
||||||
switch chat.chatType {
|
switch chat.chatType {
|
||||||
case .self:
|
case .self:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user