Also, added support for accessing feeds directly from the top level container, essentially skipping account as a hierarchy level. With this change, a script like tell app “Evergreen” title of every article of feed "Six Colors" where read is true end tell produces the expected result.
112 lines
2.3 KiB
Swift
112 lines
2.3 KiB
Swift
//
|
|
// Article+Scriptability.swift
|
|
// Evergreen
|
|
//
|
|
// Created by Olof Hellman on 1/23/18.
|
|
// Copyright © 2018 Olof Hellman. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import Account
|
|
import Data
|
|
|
|
@objc(ScriptableArticle)
|
|
class ScriptableArticle: NSObject, UniqueIdScriptingObject {
|
|
|
|
let article:Article
|
|
let container:ScriptingObjectContainer
|
|
|
|
init (_ article:Article, container:ScriptingObjectContainer) {
|
|
self.article = article
|
|
self.container = container
|
|
}
|
|
|
|
@objc(objectSpecifier)
|
|
override var objectSpecifier: NSScriptObjectSpecifier? {
|
|
let scriptObjectSpecifier = self.container.makeFormUniqueIDScriptObjectSpecifier(forObject:self)
|
|
return (scriptObjectSpecifier)
|
|
}
|
|
|
|
// MARK: --- ScriptingObject protocol ---
|
|
|
|
var scriptingKey: String {
|
|
return "articles"
|
|
}
|
|
|
|
// MARK: --- UniqueIdScriptingObject protocol ---
|
|
|
|
// articles have id in the Evergreen database and id in the feed
|
|
// article.uniqueID here is the feed unique id
|
|
|
|
var scriptingUniqueId:Any {
|
|
return article.uniqueID
|
|
}
|
|
|
|
// MARK: --- Scriptable properties ---
|
|
|
|
@objc(url)
|
|
var url:String {
|
|
return article.url ?? ""
|
|
}
|
|
|
|
@objc(uniqueId)
|
|
var uniqueId:String {
|
|
return article.uniqueID
|
|
}
|
|
|
|
@objc(title)
|
|
var title:String {
|
|
return article.title ?? ""
|
|
}
|
|
|
|
@objc(contents)
|
|
var contents:String {
|
|
return article.contentText ?? ""
|
|
}
|
|
|
|
@objc(html)
|
|
var html:String {
|
|
return article.contentHTML ?? ""
|
|
}
|
|
|
|
@objc(summary)
|
|
var summary:String {
|
|
return article.summary ?? ""
|
|
}
|
|
|
|
@objc(datePublished)
|
|
var datePublished:Date? {
|
|
return article.datePublished
|
|
}
|
|
|
|
@objc(dateModified)
|
|
var dateModified:Date? {
|
|
return article.dateModified
|
|
}
|
|
|
|
@objc(dateArrived)
|
|
var dateArrived:Date {
|
|
return article.status.dateArrived
|
|
}
|
|
|
|
@objc(read)
|
|
var read:Bool {
|
|
return article.status.boolStatus(forKey:.read)
|
|
}
|
|
|
|
@objc(starred)
|
|
var starred:Bool {
|
|
return article.status.boolStatus(forKey:.starred)
|
|
}
|
|
|
|
@objc(deleted)
|
|
var deleted:Bool {
|
|
return article.status.boolStatus(forKey:.userDeleted)
|
|
}
|
|
|
|
@objc(imageURL)
|
|
var imageURL:String {
|
|
return article.imageURL ?? ""
|
|
}
|
|
}
|