@@ -236,122 +236,124 @@ public class RemoteBlogSettings: NSObject {
236
236
237
237
/// Parses details from a JSON dictionary, as returned by the WordPress.com REST API.
238
238
@objc
239
- public init ( jsonDictionary json: NSDictionary ) {
240
- let rawSettings = json. object ( forKey : CodingKeys . settings. rawValue) as? NSDictionary ?? [ : ]
239
+ public init ( jsonDictionary json: [ String : Any ] ) {
240
+ let rawSettings = json [ CodingKeys . settings. rawValue] as? [ String : Any ] ?? [ : ]
241
241
242
- name = json. string ( forKey: CodingKeys . name. rawValue)
243
- tagline = json. string ( forKey: CodingKeys . tagline. rawValue)
244
- privacy = rawSettings. number ( forKey: CodingKeys . privacy. rawValue)
242
+ name = json [ CodingKeys . name. rawValue] as? String
243
+ tagline = json [ CodingKeys . tagline. rawValue] as? String
244
+ privacy = rawSettings [ CodingKeys . privacy. rawValue] as? NSNumber
245
+ // The value here can be a String, so we need a custom conversion
245
246
languageID = rawSettings. number ( forKey: CodingKeys . languageID. rawValue)
246
- iconMediaID = rawSettings. number ( forKey: CodingKeys . iconMediaID. rawValue)
247
+ iconMediaID = rawSettings [ CodingKeys . iconMediaID. rawValue] as? NSNumber
248
+ // The value here can be a String, so we need a custom conversion
247
249
gmtOffset = rawSettings. number ( forKey: CodingKeys . gmtOffset. rawValue)
248
- timezoneString = rawSettings. string ( forKey : CodingKeys . timezoneString. rawValue)
250
+ timezoneString = rawSettings [ CodingKeys . timezoneString. rawValue] as? String
249
251
250
- defaultCategoryID = rawSettings. number ( forKey : CodingKeys . defaultCategory. rawValue) ?? 1
251
- let defaultPostFormatValue = rawSettings. object ( forKey : CodingKeys . defaultPostFormat. rawValue)
252
+ defaultCategoryID = rawSettings [ CodingKeys . defaultCategory. rawValue] as? NSNumber ?? 1
253
+ let defaultPostFormatValue = rawSettings [ CodingKeys . defaultPostFormat. rawValue]
252
254
if let defaultPostFormatNumber = defaultPostFormatValue as? NSNumber , defaultPostFormatNumber == 0 ||
253
255
defaultPostFormatValue as? String == " 0 " {
254
256
defaultPostFormat = " standard "
255
257
} else {
256
- defaultPostFormat = rawSettings . string ( forKey : CodingKeys . defaultPostFormat . rawValue )
258
+ defaultPostFormat = defaultPostFormatValue as? String
257
259
}
258
- dateFormat = rawSettings. string ( forKey : CodingKeys . dateFormat. rawValue)
259
- timeFormat = rawSettings. string ( forKey : CodingKeys . timeFormat. rawValue)
260
- startOfWeek = rawSettings. string ( forKey : CodingKeys . startOfWeek. rawValue)
261
- postsPerPage = rawSettings. number ( forKey : CodingKeys . postsPerPage. rawValue)
262
-
263
- commentsAllowed = rawSettings. number ( forKey : CodingKeys . commentsAllowed. rawValue)
264
- commentsBlocklistKeys = rawSettings. string ( forKey : CodingKeys . commentsBlocklistKeys. rawValue)
265
- commentsCloseAutomatically = rawSettings. number ( forKey : CodingKeys . commentsCloseAutomatically. rawValue)
266
- commentsCloseAutomaticallyAfterDays = rawSettings. number ( forKey : CodingKeys . commentsCloseAutomaticallyAfterDays. rawValue)
267
- commentsFromKnownUsersAllowlisted = rawSettings. number ( forKey : CodingKeys . commentsKnownUsersAllowlist. rawValue)
268
- commentsMaximumLinks = rawSettings. number ( forKey : CodingKeys . commentsMaxLinks. rawValue)
269
- commentsModerationKeys = rawSettings. string ( forKey : CodingKeys . commentsModerationKeys. rawValue)
270
- commentsPagingEnabled = rawSettings. number ( forKey : CodingKeys . commentsPagingEnabled. rawValue)
271
- commentsPageSize = rawSettings. number ( forKey : CodingKeys . commentsPageSize. rawValue)
272
- commentsRequireManualModeration = rawSettings. number ( forKey : CodingKeys . commentsRequireModeration. rawValue)
273
- commentsRequireNameAndEmail = rawSettings. number ( forKey : CodingKeys . commentsRequireNameAndEmail. rawValue)
274
- commentsRequireRegistration = rawSettings. number ( forKey : CodingKeys . commentsRequireRegistration. rawValue)
275
- commentsSortOrder = rawSettings. string ( forKey : CodingKeys . commentsSortOrder. rawValue)
276
- commentsThreadingEnabled = rawSettings. number ( forKey : CodingKeys . commentsThreadingEnabled. rawValue)
277
- commentsThreadingDepth = rawSettings. number ( forKey : CodingKeys . commentsThreadingDepth. rawValue)
278
- pingbackOutboundEnabled = rawSettings. number ( forKey : CodingKeys . pingbackOutbound. rawValue)
279
- pingbackInboundEnabled = rawSettings. number ( forKey : CodingKeys . pingbackInbound. rawValue)
280
-
281
- relatedPostsAllowed = rawSettings. number ( forKey : CodingKeys . relatedPostsAllowed. rawValue)
282
- relatedPostsEnabled = rawSettings. number ( forKey : CodingKeys . relatedPostsEnabled. rawValue)
283
- relatedPostsShowHeadline = rawSettings. number ( forKey : CodingKeys . relatedPostsShowHeadline. rawValue)
284
- relatedPostsShowThumbnails = rawSettings. number ( forKey : CodingKeys . relatedPostsShowThumbnails. rawValue)
285
-
286
- ampSupported = rawSettings. number ( forKey : CodingKeys . ampSupported. rawValue)
287
- ampEnabled = rawSettings. number ( forKey : CodingKeys . ampEnabled. rawValue)
288
-
289
- sharingButtonStyle = rawSettings. string ( forKey : CodingKeys . sharingButtonStyle. rawValue)
290
- sharingLabel = rawSettings. string ( forKey : CodingKeys . sharingLabel. rawValue)
291
- sharingTwitterName = rawSettings. string ( forKey : CodingKeys . sharingTwitterName. rawValue)
292
- sharingCommentLikesEnabled = rawSettings. number ( forKey : CodingKeys . sharingCommentLikesEnabled. rawValue)
293
- sharingDisabledLikes = rawSettings. number ( forKey : CodingKeys . sharingDisabledLikes. rawValue)
294
- sharingDisabledReblogs = rawSettings. number ( forKey : CodingKeys . sharingDisabledReblogs. rawValue)
260
+ dateFormat = rawSettings [ CodingKeys . dateFormat. rawValue] as? String
261
+ timeFormat = rawSettings [ CodingKeys . timeFormat. rawValue] as? String
262
+ startOfWeek = rawSettings [ CodingKeys . startOfWeek. rawValue] as? String
263
+ postsPerPage = rawSettings [ CodingKeys . postsPerPage. rawValue] as? NSNumber
264
+
265
+ commentsAllowed = rawSettings [ CodingKeys . commentsAllowed. rawValue] as? NSNumber
266
+ commentsBlocklistKeys = rawSettings [ CodingKeys . commentsBlocklistKeys. rawValue] as? String
267
+ commentsCloseAutomatically = rawSettings [ CodingKeys . commentsCloseAutomatically. rawValue] as? NSNumber
268
+ commentsCloseAutomaticallyAfterDays = rawSettings [ CodingKeys . commentsCloseAutomaticallyAfterDays. rawValue] as? NSNumber
269
+ commentsFromKnownUsersAllowlisted = rawSettings [ CodingKeys . commentsKnownUsersAllowlist. rawValue] as? NSNumber
270
+ commentsMaximumLinks = rawSettings [ CodingKeys . commentsMaxLinks. rawValue] as? NSNumber
271
+ commentsModerationKeys = rawSettings [ CodingKeys . commentsModerationKeys. rawValue] as? String
272
+ commentsPagingEnabled = rawSettings [ CodingKeys . commentsPagingEnabled. rawValue] as? NSNumber
273
+ commentsPageSize = rawSettings [ CodingKeys . commentsPageSize. rawValue] as? NSNumber
274
+ commentsRequireManualModeration = rawSettings [ CodingKeys . commentsRequireModeration. rawValue] as? NSNumber
275
+ commentsRequireNameAndEmail = rawSettings [ CodingKeys . commentsRequireNameAndEmail. rawValue] as? NSNumber
276
+ commentsRequireRegistration = rawSettings [ CodingKeys . commentsRequireRegistration. rawValue] as? NSNumber
277
+ commentsSortOrder = rawSettings [ CodingKeys . commentsSortOrder. rawValue] as? String
278
+ commentsThreadingEnabled = rawSettings [ CodingKeys . commentsThreadingEnabled. rawValue] as? NSNumber
279
+ commentsThreadingDepth = rawSettings [ CodingKeys . commentsThreadingDepth. rawValue] as? NSNumber
280
+ pingbackOutboundEnabled = rawSettings [ CodingKeys . pingbackOutbound. rawValue] as? NSNumber
281
+ pingbackInboundEnabled = rawSettings [ CodingKeys . pingbackInbound. rawValue] as? NSNumber
282
+
283
+ relatedPostsAllowed = rawSettings [ CodingKeys . relatedPostsAllowed. rawValue] as? NSNumber
284
+ relatedPostsEnabled = rawSettings [ CodingKeys . relatedPostsEnabled. rawValue] as? NSNumber
285
+ relatedPostsShowHeadline = rawSettings [ CodingKeys . relatedPostsShowHeadline. rawValue] as? NSNumber
286
+ relatedPostsShowThumbnails = rawSettings [ CodingKeys . relatedPostsShowThumbnails. rawValue] as? NSNumber
287
+
288
+ ampSupported = rawSettings [ CodingKeys . ampSupported. rawValue] as? NSNumber
289
+ ampEnabled = rawSettings [ CodingKeys . ampEnabled. rawValue] as? NSNumber
290
+
291
+ sharingButtonStyle = rawSettings [ CodingKeys . sharingButtonStyle. rawValue] as? String
292
+ sharingLabel = rawSettings [ CodingKeys . sharingLabel. rawValue] as? String
293
+ sharingTwitterName = rawSettings [ CodingKeys . sharingTwitterName. rawValue] as? String
294
+ sharingCommentLikesEnabled = rawSettings [ CodingKeys . sharingCommentLikesEnabled. rawValue] as? NSNumber
295
+ sharingDisabledLikes = rawSettings [ CodingKeys . sharingDisabledLikes. rawValue] as? NSNumber
296
+ sharingDisabledReblogs = rawSettings [ CodingKeys . sharingDisabledReblogs. rawValue] as? NSNumber
295
297
}
296
298
297
299
@objc
298
- public var dictionaryRepresentation : NSDictionary {
299
- let parameters = NSMutableDictionary ( )
300
+ public var dictionaryRepresentation : [ String : Any ] {
301
+ var parameters : [ String : Any ] = [ : ]
300
302
301
303
// name and tagline/description use different keys...
302
- name . ifSome { parameters. setValue ( $0 , forKey : " blogname " ) }
303
- tagline . ifSome { parameters. setValue ( $0 , forKey : " blogdescription " ) }
304
-
305
- privacy . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . privacy. rawValue) }
306
- languageID . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . languageID. rawValue) }
307
- iconMediaID . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . iconMediaID. rawValue) }
308
- gmtOffset . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . gmtOffset. rawValue) }
309
- timezoneString . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . timezoneString. rawValue) }
310
-
311
- defaultCategoryID . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . defaultCategory. rawValue) }
312
- defaultPostFormat . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . defaultPostFormat. rawValue) }
313
- dateFormat . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . dateFormat. rawValue) }
314
- timeFormat . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . timeFormat. rawValue) }
315
- startOfWeek . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . startOfWeek. rawValue) }
316
- postsPerPage . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . postsPerPage. rawValue) }
317
-
318
- commentsAllowed . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . commentsAllowed. rawValue) }
319
- commentsBlocklistKeys . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . commentsBlocklistKeys. rawValue) }
320
- commentsCloseAutomatically . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . commentsCloseAutomatically. rawValue) }
321
- commentsCloseAutomaticallyAfterDays . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . commentsCloseAutomaticallyAfterDays. rawValue) }
322
- commentsFromKnownUsersAllowlisted . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . commentsKnownUsersAllowlist. rawValue) }
323
- commentsMaximumLinks . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . commentsMaxLinks. rawValue) }
324
- commentsModerationKeys . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . commentsModerationKeys. rawValue) }
325
- commentsPagingEnabled . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . commentsPagingEnabled. rawValue) }
326
- commentsPageSize . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . commentsPageSize. rawValue) }
327
- commentsRequireManualModeration . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . commentsRequireModeration. rawValue) }
328
- commentsRequireNameAndEmail . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . commentsRequireNameAndEmail. rawValue) }
329
- commentsRequireRegistration . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . commentsRequireRegistration. rawValue) }
330
- commentsSortOrder . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . commentsSortOrder. rawValue) }
331
- commentsThreadingEnabled . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . commentsThreadingEnabled. rawValue) }
332
- commentsThreadingDepth . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . commentsThreadingDepth. rawValue) }
333
-
334
- pingbackOutboundEnabled . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . pingbackOutbound. rawValue) }
335
- pingbackInboundEnabled . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . pingbackInbound. rawValue) }
304
+ parameters [ " blogname " ] = name
305
+ parameters [ " blogdescription " ] = tagline
306
+
307
+ parameters [ CodingKeys . privacy. rawValue] = privacy
308
+ parameters [ CodingKeys . languageID. rawValue] = languageID
309
+ parameters [ CodingKeys . iconMediaID. rawValue] = iconMediaID
310
+ parameters [ CodingKeys . gmtOffset. rawValue] = gmtOffset
311
+ parameters [ CodingKeys . timezoneString. rawValue] = timezoneString
312
+
313
+ parameters [ CodingKeys . defaultCategory. rawValue] = defaultCategoryID
314
+ parameters [ CodingKeys . defaultPostFormat. rawValue] = defaultPostFormat
315
+ parameters [ CodingKeys . dateFormat. rawValue] = dateFormat
316
+ parameters [ CodingKeys . timeFormat. rawValue] = timeFormat
317
+ parameters [ CodingKeys . startOfWeek. rawValue] = startOfWeek
318
+ parameters [ CodingKeys . postsPerPage. rawValue] = postsPerPage
319
+
320
+ parameters [ CodingKeys . commentsAllowed. rawValue] = commentsAllowed
321
+ parameters [ CodingKeys . commentsBlocklistKeys. rawValue] = commentsBlocklistKeys
322
+ parameters [ CodingKeys . commentsCloseAutomatically. rawValue] = commentsCloseAutomatically
323
+ parameters [ CodingKeys . commentsCloseAutomaticallyAfterDays. rawValue] = commentsCloseAutomaticallyAfterDays
324
+ parameters [ CodingKeys . commentsKnownUsersAllowlist. rawValue] = commentsFromKnownUsersAllowlisted
325
+ parameters [ CodingKeys . commentsMaxLinks. rawValue] = commentsMaximumLinks
326
+ parameters [ CodingKeys . commentsModerationKeys. rawValue] = commentsModerationKeys
327
+ parameters [ CodingKeys . commentsPagingEnabled. rawValue] = commentsPagingEnabled
328
+ parameters [ CodingKeys . commentsPageSize. rawValue] = commentsPageSize
329
+ parameters [ CodingKeys . commentsRequireModeration. rawValue] = commentsRequireManualModeration
330
+ parameters [ CodingKeys . commentsRequireNameAndEmail. rawValue] = commentsRequireNameAndEmail
331
+ parameters [ CodingKeys . commentsRequireRegistration. rawValue] = commentsRequireRegistration
332
+ parameters [ CodingKeys . commentsSortOrder. rawValue] = commentsSortOrder
333
+ parameters [ CodingKeys . commentsThreadingEnabled. rawValue] = commentsThreadingEnabled
334
+ parameters [ CodingKeys . commentsThreadingDepth. rawValue] = commentsThreadingDepth
335
+
336
+ parameters [ CodingKeys . pingbackOutbound. rawValue] = pingbackOutboundEnabled
337
+ parameters [ CodingKeys . pingbackInbound. rawValue] = pingbackInboundEnabled
336
338
337
339
// Note: releatedPostsAllowed was not set in the Objective-C implementation.
338
340
// There was no comment about it, so I assumed it was simply something that was never noticed.
339
- relatedPostsAllowed . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . relatedPostsAllowed. rawValue) }
340
- relatedPostsEnabled . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . relatedPostsEnabled. rawValue) }
341
- relatedPostsShowHeadline . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . relatedPostsShowHeadline. rawValue) }
342
- relatedPostsShowThumbnails . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . relatedPostsShowThumbnails. rawValue) }
341
+ parameters [ CodingKeys . relatedPostsAllowed. rawValue] = relatedPostsAllowed
342
+ parameters [ CodingKeys . relatedPostsEnabled. rawValue] = relatedPostsEnabled
343
+ parameters [ CodingKeys . relatedPostsShowHeadline. rawValue] = relatedPostsShowHeadline
344
+ parameters [ CodingKeys . relatedPostsShowThumbnails. rawValue] = relatedPostsShowThumbnails
343
345
344
346
// Note: ampSupported was not set in the Objective-C implementation.
345
347
// There was no comment about it, so I assumed it was simply something that was never noticed.
346
- ampSupported . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . ampSupported. rawValue) }
347
- ampEnabled . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . ampEnabled. rawValue) }
348
+ parameters [ CodingKeys . ampSupported. rawValue] = ampSupported
349
+ parameters [ CodingKeys . ampEnabled. rawValue] = ampEnabled
348
350
349
- sharingButtonStyle . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . sharingButtonStyle. rawValue) }
350
- sharingLabel . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . sharingLabel. rawValue) }
351
- sharingTwitterName . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . sharingTwitterName. rawValue) }
352
- sharingCommentLikesEnabled . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . sharingCommentLikesEnabled. rawValue) }
353
- sharingDisabledLikes . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . sharingDisabledLikes. rawValue) }
354
- sharingDisabledReblogs . ifSome { parameters. setValue ( $0 , forKey : CodingKeys . sharingDisabledReblogs. rawValue) }
351
+ parameters [ CodingKeys . sharingButtonStyle. rawValue] = sharingButtonStyle
352
+ parameters [ CodingKeys . sharingLabel. rawValue] = sharingLabel
353
+ parameters [ CodingKeys . sharingTwitterName. rawValue] = sharingTwitterName
354
+ parameters [ CodingKeys . sharingCommentLikesEnabled. rawValue] = sharingCommentLikesEnabled
355
+ parameters [ CodingKeys . sharingDisabledLikes. rawValue] = sharingDisabledLikes
356
+ parameters [ CodingKeys . sharingDisabledReblogs. rawValue] = sharingDisabledReblogs
355
357
356
358
return parameters
357
359
}
@@ -375,11 +377,19 @@ public class RemoteBlogSettings: NSObject {
375
377
private static let DescendingStringValue = " desc "
376
378
}
377
379
378
- private extension Optional {
380
+ extension Dictionary where Key == String {
379
381
380
- func ifSome ( _ body : ( Wrapped ) -> Void ) {
381
- guard case . some ( let value) = self else { return }
382
+ func number ( forKey key : String ) -> NSNumber ? {
383
+ guard let value = self [ key ] else { return . none }
382
384
383
- body ( value)
385
+ if let value = value as? NSNumber {
386
+ return value
387
+ } else if let value = value as? String {
388
+ let numberFormatter = NumberFormatter ( )
389
+ numberFormatter. numberStyle = . none
390
+ return numberFormatter. number ( from: value)
391
+ } else {
392
+ return . none
393
+ }
384
394
}
385
395
}
0 commit comments