Prototype

This commit is contained in:
Bryan Culver
2022-09-26 07:03:14 -04:00
parent f930eca9bb
commit b7a358c986
3 changed files with 75 additions and 12 deletions

View File

@@ -211,7 +211,13 @@ private extension SidebarViewController {
let menu = NSMenu(title: "")
if webFeed.unreadCount > 0 {
menu.addItem(markAllReadMenuItem([webFeed]))
// menu.addItem(markAllReadMenuItem([webFeed]))
let catchUpMenuItem = catchUpMenuItem([webFeed])
let catchUpSubMenu = catchUpSubMenu([webFeed])
menu.addItem(catchUpMenuItem)
menu.setSubmenu(catchUpSubMenu, for: catchUpMenuItem)
menu.addItem(NSMenuItem.separator())
}
@@ -307,6 +313,27 @@ private extension SidebarViewController {
return menuItem(NSLocalizedString("Mark All as Read", comment: "Command"), #selector(markObjectsReadFromContextualMenu(_:)), objects)
}
func catchUpSubMenu(_ objects: [Any]) -> NSMenu {
let menu = NSMenu(title: "Catch up to articles older than...")
menu.addItem(menuItem(NSLocalizedString("All", comment: "Command"), #selector(markObjectsReadFromContextualMenu(_:)), objects))
menu.addItem(menuItem(NSLocalizedString("Older than 1 day", comment: "Command"), #selector(markObjectsReadFromContextualMenu(_:)), objects))
menu.addItem(menuItem(NSLocalizedString("Older than 2 days", comment: "Command"), #selector(markObjectsReadFromContextualMenu(_:)), objects))
menu.addItem(menuItem(NSLocalizedString("Older than 3 days", comment: "Command"), #selector(markObjectsReadFromContextualMenu(_:)), objects))
menu.addItem(menuItem(NSLocalizedString("Older than 1 week", comment: "Command"), #selector(markObjectsReadFromContextualMenu(_:)), objects))
menu.addItem(menuItem(NSLocalizedString("Older than 2 weeks", comment: "Command"), #selector(markObjectsReadFromContextualMenu(_:)), objects))
menu.addItem(menuItem(NSLocalizedString("Older than 1 month", comment: "Command"), #selector(markObjectsReadFromContextualMenu(_:)), objects))
menu.addItem(menuItem(NSLocalizedString("Older than 1 year", comment: "Command"), #selector(markObjectsReadFromContextualMenu(_:)), objects))
return menu
}
func catchUpMenuItem(_ objects: [Any]) -> NSMenuItem {
return menuItem(NSLocalizedString("Mark as Read...", comment: "Command"), #selector(markObjectsReadFromContextualMenu(_:)), objects)
}
func deleteMenuItem(_ objects: [Any]) -> NSMenuItem {

View File

@@ -905,8 +905,17 @@ private extension MasterFeedViewController {
menuElements.append(UIMenu(title: "", options: .displayInline, children: pageActions))
}
var markActions = [UIAction]()
if let markAllAction = self.markAllAsReadAction(indexPath: indexPath) {
menuElements.append(UIMenu(title: "", options: .displayInline, children: [markAllAction]))
markActions.append(markAllAction)
}
if let catchUpAction = self.catchUpAction(indexPath: indexPath) {
markActions.append(catchUpAction)
}
if !markActions.isEmpty {
menuElements.append(UIMenu(title: "", options: .displayInline, children: markActions))
}
if includeDeleteRename {
@@ -1139,6 +1148,26 @@ private extension MasterFeedViewController {
return action
}
func catchUpAction(indexPath: IndexPath) -> UIAction? {
guard let feed = coordinator.nodeFor(indexPath)?.representedObject as? Feed,
let contentView = self.tableView.cellForRow(at: indexPath)?.contentView,
feed.unreadCount > 0 else {
return nil
}
let localizedMenuText = NSLocalizedString("Catch Up in “%@”", comment: "Command")
let title = NSString.localizedStringWithFormat(localizedMenuText as NSString, feed.nameForDisplay) as String
let action = UIAction(title: title, image: AppAssets.markAllAsReadImage) { [weak self] action in
MarkAsReadAlertController.confirm(self, coordinator: self?.coordinator, confirmTitle: title, sourceType: contentView) { [weak self] in
if let articles = try? feed.fetchUnreadArticles() {
self?.coordinator.markAllAsRead(Array(articles))
}
}
}
return action
}
func markAllAsReadAction(account: Account, contentView: UIView?) -> UIAction? {
guard account.unreadCount > 0, let contentView = contentView else {
return nil

View File

@@ -46,23 +46,30 @@ struct MarkAsReadAlertController {
completion: @escaping (UIAlertAction) -> Void) -> UIAlertController where T: MarkAsReadAlertControllerSourceType {
let title = NSLocalizedString("Mark As Read", comment: "Mark As Read")
let message = NSLocalizedString("You can turn this confirmation off in Settings.",
comment: "You can turn this confirmation off in Settings.")
let title = NSLocalizedString("Mark as Read", comment: "Catch Up")
let message = NSLocalizedString("Mark articles as read older than",
comment: "Mark articles as read older than")
let cancelTitle = NSLocalizedString("Cancel", comment: "Cancel")
let settingsTitle = NSLocalizedString("Open Settings", comment: "Open Settings")
let alertController = UIAlertController(title: title, message: message, preferredStyle: .actionSheet)
let cancelAction = UIAlertAction(title: cancelTitle, style: .cancel) { _ in
cancelCompletion?()
}
let settingsAction = UIAlertAction(title: settingsTitle, style: .default) { _ in
coordinator.showSettings(scrollToArticlesSection: true)
}
let markAction = UIAlertAction(title: confirmTitle, style: .default, handler: completion)
let oneDayAction = UIAlertAction(title: "1 Day", style: .default, handler: completion)
let twoDaysAction = UIAlertAction(title: "2 Days", style: .default, handler: completion)
let threeDaysAction = UIAlertAction(title: "3 Days", style: .default, handler: completion)
let oneWeekAction = UIAlertAction(title: "1 Week", style: .default, handler: completion)
let twoWeeksAction = UIAlertAction(title: "2 Weeks", style: .default, handler: completion)
let oneMonthAction = UIAlertAction(title: "1 Month", style: .default, handler: completion)
let oneYearAction = UIAlertAction(title: "1 Year", style: .default, handler: completion)
alertController.addAction(markAction)
alertController.addAction(settingsAction)
alertController.addAction(oneDayAction)
alertController.addAction(twoDaysAction)
alertController.addAction(threeDaysAction)
alertController.addAction(oneWeekAction)
alertController.addAction(twoWeeksAction)
alertController.addAction(oneMonthAction)
alertController.addAction(oneYearAction)
alertController.addAction(cancelAction)
if let barButtonItem = sourceType as? UIBarButtonItem {