NetNewsWire/Mac/Inspector/FolderInspectorViewController.swift

127 lines
2.7 KiB
Swift
Raw Normal View History

2018-01-21 06:48:27 +01:00
//
// FolderInspectorViewController.swift
2018-08-29 07:18:24 +02:00
// NetNewsWire
2018-01-21 06:48:27 +01:00
//
// Created by Brent Simmons on 1/20/18.
// Copyright © 2018 Ranchero Software. All rights reserved.
//
import AppKit
2018-01-21 07:36:17 +01:00
import Account
2018-01-21 06:48:27 +01:00
2024-03-20 07:05:30 +01:00
@MainActor final class FolderInspectorViewController: NSViewController, Inspector {
2018-01-21 06:48:27 +01:00
2018-01-22 06:24:25 +01:00
@IBOutlet var nameTextField: NSTextField?
@IBOutlet weak var folderImageView: NSImageView!
2018-01-22 06:24:25 +01:00
private var folder: Folder? {
didSet {
if folder != oldValue {
updateUI()
}
}
}
// MARK: Inspector
2018-01-21 07:36:17 +01:00
let isFallbackInspector = false
2018-01-22 06:24:25 +01:00
var objects: [Any]? {
didSet {
renameFolderIfNecessary()
2018-01-22 06:24:25 +01:00
updateFolder()
}
}
var windowTitle: String = NSLocalizedString("Folder Inspector", comment: "Folder Inspector window title")
2018-01-21 07:36:17 +01:00
func canInspect(_ objects: [Any]) -> Bool {
2018-01-22 06:24:25 +01:00
guard let _ = singleFolder(from: objects) else {
return false
}
return true
2018-01-21 07:36:17 +01:00
}
2018-01-22 06:24:25 +01:00
// MARK: NSViewController
2018-01-21 07:36:17 +01:00
2018-01-22 06:24:25 +01:00
override func viewDidLoad() {
updateUI()
let image = NSImage(systemSymbolName: "folder", accessibilityDescription: nil)!
folderImageView.image = image
folderImageView.contentTintColor = NSColor.controlAccentColor
NotificationCenter.default.addObserver(self, selector: #selector(displayNameDidChange(_:)), name: .DisplayNameDidChange, object: nil)
}
override func viewDidDisappear() {
renameFolderIfNecessary()
}
// MARK: Notifications
@objc func displayNameDidChange(_ note: Notification) {
guard let updatedFolder = note.object as? Folder, updatedFolder == folder else {
return
}
updateUI()
}
}
extension FolderInspectorViewController: NSTextFieldDelegate {
2019-05-06 17:53:20 +02:00
func controlTextDidEndEditing(_ obj: Notification) {
renameFolderIfNecessary()
2018-01-21 07:36:17 +01:00
}
2018-01-21 06:48:27 +01:00
}
2018-01-22 06:24:25 +01:00
private extension FolderInspectorViewController {
func singleFolder(from objects: [Any]?) -> Folder? {
guard let objects = objects, objects.count == 1, let singleFolder = objects.first as? Folder else {
return nil
}
return singleFolder
}
func updateFolder() {
folder = singleFolder(from: objects)
}
func updateUI() {
guard let nameTextField = nameTextField else {
return
}
2018-01-22 06:24:25 +01:00
let name = folder?.nameForDisplay ?? ""
if nameTextField.stringValue != name {
nameTextField.stringValue = name
}
windowTitle = folder?.nameForDisplay ?? NSLocalizedString("Folder Inspector", comment: "Folder Inspector window title")
}
func renameFolderIfNecessary() {
guard let folder = folder,
let account = folder.account,
let newName = nameTextField?.stringValue,
!newName.isEmpty,
folder.nameForDisplay != newName else {
return
}
Task {
do {
try await account.renameFolder(folder, to: newName)
self.windowTitle = folder.nameForDisplay
} catch {
self.presentError(error)
}
}
}
2018-01-22 06:24:25 +01:00
}