Showing
1 changed file
with
14 additions
and
7 deletions
| ... | @@ -13,6 +13,13 @@ import Foundation | ... | @@ -13,6 +13,13 @@ import Foundation |
| 13 | public class CampaignItemModel { | 13 | public class CampaignItemModel { |
| 14 | public let index_url: String? | 14 | public let index_url: String? |
| 15 | public var logo_url: String? | 15 | public var logo_url: String? |
| 16 | + | ||
| 17 | + // MARK: - URL Cleaning Helper | ||
| 18 | + | ||
| 19 | + /// Cleans escaped forward slashes from URLs (e.g., "https:\/\/example.com" -> "https://example.com") | ||
| 20 | + private func cleanEscapedUrl(_ url: String?) -> String? { | ||
| 21 | + return url?.replacingOccurrences(of: "\\/", with: "/") | ||
| 22 | + } | ||
| 16 | public let offer_category: String? | 23 | public let offer_category: String? |
| 17 | public var title: String? | 24 | public var title: String? |
| 18 | public var subtitle: String? | 25 | public var subtitle: String? |
| ... | @@ -98,8 +105,8 @@ public class CampaignItemModel { | ... | @@ -98,8 +105,8 @@ public class CampaignItemModel { |
| 98 | } | 105 | } |
| 99 | 106 | ||
| 100 | public init(dictionary: [String: Any]) { | 107 | public init(dictionary: [String: Any]) { |
| 101 | - self.index_url = dictionary["index_url"] as? String? ?? "" | 108 | + self.index_url = cleanEscapedUrl(dictionary["index_url"] as? String? ?? "") |
| 102 | - self.logo_url = dictionary["logo_url"] as? String? ?? "" | 109 | + self.logo_url = cleanEscapedUrl(dictionary["logo_url"] as? String? ?? "") |
| 103 | self.offer_category = dictionary["communication_category"] as? String? ?? "" | 110 | self.offer_category = dictionary["communication_category"] as? String? ?? "" |
| 104 | self.title = dictionary["title"] as? String? ?? "" | 111 | self.title = dictionary["title"] as? String? ?? "" |
| 105 | self.subtitle = dictionary["subtitle"] as? String? ?? "" | 112 | self.subtitle = dictionary["subtitle"] as? String? ?? "" |
| ... | @@ -152,16 +159,16 @@ public class CampaignItemModel { | ... | @@ -152,16 +159,16 @@ public class CampaignItemModel { |
| 152 | self.type = extra_fields["type"] as? String? ?? "" | 159 | self.type = extra_fields["type"] as? String? ?? "" |
| 153 | self.carousel = extra_fields["carousel"] as? String? ?? "false" | 160 | self.carousel = extra_fields["carousel"] as? String? ?? "false" |
| 154 | self.category_title = extra_fields["category_title"] as? String ?? "" | 161 | self.category_title = extra_fields["category_title"] as? String ?? "" |
| 155 | - self.banner_img = extra_fields["Banner_img"] as? String ?? "" | 162 | + self.banner_img = cleanEscapedUrl(extra_fields["Banner_img"] as? String ?? "") |
| 156 | self.banner_title = extra_fields["Banner_title"] as? String ?? "" | 163 | self.banner_title = extra_fields["Banner_title"] as? String ?? "" |
| 157 | self.category_id = extra_fields["category_id"] as? String ?? "" | 164 | self.category_id = extra_fields["category_id"] as? String ?? "" |
| 158 | self.filter = extra_fields["filter"] as? String ?? "" | 165 | self.filter = extra_fields["filter"] as? String ?? "" |
| 159 | self.show_expiration = extra_fields["show_expiration"] as? String? ?? "false" | 166 | self.show_expiration = extra_fields["show_expiration"] as? String? ?? "false" |
| 160 | - self.coupon_img = extra_fields["coupon_img"] as? String? ?? "" | 167 | + self.coupon_img = cleanEscapedUrl(extra_fields["coupon_img"] as? String? ?? "") |
| 161 | 168 | ||
| 162 | - // Parse new extra_fields | 169 | + // Parse new extra_fields with URL cleaning |
| 163 | - self.campaign_url = extra_fields["campaign_url"] as? String? ?? "" | 170 | + self.campaign_url = cleanEscapedUrl(extra_fields["campaign_url"] as? String? ?? "") |
| 164 | - self.banner_img_mobile = extra_fields["banner_img_mobile"] as? String? ?? "" | 171 | + self.banner_img_mobile = cleanEscapedUrl(extra_fields["banner_img_mobile"] as? String? ?? "") |
| 165 | } else { | 172 | } else { |
| 166 | self.subcategory = "" | 173 | self.subcategory = "" |
| 167 | self.loyaltyCampaignId = "" | 174 | self.loyaltyCampaignId = "" | ... | ... |
-
Please register or login to post a comment