NetNewsWire/Mac/Scriptability/Article+Scriptability.swift

154 lines
3.3 KiB
Swift
Raw Normal View History

//
// Article+Scriptability.swift
2018-08-28 22:18:24 -07:00
// NetNewsWire
//
// Created by Olof Hellman on 1/23/18.
// Copyright © 2018 Olof Hellman. All rights reserved.
//
import Foundation
import Account
import Articles
@objc(ScriptableArticle)
class ScriptableArticle: NSObject, UniqueIdScriptingObject, ScriptingObjectContainer {
2025-01-22 22:17:02 -08:00
let article: Article
let container: ScriptingObjectContainer
init (_ article: Article, container: ScriptingObjectContainer) {
self.article = article
self.container = container
}
@objc(objectSpecifier)
override var objectSpecifier: NSScriptObjectSpecifier? {
2025-01-22 22:17:02 -08:00
let scriptObjectSpecifier = self.container.makeFormUniqueIDScriptObjectSpecifier(forObject: self)
return (scriptObjectSpecifier)
}
// MARK: --- ScriptingObject protocol ---
var scriptingKey: String {
return "articles"
}
// MARK: --- UniqueIdScriptingObject protocol ---
2018-08-28 22:18:24 -07:00
// articles have id in the NetNewsWire database and id in the feed
// article.uniqueID here is the feed unique id
@objc(uniqueId)
2025-01-22 22:17:02 -08:00
var scriptingUniqueId: Any {
return article.uniqueID
}
// MARK: --- ScriptingObjectContainer protocol ---
2025-01-22 22:17:02 -08:00
var scriptingClassDescription: NSScriptClassDescription {
return self.classDescription as! NSScriptClassDescription
}
2025-01-22 22:17:02 -08:00
func deleteElement(_ element: ScriptingObject) {
print("delete event not handled")
}
// MARK: --- Scriptable properties ---
2025-01-22 22:17:02 -08:00
@objc(url)
2025-01-22 22:17:02 -08:00
var url: String? {
return article.preferredLink
}
@objc(permalink)
2025-01-22 22:17:02 -08:00
var permalink: String? {
return article.link
}
@objc(externalUrl)
2025-01-22 22:17:02 -08:00
var externalUrl: String? {
return article.externalLink
}
2025-01-22 22:17:02 -08:00
@objc(title)
2025-01-22 22:17:02 -08:00
var title: String {
return article.title ?? ""
}
@objc(contents)
2025-01-22 22:17:02 -08:00
var contents: String {
return article.contentText ?? ""
}
@objc(html)
2025-01-22 22:17:02 -08:00
var html: String {
return article.contentHTML ?? ""
}
@objc(summary)
2025-01-22 22:17:02 -08:00
var summary: String {
return article.summary ?? ""
}
@objc(datePublished)
2025-01-22 22:17:02 -08:00
var datePublished: Date? {
return article.datePublished
}
@objc(dateModified)
2025-01-22 22:17:02 -08:00
var dateModified: Date? {
return article.dateModified
}
@objc(dateArrived)
2025-01-22 22:17:02 -08:00
var dateArrived: Date {
return article.status.dateArrived
}
@objc(read)
2025-01-22 22:17:02 -08:00
var read: Bool {
get {
2025-01-22 22:17:02 -08:00
return article.status.boolStatus(forKey: .read)
}
set {
markArticles([self.article], statusKey: .read, flag: newValue)
}
}
@objc(starred)
2025-01-22 22:17:02 -08:00
var starred: Bool {
get {
2025-01-22 22:17:02 -08:00
return article.status.boolStatus(forKey: .starred)
}
set {
markArticles([self.article], statusKey: .starred, flag: newValue)
}
}
@objc(deleted)
2025-01-22 22:17:02 -08:00
var deleted: Bool {
return false
}
@objc(imageURL)
2025-01-22 22:17:02 -08:00
var imageURL: String {
return article.imageLink ?? ""
}
2025-01-22 22:17:02 -08:00
@objc(authors)
2025-01-22 22:17:02 -08:00
var authors: NSArray {
let articleAuthors = article.authors ?? []
2025-01-22 22:17:02 -08:00
return articleAuthors.map { ScriptableAuthor($0, container: self) } as NSArray
}
@objc(feed)
2024-11-02 11:08:58 -07:00
var feed: ScriptableFeed? {
2024-11-01 21:58:47 -07:00
guard let parentFeed = self.article.feed,
let account = parentFeed.account
else { return nil }
2024-11-02 11:08:58 -07:00
return ScriptableFeed(parentFeed, container: ScriptableAccount(account))
}
}