mirror of
https://github.com/Ranchero-Software/NetNewsWire.git
synced 2024-12-22 23:58:36 +01:00
114 lines
2.5 KiB
Swift
114 lines
2.5 KiB
Swift
//
|
|
// AddFolderWindowController.swift
|
|
// NetNewsWire
|
|
//
|
|
// Created by Brent Simmons on 8/1/15.
|
|
// Copyright © 2015 Ranchero Software, LLC. All rights reserved.
|
|
//
|
|
|
|
import AppKit
|
|
import Articles
|
|
import Account
|
|
|
|
final class AddFolderWindowController : NSWindowController {
|
|
|
|
@IBOutlet var folderNameTextField: NSTextField!
|
|
@IBOutlet var accountPopupButton: NSPopUpButton!
|
|
@IBOutlet var addFolderButton: NSButton!
|
|
private var hostWindow: NSWindow?
|
|
|
|
convenience init() {
|
|
self.init(windowNibName: NSNib.Name("AddFolderSheet"))
|
|
}
|
|
|
|
// MARK: - API
|
|
|
|
func runSheetOnWindow(_ w: NSWindow) {
|
|
hostWindow = w
|
|
|
|
Task { @MainActor in
|
|
let returnCode = await hostWindow!.beginSheet(window!)
|
|
if returnCode == .OK {
|
|
self.addFolderIfNeeded()
|
|
}
|
|
}
|
|
}
|
|
|
|
// MARK: - NSViewController
|
|
|
|
override func windowDidLoad() {
|
|
let preferredAccountID = AppDefaults.shared.addFolderAccountID
|
|
accountPopupButton.removeAllItems()
|
|
|
|
let menu = NSMenu()
|
|
accountPopupButton.menu = menu
|
|
|
|
let accounts = AccountManager.shared
|
|
.sortedActiveAccounts
|
|
.filter { !$0.behaviors.contains(.disallowFolderManagement) }
|
|
|
|
for oneAccount in accounts {
|
|
|
|
let oneMenuItem = NSMenuItem()
|
|
oneMenuItem.title = oneAccount.nameForDisplay
|
|
oneMenuItem.representedObject = oneAccount
|
|
menu.addItem(oneMenuItem)
|
|
|
|
if oneAccount.accountID == preferredAccountID {
|
|
accountPopupButton.select(oneMenuItem)
|
|
}
|
|
}
|
|
}
|
|
|
|
// MARK: - Actions
|
|
|
|
@IBAction func cancel(_ sender: Any?) {
|
|
hostWindow!.endSheet(window!, returnCode: .cancel)
|
|
}
|
|
|
|
@IBAction func addFolder(_ sender: Any?) {
|
|
hostWindow!.endSheet(window!, returnCode: .OK)
|
|
}
|
|
}
|
|
|
|
// MARK: - Text Field Delegate
|
|
|
|
extension AddFolderWindowController: NSTextFieldDelegate {
|
|
|
|
func controlTextDidChange(_ obj: Notification) {
|
|
guard let folderName = (obj.object as? NSTextField)?.stringValue else {
|
|
addFolderButton.isEnabled = false
|
|
return
|
|
}
|
|
addFolderButton.isEnabled = !folderName.isEmpty
|
|
}
|
|
}
|
|
|
|
// MARK: - Private
|
|
|
|
private extension AddFolderWindowController {
|
|
|
|
private func addFolderIfNeeded() {
|
|
|
|
guard let menuItem = accountPopupButton.selectedItem else {
|
|
return
|
|
}
|
|
|
|
let account = menuItem.representedObject as! Account
|
|
AppDefaults.shared.addFolderAccountID = account.accountID
|
|
|
|
let folderName = self.folderNameTextField.stringValue
|
|
if folderName.isEmpty {
|
|
return
|
|
}
|
|
|
|
Task { @MainActor in
|
|
do {
|
|
_ = try await account.addFolder(folderName)
|
|
} catch {
|
|
NSApplication.shared.presentError(error)
|
|
}
|
|
}
|
|
}
|
|
}
|