From 059b24c57b26bc7828b2bed3d351fefcd14ddf3d Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Thu, 23 Apr 2020 09:50:19 -0500 Subject: [PATCH] Add Twitter select account for URL builder --- NetNewsWire.xcodeproj/project.pbxproj | 4 ++ iOS/Add/Twitter/TwitterAdd.storyboard | 41 +++++++++++++++++- ...tterSelectAccountTableViewController.swift | 43 +++++++++++++++++++ ...TwitterSelectTypeTableViewController.swift | 24 +++++------ 4 files changed, 99 insertions(+), 13 deletions(-) create mode 100644 iOS/Add/Twitter/TwitterSelectAccountTableViewController.swift diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index ad3301910..333186b23 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -21,6 +21,7 @@ 510289D02451BA3A00426DDF /* TwitterAdd.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 510289CF2451BA3A00426DDF /* TwitterAdd.storyboard */; }; 510289D22451BC1F00426DDF /* TwitterSelectTypeTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 510289D12451BC1F00426DDF /* TwitterSelectTypeTableViewController.swift */; }; 510289D42451BD7B00426DDF /* SelectURLBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 510289D32451BD7B00426DDF /* SelectURLBuilder.swift */; }; + 510289D62451DDD100426DDF /* TwitterSelectAccountTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 510289D52451DDD100426DDF /* TwitterSelectAccountTableViewController.swift */; }; 5102FD83244009F000534F17 /* Secrets.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5102FD7B244008A700534F17 /* Secrets.framework */; }; 5102FD84244009F000534F17 /* Secrets.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 5102FD7B244008A700534F17 /* Secrets.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 5102FD9B244009FA00534F17 /* Secrets.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5102FD7B244008A700534F17 /* Secrets.framework */; }; @@ -1392,6 +1393,7 @@ 510289CF2451BA3A00426DDF /* TwitterAdd.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = TwitterAdd.storyboard; sourceTree = ""; }; 510289D12451BC1F00426DDF /* TwitterSelectTypeTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TwitterSelectTypeTableViewController.swift; sourceTree = ""; }; 510289D32451BD7B00426DDF /* SelectURLBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectURLBuilder.swift; sourceTree = ""; }; + 510289D52451DDD100426DDF /* TwitterSelectAccountTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TwitterSelectAccountTableViewController.swift; sourceTree = ""; }; 5102FD72244008A700534F17 /* Secrets.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Secrets.xcodeproj; path = Frameworks/Secrets/Secrets.xcodeproj; sourceTree = SOURCE_ROOT; }; 5103A9972421643300410853 /* blank.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = blank.html; sourceTree = ""; }; 5103A9B324216A4200410853 /* blank.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = blank.html; sourceTree = ""; }; @@ -1938,6 +1940,7 @@ children = ( 510289CF2451BA3A00426DDF /* TwitterAdd.storyboard */, 510289D12451BC1F00426DDF /* TwitterSelectTypeTableViewController.swift */, + 510289D52451DDD100426DDF /* TwitterSelectAccountTableViewController.swift */, ); path = Twitter; sourceTree = ""; @@ -4395,6 +4398,7 @@ 519E743D22C663F900A78E47 /* SceneDelegate.swift in Sources */, FFD43E412340F488009E5CA3 /* MarkAsReadAlertController.swift in Sources */, 51C452A322650A1E00C03939 /* HTMLMetadataDownloader.swift in Sources */, + 510289D62451DDD100426DDF /* TwitterSelectAccountTableViewController.swift in Sources */, 51C4528D2265095F00C03939 /* AddFolderViewController.swift in Sources */, 51DC37072402153E0095D371 /* UpdateSelectionOperation.swift in Sources */, 51C452782265091600C03939 /* MasterTimelineCellData.swift in Sources */, diff --git a/iOS/Add/Twitter/TwitterAdd.storyboard b/iOS/Add/Twitter/TwitterAdd.storyboard index 5c7bd5483..36bfcce55 100644 --- a/iOS/Add/Twitter/TwitterAdd.storyboard +++ b/iOS/Add/Twitter/TwitterAdd.storyboard @@ -9,7 +9,7 @@ - + @@ -93,10 +93,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Add/Twitter/TwitterSelectAccountTableViewController.swift b/iOS/Add/Twitter/TwitterSelectAccountTableViewController.swift new file mode 100644 index 000000000..401da77c1 --- /dev/null +++ b/iOS/Add/Twitter/TwitterSelectAccountTableViewController.swift @@ -0,0 +1,43 @@ +// +// TwitterSelectAccountTableViewController.swift +// NetNewsWire-iOS +// +// Created by Maurice Parker on 4/23/20. +// Copyright © 2020 Ranchero Software. All rights reserved. +// + +import UIKit +import Account + +class TwitterSelectAccountTableViewController: UITableViewController, SelectURLBuilder { + + private var twitterFeedProviders = [TwitterFeedProvider]() + + var twitterFeedType: TwitterFeedType? + weak var delegate: SelectURLBuilderDelegate? + + override func viewDidLoad() { + super.viewDidLoad() + twitterFeedProviders = ExtensionPointManager.shared.activeExtensionPoints.values.compactMap { $0 as? TwitterFeedProvider } + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return twitterFeedProviders.count + } + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) + cell.textLabel?.text = "@\(twitterFeedProviders[indexPath.row].screenName)" + return cell + } + + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + guard let twitterFeedType = twitterFeedType else { return } + let username = twitterFeedProviders[indexPath.row].screenName + if let url = TwitterFeedProvider.buildURL(twitterFeedType, username: username, screenName: nil, searchField: nil) { + delegate?.selectURLBuilderDidBuildURL(url) + } + dismiss(animated: true) + } + +} diff --git a/iOS/Add/Twitter/TwitterSelectTypeTableViewController.swift b/iOS/Add/Twitter/TwitterSelectTypeTableViewController.swift index 6fc7cf83d..b401f9643 100644 --- a/iOS/Add/Twitter/TwitterSelectTypeTableViewController.swift +++ b/iOS/Add/Twitter/TwitterSelectTypeTableViewController.swift @@ -11,16 +11,19 @@ import Account class TwitterSelectTypeTableViewController: UITableViewController, SelectURLBuilder { + private var twitterFeedProviders = [TwitterFeedProvider]() + weak var delegate: SelectURLBuilderDelegate? override func viewDidLoad() { super.viewDidLoad() + twitterFeedProviders = ExtensionPointManager.shared.activeExtensionPoints.values.compactMap { $0 as? TwitterFeedProvider } } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = super.tableView(tableView, cellForRowAt: indexPath) if indexPath.row < 2 { - if findTwitterFeedProviders().count > 1 { + if twitterFeedProviders.count > 1 { cell.accessoryType = .disclosureIndicator } } @@ -30,7 +33,6 @@ class TwitterSelectTypeTableViewController: UITableViewController, SelectURLBuil override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { switch indexPath.row { case 0: - let twitterFeedProviders = findTwitterFeedProviders() if twitterFeedProviders.count == 1 { let username = twitterFeedProviders.first!.screenName if let url = TwitterFeedProvider.buildURL(.homeTimeline, username: username, screenName: nil, searchField: nil) { @@ -38,10 +40,12 @@ class TwitterSelectTypeTableViewController: UITableViewController, SelectURLBuil } dismiss(animated: true) } else { - // TODO: Create a controller for the next scene... + let selectAccount = UIStoryboard.twitterAdd.instantiateController(ofType: TwitterSelectAccountTableViewController.self) + selectAccount.twitterFeedType = .homeTimeline + selectAccount.delegate = delegate + navigationController?.pushViewController(selectAccount, animated: true) } case 1: - let twitterFeedProviders = findTwitterFeedProviders() if twitterFeedProviders.count == 1 { let username = twitterFeedProviders.first!.screenName if let url = TwitterFeedProvider.buildURL(.mentions, username: username, screenName: nil, searchField: nil) { @@ -49,7 +53,10 @@ class TwitterSelectTypeTableViewController: UITableViewController, SelectURLBuil } dismiss(animated: true) } else { - // TODO: Create a controller for the next scene... + let selectAccount = UIStoryboard.twitterAdd.instantiateController(ofType: TwitterSelectAccountTableViewController.self) + selectAccount.twitterFeedType = .mentions + selectAccount.delegate = delegate + navigationController?.pushViewController(selectAccount, animated: true) } default: fatalError() @@ -57,10 +64,3 @@ class TwitterSelectTypeTableViewController: UITableViewController, SelectURLBuil } } - -private extension TwitterSelectTypeTableViewController { - - func findTwitterFeedProviders() -> [TwitterFeedProvider] { - return ExtensionPointManager.shared.activeExtensionPoints.values.compactMap { $0 as? TwitterFeedProvider } - } -}