From 48ceb655d651bad52e0946f8fc7023c3155af269 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Thu, 7 May 2020 02:17:01 -0500 Subject: [PATCH] Decode Twitter and Reddit on a background queue. --- .../Reddit/RedditFeedProvider.swift | 19 +++++++----- .../Twitter/TwitterFeedProvider.swift | 30 +++++++++++-------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/Frameworks/Account/FeedProvider/Reddit/RedditFeedProvider.swift b/Frameworks/Account/FeedProvider/Reddit/RedditFeedProvider.swift index 646cc72ae..dda9c87b9 100644 --- a/Frameworks/Account/FeedProvider/Reddit/RedditFeedProvider.swift +++ b/Frameworks/Account/FeedProvider/Reddit/RedditFeedProvider.swift @@ -253,13 +253,18 @@ private extension RedditFeedProvider { self.rateLimitReset = Date(timeIntervalSinceNow: Double(reset) ?? 0) } - let decoder = JSONDecoder() - - do { - let result = try decoder.decode(resultType, from: response.data) - completion(.success(result)) - } catch { - completion(.failure(error)) + DispatchQueue.global(qos: .background).async { + let decoder = JSONDecoder() + do { + let result = try decoder.decode(resultType, from: response.data) + DispatchQueue.main.async { + completion(.success(result)) + } + } catch { + DispatchQueue.main.async { + completion(.failure(error)) + } + } } case .failure(let oathError): diff --git a/Frameworks/Account/FeedProvider/Twitter/TwitterFeedProvider.swift b/Frameworks/Account/FeedProvider/Twitter/TwitterFeedProvider.swift index fbcb8e9eb..abce8d951 100644 --- a/Frameworks/Account/FeedProvider/Twitter/TwitterFeedProvider.swift +++ b/Frameworks/Account/FeedProvider/Twitter/TwitterFeedProvider.swift @@ -359,21 +359,27 @@ private extension TwitterFeedProvider { self.rateLimitReset = Date(timeIntervalSince1970: Double(reset) ?? 0) } - do { - let tweets: [TwitterStatus] - if isSearch { - let searchResult = try decoder.decode(TwitterSearchResult.self, from: response.data) - if let statuses = searchResult.statuses { - tweets = statuses + DispatchQueue.global(qos: .background).async { + do { + let tweets: [TwitterStatus] + if isSearch { + let searchResult = try decoder.decode(TwitterSearchResult.self, from: response.data) + if let statuses = searchResult.statuses { + tweets = statuses + } else { + tweets = [TwitterStatus]() + } } else { - tweets = [TwitterStatus]() + tweets = try decoder.decode([TwitterStatus].self, from: response.data) + } + DispatchQueue.main.async { + completion(.success(tweets)) + } + } catch { + DispatchQueue.main.async { + completion(.failure(error)) } - } else { - tweets = try decoder.decode([TwitterStatus].self, from: response.data) } - completion(.success(tweets)) - } catch { - completion(.failure(error)) } case .failure(let error):