From 0d4a58e2abeb85679ec8e97369f20d3641c7496b Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sat, 6 Jan 2018 12:12:31 -0800 Subject: [PATCH] Create and use an NSTableView extension method: indexesOfAvailableRowsPassingTest. --- .../Timeline/TimelineViewController.swift | 13 +++++++------ .../RSCore/RSCore/NSTableView+Extensions.swift | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/Evergreen/MainWindow/Timeline/TimelineViewController.swift b/Evergreen/MainWindow/Timeline/TimelineViewController.swift index da017e45f..818c31e54 100644 --- a/Evergreen/MainWindow/Timeline/TimelineViewController.swift +++ b/Evergreen/MainWindow/Timeline/TimelineViewController.swift @@ -331,19 +331,20 @@ class TimelineViewController: NSViewController, UndoableCommandRunner { return } - var indexes = IndexSet() - tableView.enumerateAvailableRowViews { (rowView, row) in + let indexesToReload = tableView.indexesOfAvailableRowsPassingTest { (row) -> Bool in guard let article = articles.articleAtRow(row), let authors = article.authors, !authors.isEmpty else { - return + return false } for author in authors { if author.avatarURL == avatarURL { - indexes.insert(row) - return + return true } } + return false + } + if let indexesToReload = indexesToReload { + reloadCells(for: indexesToReload) } - reloadCells(for: indexes) } func fontSizeInDefaultsDidChange() { diff --git a/Frameworks/RSCore/RSCore/NSTableView+Extensions.swift b/Frameworks/RSCore/RSCore/NSTableView+Extensions.swift index 6a0e3d520..5c7304626 100755 --- a/Frameworks/RSCore/RSCore/NSTableView+Extensions.swift +++ b/Frameworks/RSCore/RSCore/NSTableView+Extensions.swift @@ -16,6 +16,20 @@ public extension NSTableView { } } + func indexesOfAvailableRowsPassingTest(_ test: (Int) -> Bool) -> IndexSet? { + + // Checks visible and in-flight rows. + + var indexes = IndexSet() + enumerateAvailableRowViews { (_, row) in + if test(row) { + indexes.insert(row) + } + } + + return indexes.isEmpty ? nil : indexes + } + func scrollTo(row: Int) { guard let scrollView = self.enclosingScrollView else {