Add basic ExtensionPoint support.

This commit is contained in:
Maurice Parker
2020-04-07 15:25:33 -05:00
parent f8667be32b
commit 49cff8eb8e
29 changed files with 299 additions and 140 deletions

View File

@@ -45,18 +45,6 @@ struct AppAssets {
return RSImage(named: "accountNewsBlur")
}()
static var adapterMarsEdit: RSImage = {
return RSImage(named: "adapterMarsEdit")!
}()
static var adapterMicroblog: RSImage = {
return RSImage(named: "adapterMicroblog")!
}()
static var adapterTwitter: RSImage = {
return RSImage(named: "adapterTwitter")!
}()
static var articleExtractor: RSImage! = {
return RSImage(named: "articleExtractor")
}()
@@ -89,12 +77,22 @@ struct AppAssets {
return RSImage(named: "articleExtractorProgress4")
}()
static var bookmarkImage: RSImage? = {
let path = "/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/KEXT.icns"
let image = RSImage(contentsOfFile: path)
return image
static var extensionPointMarsEdit: RSImage = {
return RSImage(named: "extensionPointMarsEdit")!
}()
static var extensionPointMicroblog: RSImage = {
return RSImage(named: "extensionPointMicroblog")!
}()
static var extensionPointTwitter: RSImage = {
return RSImage(named: "extensionPointTwitter")!
}()
static var extensionPreference: RSImage? = {
return RSImage(contentsOfFile: "/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/KEXT.icns")
}()
static var faviconTemplateImage: RSImage = {
return RSImage(named: "faviconTemplateImage")!
}()

View File

@@ -385,16 +385,16 @@
<autoresizingMask key="autoresizingMask"/>
<subviews>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="7UM-iq-OLB" customClass="PreferencesTableViewBackgroundView" customModule="NetNewsWire" customModuleProvider="target">
<rect key="frame" x="20" y="44" width="160" height="227"/>
<rect key="frame" x="20" y="44" width="160" height="225"/>
<subviews>
<scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="26" horizontalPageScroll="10" verticalLineScroll="26" verticalPageScroll="10" hasHorizontalScroller="NO" horizontalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="PaF-du-r3c">
<rect key="frame" x="1" y="0.0" width="158" height="226"/>
<rect key="frame" x="1" y="0.0" width="158" height="224"/>
<clipView key="contentView" id="cil-Gq-akO">
<rect key="frame" x="0.0" y="0.0" width="158" height="226"/>
<rect key="frame" x="0.0" y="0.0" width="158" height="224"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="24" viewBased="YES" id="aTp-KR-y6b">
<rect key="frame" x="0.0" y="0.0" width="159" height="226"/>
<rect key="frame" x="0.0" y="0.0" width="159" height="224"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
@@ -501,7 +501,7 @@
<rect key="frame" x="83" y="20" width="97" height="24"/>
</customView>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="Y7D-xQ-wep">
<rect key="frame" x="188" y="20" width="242" height="251"/>
<rect key="frame" x="188" y="20" width="242" height="249"/>
</customView>
</subviews>
<constraints>
@@ -547,25 +547,25 @@
</objects>
<point key="canvasLocation" x="-44" y="27"/>
</scene>
<!--Feed Providers Preferences View Controller-->
<!--Extension Point Preferences View Controller-->
<scene sceneID="2Q8-nu-xsg">
<objects>
<viewController storyboardIdentifier="FeedProvider" id="K4Z-qS-hrR" customClass="FeedProvidersPreferencesViewController" customModule="NetNewsWire" customModuleProvider="target" sceneMemberID="viewController">
<viewController storyboardIdentifier="Extensions" id="K4Z-qS-hrR" customClass="ExtensionPointPreferencesViewController" customModule="NetNewsWire" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" misplaced="YES" id="Jpa-aD-PZF">
<rect key="frame" x="0.0" y="0.0" width="450" height="299"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="pjs-G4-byk" customClass="PreferencesTableViewBackgroundView" customModule="NetNewsWire" customModuleProvider="target">
<rect key="frame" x="20" y="44" width="160" height="223"/>
<rect key="frame" x="20" y="44" width="160" height="218"/>
<subviews>
<scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="26" horizontalPageScroll="10" verticalLineScroll="26" verticalPageScroll="10" hasHorizontalScroller="NO" horizontalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="29T-r2-ckC">
<rect key="frame" x="1" y="0.0" width="158" height="222"/>
<rect key="frame" x="1" y="0.0" width="158" height="217"/>
<clipView key="contentView" id="dXw-GY-TP8">
<rect key="frame" x="0.0" y="0.0" width="158" height="222"/>
<rect key="frame" x="0.0" y="0.0" width="158" height="217"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="24" viewBased="YES" id="dfn-Vn-oDp">
<rect key="frame" x="0.0" y="0.0" width="159" height="222"/>
<rect key="frame" x="0.0" y="0.0" width="159" height="217"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
@@ -666,7 +666,7 @@
<rect key="frame" x="83" y="20" width="97" height="24"/>
</customView>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="N1N-pE-gBL">
<rect key="frame" x="188" y="20" width="242" height="247"/>
<rect key="frame" x="188" y="20" width="242" height="242"/>
</customView>
</subviews>
<constraints>

View File

@@ -5,7 +5,7 @@
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="FeedProvidersAddViewController" customModule="NetNewsWire" customModuleProvider="target">
<customObject id="-2" userLabel="File's Owner" customClass="ExtensionPointAddViewController" customModule="NetNewsWire" customModuleProvider="target">
<connections>
<outlet property="tableView" destination="lyM-Zu-Let" id="JDz-05-OOg"/>
<outlet property="view" destination="c22-O7-iKe" id="Vfr-rK-EHC"/>
@@ -44,7 +44,7 @@
</textFieldCell>
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView identifier="Cell" id="EGi-CQ-lPc" customClass="FeedProvidersAddTableCellView" customModule="NetNewsWire" customModuleProvider="target">
<tableCellView identifier="Cell" id="EGi-CQ-lPc" customClass="ExtensionPointAddTableCellView" customModule="NetNewsWire" customModuleProvider="target">
<rect key="frame" x="1" y="1" width="475" height="40"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
@@ -83,8 +83,8 @@
<constraint firstItem="iCD-Yx-4V5" firstAttribute="leading" secondItem="EGi-CQ-lPc" secondAttribute="leading" constant="20" id="IsY-WH-f93"/>
</constraints>
<connections>
<outlet property="feedProviderImageView" destination="KmN-Zk-TBU" id="gAh-RE-QeJ"/>
<outlet property="feedProviderNameLabel" destination="uyu-5W-IaW" id="QAe-Gk-Eeo"/>
<outlet property="imageView" destination="KmN-Zk-TBU" id="Tfy-Eb-Isb"/>
<outlet property="titleLabel" destination="uyu-5W-IaW" id="QAe-Gk-Eeo"/>
</connections>
</tableCellView>
</prototypeCellViews>

View File

@@ -0,0 +1,16 @@
//
// ExtensionPointAddTableCellView.swift
// NetNewsWire
//
// Created by Maurice Parker on 4/6/20.
// Copyright © 2020 Ranchero Software. All rights reserved.
//
import AppKit
class ExtensionPointAddTableCellView: NSTableCellView {
@IBOutlet weak var templateImageView: NSImageView?
@IBOutlet weak var titleLabel: NSTextField?
}

View File

@@ -1,5 +1,5 @@
//
// FeedProvidersAddViewController.swift
// ExtensionPointAddViewController.swift
// NetNewsWire
//
// Created by Maurice Parker on 4/6/20.
@@ -9,20 +9,15 @@
import AppKit
import FeedProvider
class FeedProvidersAddViewController: NSViewController {
class ExtensionPointAddViewController: NSViewController {
@IBOutlet weak var tableView: NSTableView!
private var accountsAddWindowController: NSWindowController?
#if DEBUG
private var addableFeedProviderTypes: [FeedProviderType] = [.marsEdit, .microblog, .twitter]
#else
private var addableFeedProviderTypes: [FeedProviderType] = [.twitter]
#endif
private var availableExtensionPoints = [ExtensionPoint]()
private var extensionPointAddWindowController: NSWindowController?
init() {
super.init(nibName: "FeedProvidersAdd", bundle: nil)
super.init(nibName: "ExtensionPointAdd", bundle: nil)
}
public required init?(coder: NSCoder) {
@@ -33,16 +28,17 @@ class FeedProvidersAddViewController: NSViewController {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
availableExtensionPoints = ExtensionPointManager.shared.availableExtensionPoints
}
}
// MARK: - NSTableViewDataSource
extension FeedProvidersAddViewController: NSTableViewDataSource {
extension ExtensionPointAddViewController: NSTableViewDataSource {
func numberOfRows(in tableView: NSTableView) -> Int {
return addableFeedProviderTypes.count
return availableExtensionPoints.count
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
@@ -52,24 +48,16 @@ extension FeedProvidersAddViewController: NSTableViewDataSource {
// MARK: - NSTableViewDelegate
extension FeedProvidersAddViewController: NSTableViewDelegate {
extension ExtensionPointAddViewController: NSTableViewDelegate {
private static let cellIdentifier = NSUserInterfaceItemIdentifier(rawValue: "AccountCell")
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
if let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "Cell"), owner: nil) as? FeedProvidersAddTableCellView {
switch addableFeedProviderTypes[row] {
case .marsEdit:
cell.feedProviderNameLabel?.stringValue = NSLocalizedString("MarsEdit", comment: "MarsEdit")
cell.feedProviderImageView?.image = AppAssets.adapterMarsEdit
case .microblog:
cell.feedProviderNameLabel?.stringValue = NSLocalizedString("Micro.blog", comment: "Micro.blog")
cell.feedProviderImageView?.image = AppAssets.adapterMicroblog
case .twitter:
cell.feedProviderNameLabel?.stringValue = NSLocalizedString("Twitter", comment: "Twitter")
cell.feedProviderImageView?.image = AppAssets.adapterTwitter
}
if let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "Cell"), owner: nil) as? ExtensionPointAddTableCellView {
let extensionPoint = availableExtensionPoints[row]
cell.titleLabel?.stringValue = extensionPoint.title
cell.imageView?.image = extensionPoint.templateImage
return cell
}
return nil

View File

@@ -1,5 +1,5 @@
//
// FeedProvidersPreferencesViewController.swift
// ExtensionsPreferencesViewController.swift
// NetNewsWire
//
// Created by Maurice Parker on 4/6/20.
@@ -8,7 +8,7 @@
import AppKit
final class FeedProvidersPreferencesViewController: NSViewController {
final class ExtensionPointPreferencesViewController: NSViewController {
@IBOutlet weak var tableView: NSTableView!
@IBOutlet weak var detailView: NSView!
@@ -22,7 +22,7 @@ final class FeedProvidersPreferencesViewController: NSViewController {
tableView.delegate = self
tableView.dataSource = self
showController(FeedProvidersAddViewController())
showController(ExtensionPointAddViewController())
// Fix tableView frame  for some reason IB wants it 1pt wider than the clip view. This leads to unwanted horizontal scrolling.
var rTable = tableView.frame
@@ -34,7 +34,7 @@ final class FeedProvidersPreferencesViewController: NSViewController {
// MARK: - NSTableViewDataSource
extension FeedProvidersPreferencesViewController: NSTableViewDataSource {
extension ExtensionPointPreferencesViewController: NSTableViewDataSource {
func numberOfRows(in tableView: NSTableView) -> Int {
return sortedAccounts.count
@@ -47,7 +47,7 @@ extension FeedProvidersPreferencesViewController: NSTableViewDataSource {
// MARK: - NSTableViewDelegate
extension FeedProvidersPreferencesViewController: NSTableViewDelegate {
extension ExtensionPointPreferencesViewController: NSTableViewDelegate {
private static let cellIdentifier = NSUserInterfaceItemIdentifier(rawValue: "AccountCell")
@@ -70,7 +70,7 @@ extension FeedProvidersPreferencesViewController: NSTableViewDelegate {
// MARK: - Private
private extension FeedProvidersPreferencesViewController {
private extension ExtensionPointPreferencesViewController {
func showController(_ controller: NSViewController) {

View File

@@ -1,16 +0,0 @@
//
// FeedProvidersAddTableCellView.swift
// NetNewsWire
//
// Created by Maurice Parker on 4/6/20.
// Copyright © 2020 Ranchero Software. All rights reserved.
//
import AppKit
class FeedProvidersAddTableCellView: NSTableCellView {
@IBOutlet weak var feedProviderImageView: NSImageView?
@IBOutlet weak var feedProviderNameLabel: NSTextField?
}

View File

@@ -24,7 +24,7 @@ private struct PreferencesToolbarItemSpec {
private struct ToolbarItemIdentifier {
static let General = "General"
static let Accounts = "Accounts"
static let FeedProvider = "FeedProvider"
static let Extensions = "Extensions"
static let Advanced = "Advanced"
}
@@ -40,9 +40,9 @@ class PreferencesWindowController : NSWindowController, NSToolbarDelegate {
specs += [PreferencesToolbarItemSpec(identifierRawValue: ToolbarItemIdentifier.Accounts,
name: NSLocalizedString("Accounts", comment: "Preferences"),
image: NSImage(named: NSImage.userAccountsName))]
specs += [PreferencesToolbarItemSpec(identifierRawValue: ToolbarItemIdentifier.FeedProvider,
specs += [PreferencesToolbarItemSpec(identifierRawValue: ToolbarItemIdentifier.Extensions,
name: NSLocalizedString("Extensions", comment: "Preferences"),
image: AppAssets.bookmarkImage)]
image: AppAssets.extensionPreference)]
// Omit the Advanced Preferences for now because the Software Update related functionality is
// forbidden/non-applicable, and we can rely upon Apple to some extent for crash reports. We

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "micro-dot-blog.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"template-rendering-intent" : "template"
}
}