Skip to content

Commit

Permalink
Pre-sort download history for performance
Browse files Browse the repository at this point in the history
  • Loading branch information
Giorgio Calderolla committed Dec 1, 2016
1 parent 5f2e682 commit eeab94e
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions Sources/App/RecentsController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ class RecentsController: NSWindowController {
fileprivate let downloadDateFormatter = DateFormatter()
fileprivate let feedHelperProxy = FeedHelperProxy()

fileprivate var sortedHistory: [HistoryItem] = []

override func awakeFromNib() {
super.awakeFromNib()

Expand All @@ -22,11 +24,17 @@ class RecentsController: NSWindowController {
object: FeedChecker.shared,
queue: nil,
using: { [weak self] _ in
self?.table.reloadData()
self?.reloadHistory()
}
)
}

fileprivate func reloadHistory() {
// Keep a sorted copy of the download history, in reverse cronological order
sortedHistory = Defaults.shared.downloadHistory.sorted().reversed()
table.reloadData()
}

deinit {
NotificationCenter.default.removeObserver(self)
}
Expand All @@ -35,15 +43,15 @@ class RecentsController: NSWindowController {

extension RecentsController: NSTableViewDataSource {
func numberOfRows(in tableView: NSTableView) -> Int {
return Defaults.shared.downloadHistory.count
return sortedHistory.count
}
}


extension RecentsController: NSTableViewDelegate {
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
// Get the item to display, in reverse cronological order
let historyItem = Defaults.shared.downloadHistory.sorted().reversed()[row]
// Get the item to display
let historyItem = sortedHistory[row]

guard let cell = tableView.make(withIdentifier: "RecentCell", owner: self) as? RecentsCellView else {
return nil
Expand All @@ -65,7 +73,7 @@ extension RecentsController: NSTableViewDelegate {
// MARK: Actions
extension RecentsController {
@IBAction override func showWindow(_ sender: Any?) {
table.reloadData()
reloadHistory()
NSApp.activate(ignoringOtherApps: true)
super.showWindow(sender)
}
Expand Down

0 comments on commit eeab94e

Please sign in to comment.