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 {