From 65073d7346f57e980282d82851ffbcbfae4a835d Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Sun, 22 Nov 2020 17:22:38 +0800 Subject: [PATCH 1/2] TimelineProvider.swift Previews now use live data if it is available. --- Widget/TimelineProvider.swift | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/Widget/TimelineProvider.swift b/Widget/TimelineProvider.swift index 75cf023c7..8ca18dc5d 100644 --- a/Widget/TimelineProvider.swift +++ b/Widget/TimelineProvider.swift @@ -12,14 +12,23 @@ import SwiftUI struct Provider: TimelineProvider { func placeholder(in context: Context) -> WidgetTimelineEntry { - WidgetTimelineEntry(date: Date(), widgetData: WidgetDataDecoder.sampleData()) + do { + let data = try WidgetDataDecoder.decodeWidgetData() + return WidgetTimelineEntry(date: Date(), widgetData: data) + } catch { + return WidgetTimelineEntry(date: Date(), widgetData: WidgetDataDecoder.sampleData()) + } } func getSnapshot(in context: Context, completion: @escaping (WidgetTimelineEntry) -> Void) { if context.isPreview { - let entry = WidgetTimelineEntry(date: Date(), - widgetData: WidgetDataDecoder.sampleData()) - completion(entry) + do { + let data = try WidgetDataDecoder.decodeWidgetData() + completion(WidgetTimelineEntry(date: Date(), widgetData: data)) + } catch { + completion(WidgetTimelineEntry(date: Date(), + widgetData: WidgetDataDecoder.sampleData())) + } } else { do { let widgetData = try WidgetDataDecoder.decodeWidgetData() @@ -27,7 +36,7 @@ struct Provider: TimelineProvider { completion(entry) } catch { let entry = WidgetTimelineEntry(date: Date(), - widgetData: WidgetData(currentUnreadCount: 41, currentTodayCount: 40, currentStarredCount: 12, unreadArticles: [], starredArticles: [], todayArticles: [], lastUpdateTime: Date()) ) + widgetData: WidgetDataDecoder.sampleData()) completion(entry) } } From 92c3cd52aa28c51d53fff1e8430e7f71f10511d0 Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Sun, 22 Nov 2020 17:57:30 +0800 Subject: [PATCH 2/2] WidgetDataEncoder Removed unused taskIdentifier Added more logging Switched to FileManager for writing data files --- Shared/Widget/WidgetDataEncoder.swift | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Shared/Widget/WidgetDataEncoder.swift b/Shared/Widget/WidgetDataEncoder.swift index 7a88f3b24..ab24ee4b9 100644 --- a/Shared/Widget/WidgetDataEncoder.swift +++ b/Shared/Widget/WidgetDataEncoder.swift @@ -16,10 +16,8 @@ import Articles @available(iOS 14, *) struct WidgetDataEncoder { - static let taskIdentifier = "com.ranchero.NetNewsWire.WidgetEncode" - static func encodeWidgetData() { - os_log(.info, "Starting widget data encoding") + os_log(.debug, "Starting encoding widget data.") do { // Unread Articles let unreadArticles = try SmartFeedsController.shared.unreadFeed.fetchArticles().sorted(by: { $0.datePublished ?? .distantPast > $1.datePublished ?? .distantPast }) @@ -72,15 +70,18 @@ struct WidgetDataEncoder { lastUpdateTime: Date()) let encodedData = try JSONEncoder().encode(latestData) + os_log(.debug, "Finished encoding widget data.") let appGroup = Bundle.main.object(forInfoDictionaryKey: "AppGroup") as! String let containerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: appGroup) let dataURL = containerURL?.appendingPathComponent("widget-data.json") if FileManager.default.fileExists(atPath: dataURL!.path) { try FileManager.default.removeItem(at: dataURL!) + os_log(.debug, "Removed widget data from container.") + } + if FileManager.default.createFile(atPath: dataURL!.path, contents: encodedData, attributes: nil) { + os_log(.debug, "Wrote widget data to container.") + WidgetCenter.shared.reloadAllTimelines() } - try encodedData.write(to: dataURL!) - WidgetCenter.shared.reloadAllTimelines() - os_log(.info, "Finished encoding widget data") } catch { os_log(.error, "%@", error.localizedDescription) }