Allow non-string values in profiles
Profiles were not loading from other clients because some fields were not strings Changelog-Fixed: Fixed profiles sometimes not loading from other clients
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
import Foundation
|
||||
|
||||
struct Profile: Codable {
|
||||
var value: [String: String]
|
||||
var value: [String: AnyCodable]
|
||||
|
||||
init (name: String?, display_name: String?, about: String?, picture: String?, banner: String?, website: String?, lud06: String?, lud16: String?, nip05: String?) {
|
||||
self.value = [:]
|
||||
@@ -23,50 +23,71 @@ struct Profile: Codable {
|
||||
self.nip05 = nip05
|
||||
}
|
||||
|
||||
private func str(_ str: String) -> String? {
|
||||
guard let val = self.value[str] else{
|
||||
return nil
|
||||
}
|
||||
|
||||
guard let s = val.value as? String else {
|
||||
return nil
|
||||
}
|
||||
|
||||
return s
|
||||
}
|
||||
|
||||
private mutating func set_str(_ key: String, _ val: String?) {
|
||||
if val == nil {
|
||||
self.value.removeValue(forKey: key)
|
||||
return
|
||||
}
|
||||
|
||||
self.value[key] = AnyCodable.init(val)
|
||||
}
|
||||
|
||||
var display_name: String? {
|
||||
get { return value["display_name"]; }
|
||||
set(s) { value["display_name"] = s }
|
||||
get { return str("display_name"); }
|
||||
set(s) { set_str("display_name", s) }
|
||||
}
|
||||
|
||||
var name: String? {
|
||||
get { return value["name"]; }
|
||||
set(s) { value["name"] = s }
|
||||
get { return str("name"); }
|
||||
set(s) { set_str("name", s) }
|
||||
}
|
||||
|
||||
var about: String? {
|
||||
get { return value["about"]; }
|
||||
set(s) { value["about"] = s }
|
||||
get { return str("about"); }
|
||||
set(s) { set_str("about", s) }
|
||||
}
|
||||
|
||||
var picture: String? {
|
||||
get { return value["picture"]; }
|
||||
set(s) { value["picture"] = s }
|
||||
get { return str("picture"); }
|
||||
set(s) { set_str("picture", s) }
|
||||
}
|
||||
|
||||
var banner: String? {
|
||||
get { return value["banner"]; }
|
||||
set(s) { value["banner"] = s }
|
||||
get { return str("banner"); }
|
||||
set(s) { set_str("banner", s) }
|
||||
}
|
||||
|
||||
var website: String? {
|
||||
get { return value["website"]; }
|
||||
set(s) { value["website"] = s }
|
||||
get { return str("website"); }
|
||||
set(s) { set_str("website", s) }
|
||||
}
|
||||
|
||||
var lud06: String? {
|
||||
get { return str("lud06"); }
|
||||
set(s) { set_str("lud06", s) }
|
||||
}
|
||||
|
||||
var lud16: String? {
|
||||
get { return str("lud16"); }
|
||||
set(s) { set_str("lud16", s) }
|
||||
}
|
||||
|
||||
var website_url: URL? {
|
||||
return self.website.flatMap { URL(string: $0) }
|
||||
}
|
||||
|
||||
var lud06: String? {
|
||||
get { return value["lud06"]; }
|
||||
set(s) { value["lud06"] = s }
|
||||
}
|
||||
|
||||
var lud16: String? {
|
||||
get { return value["lud16"]; }
|
||||
set(s) { value["lud16"] = s }
|
||||
}
|
||||
|
||||
var lnurl: String? {
|
||||
guard let addr = lud06 ?? lud16 else {
|
||||
return nil;
|
||||
@@ -80,8 +101,8 @@ struct Profile: Codable {
|
||||
}
|
||||
|
||||
var nip05: String? {
|
||||
get { return value["nip05"]; }
|
||||
set(s) { value["nip05"] = s }
|
||||
get { return str("nip05"); }
|
||||
set(s) { set_str("nip05", s) }
|
||||
}
|
||||
|
||||
var lightning_uri: URL? {
|
||||
@@ -90,7 +111,7 @@ struct Profile: Codable {
|
||||
|
||||
init(from decoder: Decoder) throws {
|
||||
let container = try decoder.singleValueContainer()
|
||||
self.value = try container.decode([String: String].self)
|
||||
self.value = try container.decode([String: AnyCodable].self)
|
||||
}
|
||||
|
||||
func encode(to encoder: Encoder) throws {
|
||||
|
||||
Reference in New Issue
Block a user