@@ -236,122 +236,124 @@ public class RemoteBlogSettings: NSObject {
236236
237237 /// Parses details from a JSON dictionary, as returned by the WordPress.com REST API.
238238 @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 ] ?? [ : ]
241241
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
245246 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
247249 gmtOffset = rawSettings. number ( forKey: CodingKeys . gmtOffset. rawValue)
248- timezoneString = rawSettings. string ( forKey : CodingKeys . timezoneString. rawValue)
250+ timezoneString = rawSettings [ CodingKeys . timezoneString. rawValue] as? String
249251
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]
252254 if let defaultPostFormatNumber = defaultPostFormatValue as? NSNumber , defaultPostFormatNumber == 0 ||
253255 defaultPostFormatValue as? String == " 0 " {
254256 defaultPostFormat = " standard "
255257 } else {
256- defaultPostFormat = rawSettings . string ( forKey : CodingKeys . defaultPostFormat . rawValue )
258+ defaultPostFormat = defaultPostFormatValue as? String
257259 }
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
295297 }
296298
297299 @objc
298- public var dictionaryRepresentation : NSDictionary {
299- let parameters = NSMutableDictionary ( )
300+ public var dictionaryRepresentation : [ String : Any ] {
301+ var parameters : [ String : Any ] = [ : ]
300302
301303 // 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
336338
337339 // Note: releatedPostsAllowed was not set in the Objective-C implementation.
338340 // 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
343345
344346 // Note: ampSupported was not set in the Objective-C implementation.
345347 // 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
348350
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
355357
356358 return parameters
357359 }
@@ -375,11 +377,19 @@ public class RemoteBlogSettings: NSObject {
375377 private static let DescendingStringValue = " desc "
376378}
377379
378- private extension Optional {
380+ extension Dictionary where Key == String {
379381
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 }
382384
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+ }
384394 }
385395}
0 commit comments