diff --git a/App/Backend/History/BrowserHistory.swift b/App/Backend/History/BrowserHistory.swift index 34f56e3..e4d7557 100644 --- a/App/Backend/History/BrowserHistory.swift +++ b/App/Backend/History/BrowserHistory.swift @@ -86,7 +86,7 @@ class BrowserHistory } } - public func viewModel(forFilterString filterString: String? = nil, limit: Int? = nil) -> ViewModel { + public func viewModel(forFilterString filterString: String? = nil, limit: Int = 500) -> ViewModel { let resultsController = fetchRequestController(forQuery: filterString, limit: limit) return ViewModel(fetchedResultsController: resultsController, historyController: self) } @@ -107,7 +107,7 @@ class BrowserHistory } } - public func allHistory(filteredBy filterString: String? = nil, limit: Int? = nil) -> [HistoryItem] { + public func allHistory(filteredBy filterString: String? = nil, limit: Int = 500) -> [HistoryItem] { let dataContext = persistentContainer.viewContext let fetchRequest = fetchRequest(forStringContaining: filterString, limit: limit) let entities: [HistoryItemEntity] = (try? dataContext.fetch(fetchRequest)) ?? [] @@ -160,24 +160,21 @@ class BrowserHistory extension BrowserHistory { - fileprivate func fetchRequestController(forQuery query: String? = nil, limit: Int? = nil) -> NSFetchedResultsController { + fileprivate func fetchRequestController(forQuery query: String? = nil, limit: Int = 500) -> NSFetchedResultsController { let fetchRequest = fetchRequest(forStringContaining: query, limit: limit) return NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: persistentContainer.viewContext, sectionNameKeyPath: nil, cacheName: nil) } - fileprivate func fetchRequest(forStringContaining filterString: String? = nil, limit: Int? = nil) -> NSFetchRequest { + fileprivate func fetchRequest(forStringContaining filterString: String? = nil, limit: Int = 500) -> NSFetchRequest { let fetchRequest: NSFetchRequest = HistoryItemEntity.fetchRequest() + fetchRequest.fetchLimit = limit fetchRequest.sortDescriptors = [ // Sort by date NSSortDescriptor(keyPath: \HistoryItemEntity.lastVisited, ascending: false) ] - if let limit { - fetchRequest.fetchLimit = limit - } - if let filterString, filterString.count > 0 { fetchRequest.predicate = NSPredicate(format: """ host CONTAINS[cd] %@ diff --git a/App/Backend/History/HistoryItem.swift b/App/Backend/History/HistoryItem.swift index 7353fba..43a4310 100644 --- a/App/Backend/History/HistoryItem.swift +++ b/App/Backend/History/HistoryItem.swift @@ -5,6 +5,7 @@ // Created by James Magahern on 8/14/20. // +import CoreData import Foundation struct HistoryItem: Hashable, Identifiable diff --git a/App/Browser View/BrowserViewController.swift b/App/Browser View/BrowserViewController.swift index 83f1e61..693b68e 100644 --- a/App/Browser View/BrowserViewController.swift +++ b/App/Browser View/BrowserViewController.swift @@ -473,6 +473,7 @@ class BrowserViewController: UIViewController let historyViewController = HistoryBrowserViewController() historyViewController.title = "History" historyViewController.navigationItem.rightBarButtonItem = UIBarButtonItem(systemItem: .done, primaryAction: UIAction { _ in + // xxx: This is not the SwiftUI-y way to do this. historyViewController.dismiss(animated: true) }) diff --git a/App/History UI/HistoryView.swift b/App/History UI/HistoryView.swift index 1a6f41f..1f46110 100644 --- a/App/History UI/HistoryView.swift +++ b/App/History UI/HistoryView.swift @@ -19,16 +19,25 @@ struct HistoryView: View { } @Environment(\.dismiss) private var dismissAction - + @Environment(\.horizontalSizeClass) private var horizontalSizeClass + var body: some View { Table(viewModel.historyItems, selection: $selectedItems) { - TableColumn("Title", value: \.title) - - TableColumn("URL") { item in - Text(item.url.absoluteString) + TableColumn("Title") { item in + VStack(alignment: .leading) { + Text(item.title.count > 0 ? item.title : item.url.absoluteString) + .lineLimit(1) + + if horizontalSizeClass == .compact { + Text(item.url.shortString()).font(.caption).lineLimit(1) + Text(dateFormatter.string(from: item.lastVisited)) + .font(.caption) + .foregroundColor(.secondary) + } + } } - - TableColumn("Last Visited") { item in + TableColumn("URL", value: \.url.absoluteString) + TableColumn("Last Visited") { item in Text(dateFormatter.string(from: item.lastVisited)) } } @@ -61,3 +70,9 @@ struct HistoryViewPreviewProvider: PreviewProvider { } } +extension URL { + public func shortString() -> String { + return String(absoluteString.trimmingPrefix(try! Regex("(.+)://"))) + } +} +