NetNewsWire/Shared/ExtensionPoints/SendToMicroBlogCommand.swift

95 lines
2.1 KiB
Swift
Raw Normal View History

//
// SendToMicroBlogCommand.swift
2018-08-29 07:18:24 +02:00
// NetNewsWire
//
// Created by Brent Simmons on 1/8/18.
// Copyright © 2018 Ranchero Software. All rights reserved.
//
import AppKit
import Articles
import Core
import AppKitExtras
// Not undoable.
2023-06-26 01:48:37 +02:00
final class SendToMicroBlogCommand: SendToCommand {
2023-06-26 01:48:37 +02:00
let title = "Micro.blog"
let image: RSImage? = AppAssets.microblogIcon
private let microBlogApp = UserApp(bundleID: "blog.micro.mac")
func canSendObject(_ object: Any?, selectedText: String?) -> Bool {
microBlogApp.updateStatus()
guard microBlogApp.existsOnDisk, let article = (object as? ArticlePasteboardWriter)?.article, let _ = article.preferredLink else {
return false
}
return true
}
2024-03-20 07:05:30 +01:00
@MainActor func sendObject(_ object: Any?, selectedText: String?) {
guard canSendObject(object, selectedText: selectedText) else {
return
}
guard let article = (object as? ArticlePasteboardWriter)?.article else {
return
}
guard microBlogApp.launchIfNeeded(), microBlogApp.bringToFront() else {
return
}
// TODO: get text from contentHTML or contentText if no title and no selectedText.
// TODO: consider selectedText.
let s = article.attributionString + article.linkString
let urlQueryDictionary = ["text": s]
2020-01-28 05:58:59 +01:00
guard let urlQueryString = urlQueryDictionary.urlQueryString else {
return
}
guard let url = URL(string: "microblog://post?" + urlQueryString) else {
return
}
2020-08-02 20:37:09 +02:00
NSWorkspace.shared.open(url)
}
}
private extension Article {
2024-03-20 07:05:30 +01:00
@MainActor var attributionString: String {
// Feed name, or feed name + author name (if author is specified per-article).
// Includes trailing space.
if let feedName = feed?.nameForDisplay, let authorName = authors?.first?.name {
return feedName + ", " + authorName + ": "
}
if let feedName = feed?.nameForDisplay {
return feedName + ": "
}
return ""
}
var linkString: String {
// Title + link or just title (if no link) or just link if no title
if let title = title, let link = preferredLink {
return "[" + title + "](" + link + ")"
}
if let preferredLink = preferredLink {
return preferredLink
}
if let title = title {
return title
}
return ""
}
}