From eae202a7ffd21c4bf5bf61ad1131969cf3b61cd3 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Fri, 26 Apr 2019 15:24:39 -0500 Subject: [PATCH] Enable refresh if none has happened in 15 minutes when application becomes active --- iOS/AppDefaults.swift | 10 ++++++++++ iOS/AppDelegate.swift | 16 +++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/iOS/AppDefaults.swift b/iOS/AppDefaults.swift index 8fdad87e4..db4f458cf 100644 --- a/iOS/AppDefaults.swift +++ b/iOS/AppDefaults.swift @@ -14,6 +14,7 @@ struct AppDefaults { static let firstRunDate = "firstRunDate" static let timelineSortDirection = "timelineSortDirection" static let refreshInterval = "refreshInterval" + static let lastRefresh = "lastRefresh" } static let isFirstRun: Bool = { @@ -43,6 +44,15 @@ struct AppDefaults { } } + static var lastRefresh: Date? { + get { + return date(for: Key.lastRefresh) + } + set { + setDate(for: Key.lastRefresh, newValue) + } + } + static func registerDefaults() { let defaults: [String : Any] = [Key.timelineSortDirection: ComparisonResult.orderedDescending.rawValue, Key.refreshInterval: RefreshInterval.everyHour.rawValue] UserDefaults.standard.register(defaults: defaults) diff --git a/iOS/AppDelegate.swift b/iOS/AppDelegate.swift index b93a78b8e..1a1bf4e87 100644 --- a/iOS/AppDelegate.swift +++ b/iOS/AppDelegate.swift @@ -43,6 +43,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDele appDelegate = self NotificationCenter.default.addObserver(self, selector: #selector(unreadCountDidChange(_:)), name: .UnreadCountDidChange, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(accountRefreshDidFinish(_:)), name: .AccountRefreshDidFinish, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(userDefaultsDidChange(_:)), name: UserDefaults.didChangeNotification, object: nil) // Reinitialize the shared state as early as possible @@ -131,7 +132,16 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDele } func applicationDidBecomeActive(_ application: UIApplication) { - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + + // If we haven't refreshed the database for 15 minutes, run a refresh automatically + if let lastRefresh = AppDefaults.lastRefresh { + if Date() > lastRefresh.addingTimeInterval(15 * 60) { + AccountManager.shared.refreshAll() + } + } else { + AccountManager.shared.refreshAll() + } + } func applicationWillTerminate(_ application: UIApplication) { @@ -204,6 +214,10 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDele UIApplication.shared.setMinimumBackgroundFetchInterval(AppDefaults.refreshInterval.inSeconds()) } + @objc func accountRefreshDidFinish(_ note: Notification) { + AppDefaults.lastRefresh = Date() + } + // MARK: - API func logMessage(_ message: String, type: LogItem.ItemType) {