From 64fc1867c4e909e5df70e5cf457c5b062ab2ed74 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sun, 16 Jun 2024 13:02:16 -0700 Subject: [PATCH] =?UTF-8?q?Get=20rid=20of=20maxInterval=20from=20Coalescin?= =?UTF-8?q?gQueue=20because=20it=20didn=E2=80=99t=20actually=20work=20righ?= =?UTF-8?q?t=20and=20isn=E2=80=99t=20probably=20needed.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Core/Sources/Core/CoalescingQueue.swift | 24 +++++++++++-------- Core/Sources/Core/DataFile.swift | 2 +- .../Timeline/TimelineViewController.swift | 2 +- Shared/SmartFeeds/SmartFeed.swift | 2 +- iOS/Article/WebViewController.swift | 2 +- iOS/Timeline/TimelineViewController.swift | 2 +- 6 files changed, 19 insertions(+), 15 deletions(-) diff --git a/Core/Sources/Core/CoalescingQueue.swift b/Core/Sources/Core/CoalescingQueue.swift index cdcf01924..105472006 100644 --- a/Core/Sources/Core/CoalescingQueue.swift +++ b/Core/Sources/Core/CoalescingQueue.swift @@ -7,6 +7,7 @@ // import Foundation +import os // Use when you want to coalesce calls for something like updating visible table cells. // Calls are uniqued. If you add a call with the same target and selector as a previous call, you’ll just get one call. @@ -32,31 +33,32 @@ struct QueueCall: Equatable { @MainActor @objc public final class CoalescingQueue: NSObject { - @MainActor public static let standard = CoalescingQueue(name: "Standard", interval: 0.05, maxInterval: 0.1) + @MainActor public static let standard = CoalescingQueue(name: "Standard", interval: 0.05) public let name: String - public var isPaused = false private let interval: TimeInterval - private let maxInterval: TimeInterval private var lastCallTime = Date.distantFuture private var timer: Timer? = nil private var calls = [QueueCall]() - public init(name: String, interval: TimeInterval = 0.05, maxInterval: TimeInterval = 2.0) { + private static let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "CoalescingQueue") + private var logger: Logger { + Self.logger + } + + public init(name: String, interval: TimeInterval = 0.05) { self.name = name self.interval = interval - self.maxInterval = maxInterval } public func add(_ target: AnyObject, _ selector: Selector) { let queueCall = QueueCall(target: target, selector: selector) add(queueCall) - if Date().timeIntervalSince1970 - lastCallTime.timeIntervalSince1970 > maxInterval { - timerDidFire(nil) - } } public func performCallsImmediately() { - guard !isPaused else { return } + + logger.info("CoalescingQueue performing calls: \(self.name)") + let callsToMake = calls // Make a copy in case calls are added to the queue while performing calls. resetCalls() for call in callsToMake { @@ -68,12 +70,14 @@ struct QueueCall: Equatable { lastCallTime = Date() performCallsImmediately() } - } private extension CoalescingQueue { func add(_ call: QueueCall) { + + logger.info("CoalescingQueue adding to queue: \(self.name)") + restartTimer() if !calls.contains(call) { diff --git a/Core/Sources/Core/DataFile.swift b/Core/Sources/Core/DataFile.swift index 7033fe3cb..04d1e9f4d 100644 --- a/Core/Sources/Core/DataFile.swift +++ b/Core/Sources/Core/DataFile.swift @@ -37,7 +37,7 @@ public protocol DataFileDelegate: AnyObject { public init(fileURL: URL) { self.fileURL = fileURL - self.saveQueue = CoalescingQueue(name: "DataFile \(fileURL.absoluteString)", interval: 1.0, maxInterval: 2.0) + self.saveQueue = CoalescingQueue(name: "DataFile \(fileURL.absoluteString)", interval: 1.0) } public func markAsDirty() { diff --git a/Mac/MainWindow/Timeline/TimelineViewController.swift b/Mac/MainWindow/Timeline/TimelineViewController.swift index dc6689d95..ee5811b8a 100644 --- a/Mac/MainWindow/Timeline/TimelineViewController.swift +++ b/Mac/MainWindow/Timeline/TimelineViewController.swift @@ -163,7 +163,7 @@ final class TimelineViewController: NSViewController, UndoableCommandRunner, Unr private var currentRowHeight: CGFloat = 0.0 private var didRegisterForNotifications = false - static let fetchAndMergeArticlesQueue = CoalescingQueue(name: "Fetch and Merge Articles", interval: 0.5, maxInterval: 2.0) + static let fetchAndMergeArticlesQueue = CoalescingQueue(name: "Fetch and Merge Articles", interval: 0.5) private var sortDirection = AppDefaults.shared.timelineSortDirection { didSet { diff --git a/Shared/SmartFeeds/SmartFeed.swift b/Shared/SmartFeeds/SmartFeed.swift index 53395d3e1..775269842 100644 --- a/Shared/SmartFeeds/SmartFeed.swift +++ b/Shared/SmartFeeds/SmartFeed.swift @@ -48,7 +48,7 @@ import Images } #endif - private let fetchUnreadCountsQueue = CoalescingQueue(name: "SmartFeed", interval: 1.0, maxInterval: 2.0) + private let fetchUnreadCountsQueue = CoalescingQueue(name: "SmartFeed", interval: 1.0) private var fetchUnreadCountsTask: Task? private let delegate: SmartFeedDelegate diff --git a/iOS/Article/WebViewController.swift b/iOS/Article/WebViewController.swift index 38f43333e..15eb82215 100644 --- a/iOS/Article/WebViewController.swift +++ b/iOS/Article/WebViewController.swift @@ -65,7 +65,7 @@ final class WebViewController: UIViewController { private(set) var article: Article? - let scrollPositionQueue = CoalescingQueue(name: "Article Scroll Position", interval: 0.3, maxInterval: 0.3) + let scrollPositionQueue = CoalescingQueue(name: "Article Scroll Position", interval: 0.3) var windowScrollY = 0 private var restoreWindowScrollY: Int? diff --git a/iOS/Timeline/TimelineViewController.swift b/iOS/Timeline/TimelineViewController.swift index 6df60e58e..aea5b0295 100644 --- a/iOS/Timeline/TimelineViewController.swift +++ b/iOS/Timeline/TimelineViewController.swift @@ -31,7 +31,7 @@ class TimelineViewController: UITableViewController, UndoableCommandRunner { weak var coordinator: SceneCoordinator! var undoableCommands = [UndoableCommand]() - let scrollPositionQueue = CoalescingQueue(name: "Timeline Scroll Position", interval: 0.3, maxInterval: 1.0) + let scrollPositionQueue = CoalescingQueue(name: "Timeline Scroll Position", interval: 0.3) private let keyboardManager = KeyboardManager(type: .timeline) override var keyCommands: [UIKeyCommand]? {