2 // ScreenshotInformation.swift
5 // Created by Hori,Masaki on 2017/01/28.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 final class ScreenshotModel: NSObject {
13 @objc dynamic var screenshots: [ScreenshotInformation] = []
14 @objc dynamic var sortDescriptors: [NSSortDescriptor]?
15 @objc dynamic var selectedIndexes: IndexSet?
16 @objc dynamic var filterPredicate: NSPredicate?
19 final class ScreenshotInformation: NSObject, NSCoding {
23 @objc lazy var image: NSImage? = {
25 guard let image = NSImage(contentsOf: url) else {
27 Logger.shared.log("Can not load image")
35 @objc var creationDate: Date? {
37 let attr = try? url.resourceValues(forKeys: [.creationDateKey])
39 return attr?.creationDate
42 @objc var tags: [String]? {
46 let attr = try? url.resourceValues(forKeys: [.tagNamesKey])
53 let url = self.url as NSURL
56 if let array = newValue {
58 try url.setResourceValue(array as NSArray, forKey: .tagNamesKey)
62 try url.setResourceValue([] as NSArray, forKey: .tagNamesKey)
67 print("Can not set tagNames")
72 private(set) var version: Int
74 init(url: URL, version: Int = 0) {
77 self.version = version
82 func incrementVersion() { version = version + 1 }
87 static let url = "Url"
90 required convenience init?(coder aDecoder: NSCoder) {
92 guard let u = aDecoder.decodeObject(forKey: CodingKey.url) as? URL else {
100 func encode(with aCoder: NSCoder) {
102 aCoder.encode(url, forKey: CodingKey.url)
106 private let dateFormatter: DateFormatter = {
108 let f = DateFormatter()
111 f.doesRelativeDateFormatting = true
116 extension ScreenshotInformation {
118 @objc var name: String? {
120 let attr = try? url.resourceValues(forKeys: [.localizedNameKey])
122 return attr?.localizedName
125 @objc var creationDateString: String? {
127 return creationDate.map(dateFormatter.string(from:))