mirror of
https://github.com/Ranchero-Software/NetNewsWire.git
synced 2024-12-27 01:52:30 +01:00
Merge remote-tracking branch 'brentsimmons/master'
This commit is contained in:
commit
215a44fce7
@ -6,6 +6,24 @@
|
|||||||
<description>Most recent Evergreen changes with links to updates.</description>
|
<description>Most recent Evergreen changes with links to updates.</description>
|
||||||
<language>en</language>
|
<language>en</language>
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Version 1.0d31</title>
|
||||||
|
<description><![CDATA[
|
||||||
|
|
||||||
|
<p>Improve the promptness and reliability of user avatars appearing in the timeline.</p>
|
||||||
|
<p>Fix a bug detecting some JSON Feeds — those that use escaping on forward slashes in the text, such as http://curtclifton.net/feed.json</p>
|
||||||
|
<p>Draw a white unread indicator in the timeline when the cell is selected and emphasized.</p>
|
||||||
|
<p>Remove Error Log command from menu, since the Error Log won’t be until after 1.0.</p>
|
||||||
|
<p>Use the git commit number as the build number in Info.plist. Use Curtis Herbert’s script: https://blog.curtisherbert.com/automated-build-numbers/</p>
|
||||||
|
<p>Add Om Malik’s feed to the default list.</p>
|
||||||
|
<p>Check /index.xml when finding a feed when there are no other leads.</p>
|
||||||
|
|
||||||
|
]]></description>
|
||||||
|
<pubDate>Mon, 08 Jan 2018 13:15:00 -0800</pubDate>
|
||||||
|
<enclosure url="https://ranchero.com/downloads/Evergreen1.0d31.zip" sparkle:version="775" sparkle:shortVersionString="1.0d31" length="7224599" type="application/zip" />
|
||||||
|
<sparkle:minimumSystemVersion>10.13</sparkle:minimumSystemVersion>
|
||||||
|
</item>
|
||||||
|
|
||||||
<item>
|
<item>
|
||||||
<title>Version 1.0d30</title>
|
<title>Version 1.0d30</title>
|
||||||
<description><![CDATA[
|
<description><![CDATA[
|
||||||
|
@ -8,10 +8,12 @@
|
|||||||
|
|
||||||
import Cocoa
|
import Cocoa
|
||||||
|
|
||||||
|
// Unlike UndoableCommand commands, you instantiate one of each of these and reuse them.
|
||||||
|
|
||||||
protocol SendToCommand {
|
protocol SendToCommand {
|
||||||
|
|
||||||
func canSendObject(_ object: Any?) -> Bool
|
func canSendObject(_ object: Any?, selectedText: String?) -> Bool
|
||||||
func sendObject(_ object: Any?)
|
func sendObject(_ object: Any?, selectedText: String?)
|
||||||
}
|
}
|
||||||
|
|
||||||
extension SendToCommand {
|
extension SendToCommand {
|
||||||
|
@ -10,12 +10,12 @@ import Foundation
|
|||||||
|
|
||||||
final class SendToMarsEditCommand: SendToCommand {
|
final class SendToMarsEditCommand: SendToCommand {
|
||||||
|
|
||||||
func canSendObject(_ object: Any?) -> Bool {
|
func canSendObject(_ object: Any?, selectedText: String?) -> Bool {
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendObject(_ object: Any?) {
|
func sendObject(_ object: Any?, selectedText: String?) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import Cocoa
|
import Cocoa
|
||||||
|
import Data
|
||||||
|
|
||||||
// Not undoable.
|
// Not undoable.
|
||||||
|
|
||||||
@ -21,16 +22,50 @@ final class SendToMicroBlogCommand: SendToCommand {
|
|||||||
NotificationCenter.default.addObserver(self, selector: #selector(appDidBecomeActive(_:)), name: NSApplication.didBecomeActiveNotification, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(appDidBecomeActive(_:)), name: NSApplication.didBecomeActiveNotification, object: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func canSendObject(_ object: Any?) -> Bool {
|
func canSendObject(_ object: Any?, selectedText: String?) -> Bool {
|
||||||
|
|
||||||
if !appExists {
|
guard appExists, let article = object as? Article, let _ = article.preferredLink else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return false
|
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendObject(_ object: Any?) {
|
func sendObject(_ object: Any?, selectedText: String?) {
|
||||||
|
|
||||||
|
guard canSendObject(object, selectedText: selectedText) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
guard let article = object as? Article else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: get text from contentHTML or contentText if no title and no selectedText.
|
||||||
|
var s = ""
|
||||||
|
if let selectedText = selectedText {
|
||||||
|
s += selectedText
|
||||||
|
if let link = article.preferredLink {
|
||||||
|
s += "\n\n\(link)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if let title = article.title {
|
||||||
|
s += title
|
||||||
|
if let link = article.preferredLink {
|
||||||
|
s = "[" + s + "](" + link + ")"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if let link = article.preferredLink {
|
||||||
|
s = link
|
||||||
|
}
|
||||||
|
|
||||||
|
guard let encodedString = s.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
guard let url = URL(string: "microblog://post?text=" + encodedString) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let _ = try? NSWorkspace.shared.open(url, options: [], configuration: [:])
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc func appDidBecomeActive(_ note: Notification) {
|
@objc func appDidBecomeActive(_ note: Notification) {
|
||||||
|
@ -214,7 +214,7 @@ class TimelineTableCellView: NSTableCellView {
|
|||||||
avatarImageView.wantsLayer = true
|
avatarImageView.wantsLayer = true
|
||||||
avatarImageView.layer?.cornerRadius = cellAppearance.avatarCornerRadius
|
avatarImageView.layer?.cornerRadius = cellAppearance.avatarCornerRadius
|
||||||
if avatarImageView.image == nil {
|
if avatarImageView.image == nil {
|
||||||
avatarImageView.layer?.backgroundColor = NSColor(calibratedWhite: 0.0, alpha: 0.1).cgColor
|
avatarImageView.layer?.backgroundColor = NSColor(calibratedWhite: 0.0, alpha: 0.05).cgColor
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
avatarImageView.layer?.backgroundColor = NSColor.clear.cgColor
|
avatarImageView.layer?.backgroundColor = NSColor.clear.cgColor
|
||||||
|
@ -119,6 +119,7 @@ class TimelineViewController: NSViewController, UndoableCommandRunner {
|
|||||||
NotificationCenter.default.addObserver(self, selector: #selector(feedIconDidBecomeAvailable(_:)), name: .FeedIconDidBecomeAvailable, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(feedIconDidBecomeAvailable(_:)), name: .FeedIconDidBecomeAvailable, object: nil)
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(avatarDidBecomeAvailable(_:)), name: .AvatarDidBecomeAvailable, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(avatarDidBecomeAvailable(_:)), name: .AvatarDidBecomeAvailable, object: nil)
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(imageDidBecomeAvailable(_:)), name: .ImageDidBecomeAvailable, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(imageDidBecomeAvailable(_:)), name: .ImageDidBecomeAvailable, object: nil)
|
||||||
|
NotificationCenter.default.addObserver(self, selector: #selector(imageDidBecomeAvailable(_:)), name: .FaviconDidBecomeAvailable, object: nil)
|
||||||
|
|
||||||
NSUserDefaultsController.shared.addObserver(self, forKeyPath: timelineFontSizeKVOKey, options: NSKeyValueObservingOptions(rawValue: 0), context: nil)
|
NSUserDefaultsController.shared.addObserver(self, forKeyPath: timelineFontSizeKVOKey, options: NSKeyValueObservingOptions(rawValue: 0), context: nil)
|
||||||
|
|
||||||
@ -351,7 +352,9 @@ class TimelineViewController: NSViewController, UndoableCommandRunner {
|
|||||||
|
|
||||||
@objc func imageDidBecomeAvailable(_ note: Notification) {
|
@objc func imageDidBecomeAvailable(_ note: Notification) {
|
||||||
|
|
||||||
queueReloadAvailableCells()
|
if showAvatars {
|
||||||
|
queueReloadAvailableCells()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func fontSizeInDefaultsDidChange() {
|
func fontSizeInDefaultsDidChange() {
|
||||||
|
Loading…
Reference in New Issue
Block a user