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):