Merge branch 'main' into pr/1695
This commit is contained in:
commit
3e082f938a
@ -12,9 +12,9 @@ let package = Package(
|
|||||||
],
|
],
|
||||||
dependencies: [
|
dependencies: [
|
||||||
.package(url: "https://github.com/Ranchero-Software/RSCore.git", .upToNextMajor(from: "1.0.0")),
|
.package(url: "https://github.com/Ranchero-Software/RSCore.git", .upToNextMajor(from: "1.0.0")),
|
||||||
.package(url: "https://github.com/Ranchero-Software/RSDatabase.git", .upToNextMajor(from: "1.0.0-beta1")),
|
.package(url: "https://github.com/Ranchero-Software/RSDatabase.git", .upToNextMajor(from: "1.0.0")),
|
||||||
.package(url: "https://github.com/Ranchero-Software/RSParser.git", .upToNextMajor(from: "2.0.0-beta1")),
|
.package(url: "https://github.com/Ranchero-Software/RSParser.git", .upToNextMajor(from: "2.0.0")),
|
||||||
.package(url: "https://github.com/Ranchero-Software/RSWeb.git", .upToNextMajor(from: "1.0.0-beta1")),
|
.package(url: "https://github.com/Ranchero-Software/RSWeb.git", .upToNextMajor(from: "1.0.0")),
|
||||||
.package(url: "../Articles", .upToNextMajor(from: "1.0.0")),
|
.package(url: "../Articles", .upToNextMajor(from: "1.0.0")),
|
||||||
.package(url: "../ArticlesDatabase", .upToNextMajor(from: "1.0.0")),
|
.package(url: "../ArticlesDatabase", .upToNextMajor(from: "1.0.0")),
|
||||||
.package(url: "../Secrets", .upToNextMajor(from: "1.0.0")),
|
.package(url: "../Secrets", .upToNextMajor(from: "1.0.0")),
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import RSWeb
|
import RSWeb
|
||||||
|
|
||||||
protocol AccountMetadataDelegate: class {
|
protocol AccountMetadataDelegate: AnyObject {
|
||||||
func valueDidChange(_ accountMetadata: AccountMetadata, key: AccountMetadata.CodingKeys)
|
func valueDidChange(_ accountMetadata: AccountMetadata, key: AccountMetadata.CodingKeys)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ extension Notification.Name {
|
|||||||
public static let ChildrenDidChange = Notification.Name("ChildrenDidChange")
|
public static let ChildrenDidChange = Notification.Name("ChildrenDidChange")
|
||||||
}
|
}
|
||||||
|
|
||||||
public protocol Container: class, ContainerIdentifiable {
|
public protocol Container: AnyObject, ContainerIdentifiable {
|
||||||
|
|
||||||
var account: Account? { get }
|
var account: Account? { get }
|
||||||
var topLevelWebFeeds: Set<WebFeed> { get set }
|
var topLevelWebFeeds: Set<WebFeed> { get set }
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
public protocol FeedProviderManagerDelegate: class {
|
public protocol FeedProviderManagerDelegate: AnyObject {
|
||||||
var activeFeedProviders: [FeedProvider] { get }
|
var activeFeedProviders: [FeedProvider] { get }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ import RSCore
|
|||||||
import OAuthSwift
|
import OAuthSwift
|
||||||
import Secrets
|
import Secrets
|
||||||
|
|
||||||
protocol RedditFeedProviderTokenRefreshOperationDelegate: class {
|
protocol RedditFeedProviderTokenRefreshOperationDelegate: AnyObject {
|
||||||
var username: String? { get }
|
var username: String? { get }
|
||||||
var oauthTokenLastRefresh: Date? { get set }
|
var oauthTokenLastRefresh: Date? { get set }
|
||||||
var oauthToken: String { get set }
|
var oauthToken: String { get set }
|
||||||
|
@ -10,7 +10,7 @@ import Foundation
|
|||||||
import RSWeb
|
import RSWeb
|
||||||
import Secrets
|
import Secrets
|
||||||
|
|
||||||
protocol FeedlyAPICallerDelegate: class {
|
protocol FeedlyAPICallerDelegate: AnyObject {
|
||||||
/// Implemented by the `FeedlyAccountDelegate` reauthorize the client with a fresh OAuth token so the client can retry the unauthorized request.
|
/// Implemented by the `FeedlyAccountDelegate` reauthorize the client with a fresh OAuth token so the client can retry the unauthorized request.
|
||||||
/// Pass `true` to the completion handler if the failing request should be retried with a fresh token or `false` if the unauthorized request should complete with the original failure error.
|
/// Pass `true` to the completion handler if the failing request should be retried with a fresh token or `false` if the unauthorized request should complete with the original failure error.
|
||||||
func reauthorizeFeedlyAPICaller(_ caller: FeedlyAPICaller, completionHandler: @escaping (Bool) -> ())
|
func reauthorizeFeedlyAPICaller(_ caller: FeedlyAPICaller, completionHandler: @escaping (Bool) -> ())
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
protocol FeedlyEntryIdentifierProviding: class {
|
protocol FeedlyEntryIdentifierProviding: AnyObject {
|
||||||
var entryIds: Set<String> { get }
|
var entryIds: Set<String> { get }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ import Foundation
|
|||||||
import AuthenticationServices
|
import AuthenticationServices
|
||||||
import RSCore
|
import RSCore
|
||||||
|
|
||||||
public protocol OAuthAccountAuthorizationOperationDelegate: class {
|
public protocol OAuthAccountAuthorizationOperationDelegate: AnyObject {
|
||||||
func oauthAccountAuthorizationOperation(_ operation: OAuthAccountAuthorizationOperation, didCreate account: Account)
|
func oauthAccountAuthorizationOperation(_ operation: OAuthAccountAuthorizationOperation, didCreate account: Account)
|
||||||
func oauthAccountAuthorizationOperation(_ operation: OAuthAccountAuthorizationOperation, didFailWith error: Error)
|
func oauthAccountAuthorizationOperation(_ operation: OAuthAccountAuthorizationOperation, didFailWith error: Error)
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ public protocol OAuthAcessTokenRefreshRequesting {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Implemented by concrete types to perform the actual request.
|
/// Implemented by concrete types to perform the actual request.
|
||||||
protocol OAuthAccessTokenRefreshing: class {
|
protocol OAuthAccessTokenRefreshing: AnyObject {
|
||||||
|
|
||||||
func refreshAccessToken(with refreshToken: String, client: OAuthAuthorizationClient, completion: @escaping (Result<OAuthAuthorizationGrant, Error>) -> ())
|
func refreshAccessToken(with refreshToken: String, client: OAuthAuthorizationClient, completion: @escaping (Result<OAuthAuthorizationGrant, Error>) -> ())
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
protocol FeedlyCheckpointOperationDelegate: class {
|
protocol FeedlyCheckpointOperationDelegate: AnyObject {
|
||||||
func feedlyCheckpointOperationDidReachCheckpoint(_ operation: FeedlyCheckpointOperation)
|
func feedlyCheckpointOperationDidReachCheckpoint(_ operation: FeedlyCheckpointOperation)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import os.log
|
import os.log
|
||||||
|
|
||||||
protocol FeedlyCollectionProviding: class {
|
protocol FeedlyCollectionProviding: AnyObject {
|
||||||
var collections: [FeedlyCollection] { get }
|
var collections: [FeedlyCollection] { get }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ protocol FeedlyParsedItemProviding {
|
|||||||
var parsedEntries: Set<ParsedItem> { get }
|
var parsedEntries: Set<ParsedItem> { get }
|
||||||
}
|
}
|
||||||
|
|
||||||
protocol FeedlyGetStreamContentsOperationDelegate: class {
|
protocol FeedlyGetStreamContentsOperationDelegate: AnyObject {
|
||||||
func feedlyGetStreamContentsOperation(_ operation: FeedlyGetStreamContentsOperation, didGetContentsOf stream: FeedlyStream)
|
func feedlyGetStreamContentsOperation(_ operation: FeedlyGetStreamContentsOperation, didGetContentsOf stream: FeedlyStream)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import os.log
|
import os.log
|
||||||
|
|
||||||
protocol FeedlyGetStreamIdsOperationDelegate: class {
|
protocol FeedlyGetStreamIdsOperationDelegate: AnyObject {
|
||||||
func feedlyGetStreamIdsOperation(_ operation: FeedlyGetStreamIdsOperation, didGet streamIds: FeedlyStreamIds)
|
func feedlyGetStreamIdsOperation(_ operation: FeedlyGetStreamIdsOperation, didGet streamIds: FeedlyStreamIds)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ import Foundation
|
|||||||
import RSWeb
|
import RSWeb
|
||||||
import RSCore
|
import RSCore
|
||||||
|
|
||||||
protocol FeedlyOperationDelegate: class {
|
protocol FeedlyOperationDelegate: AnyObject {
|
||||||
func feedlyOperation(_ operation: FeedlyOperation, didFailWith error: Error)
|
func feedlyOperation(_ operation: FeedlyOperation, didFailWith error: Error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import os.log
|
import os.log
|
||||||
|
|
||||||
protocol FeedlyRequestStreamsOperationDelegate: class {
|
protocol FeedlyRequestStreamsOperationDelegate: AnyObject {
|
||||||
func feedlyRequestStreamsOperation(_ operation: FeedlyRequestStreamsOperation, enqueue collectionStreamOperation: FeedlyGetStreamContentsOperation)
|
func feedlyRequestStreamsOperation(_ operation: FeedlyRequestStreamsOperation, enqueue collectionStreamOperation: FeedlyGetStreamContentsOperation)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,11 +8,11 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
protocol FeedlySearchService: class {
|
protocol FeedlySearchService: AnyObject {
|
||||||
func getFeeds(for query: String, count: Int, locale: String, completion: @escaping (Result<FeedlyFeedsSearchResponse, Error>) -> ())
|
func getFeeds(for query: String, count: Int, locale: String, completion: @escaping (Result<FeedlyFeedsSearchResponse, Error>) -> ())
|
||||||
}
|
}
|
||||||
|
|
||||||
protocol FeedlySearchOperationDelegate: class {
|
protocol FeedlySearchOperationDelegate: AnyObject {
|
||||||
func feedlySearchOperation(_ operation: FeedlySearchOperation, didGet response: FeedlyFeedsSearchResponse)
|
func feedlySearchOperation(_ operation: FeedlySearchOperation, didGet response: FeedlyFeedsSearchResponse)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,6 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
protocol FeedlyGetCollectionsService: class {
|
protocol FeedlyGetCollectionsService: AnyObject {
|
||||||
func getCollections(completion: @escaping (Result<[FeedlyCollection], Error>) -> ())
|
func getCollections(completion: @escaping (Result<[FeedlyCollection], Error>) -> ())
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,6 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
protocol FeedlyGetEntriesService: class {
|
protocol FeedlyGetEntriesService: AnyObject {
|
||||||
func getEntries(for ids: Set<String>, completion: @escaping (Result<[FeedlyEntry], Error>) -> ())
|
func getEntries(for ids: Set<String>, completion: @escaping (Result<[FeedlyEntry], Error>) -> ())
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,6 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
protocol FeedlyGetStreamContentsService: class {
|
protocol FeedlyGetStreamContentsService: AnyObject {
|
||||||
func getStreamContents(for resource: FeedlyResourceId, continuation: String?, newerThan: Date?, unreadOnly: Bool?, completion: @escaping (Result<FeedlyStream, Error>) -> ())
|
func getStreamContents(for resource: FeedlyResourceId, continuation: String?, newerThan: Date?, unreadOnly: Bool?, completion: @escaping (Result<FeedlyStream, Error>) -> ())
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,6 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
protocol FeedlyGetStreamIdsService: class {
|
protocol FeedlyGetStreamIdsService: AnyObject {
|
||||||
func getStreamIds(for resource: FeedlyResourceId, continuation: String?, newerThan: Date?, unreadOnly: Bool?, completion: @escaping (Result<FeedlyStreamIds, Error>) -> ())
|
func getStreamIds(for resource: FeedlyResourceId, continuation: String?, newerThan: Date?, unreadOnly: Bool?, completion: @escaping (Result<FeedlyStreamIds, Error>) -> ())
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,6 @@ enum FeedlyMarkAction: String {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protocol FeedlyMarkArticlesService: class {
|
protocol FeedlyMarkArticlesService: AnyObject {
|
||||||
func mark(_ articleIds: Set<String>, as action: FeedlyMarkAction, completion: @escaping (Result<Void, Error>) -> ())
|
func mark(_ articleIds: Set<String>, as action: FeedlyMarkAction, completion: @escaping (Result<Void, Error>) -> ())
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ import Foundation
|
|||||||
import RSWeb
|
import RSWeb
|
||||||
import Articles
|
import Articles
|
||||||
|
|
||||||
protocol WebFeedMetadataDelegate: class {
|
protocol WebFeedMetadataDelegate: AnyObject {
|
||||||
func valueDidChange(_ feedMetadata: WebFeedMetadata, key: WebFeedMetadata.CodingKeys)
|
func valueDidChange(_ feedMetadata: WebFeedMetadata, key: WebFeedMetadata.CodingKeys)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ import Foundation
|
|||||||
import RSWeb
|
import RSWeb
|
||||||
import XCTest
|
import XCTest
|
||||||
|
|
||||||
protocol TestTransportMockResponseProviding: class {
|
protocol TestTransportMockResponseProviding: AnyObject {
|
||||||
func mockResponseFileUrl(for components: URLComponents) -> URL?
|
func mockResponseFileUrl(for components: URLComponents) -> URL?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,8 +14,8 @@ let package = Package(
|
|||||||
],
|
],
|
||||||
dependencies: [
|
dependencies: [
|
||||||
.package(url: "https://github.com/Ranchero-Software/RSCore.git", .upToNextMajor(from: "1.0.0")),
|
.package(url: "https://github.com/Ranchero-Software/RSCore.git", .upToNextMajor(from: "1.0.0")),
|
||||||
.package(url: "https://github.com/Ranchero-Software/RSDatabase.git", .upToNextMajor(from: "1.0.0-beta1")),
|
.package(url: "https://github.com/Ranchero-Software/RSDatabase.git", .upToNextMajor(from: "1.0.0")),
|
||||||
.package(url: "https://github.com/Ranchero-Software/RSParser.git", .upToNextMajor(from: "2.0.0-beta1")),
|
.package(url: "https://github.com/Ranchero-Software/RSParser.git", .upToNextMajor(from: "2.0.0")),
|
||||||
.package(url: "../Articles", .upToNextMajor(from: "1.0.0")),
|
.package(url: "../Articles", .upToNextMajor(from: "1.0.0")),
|
||||||
],
|
],
|
||||||
targets: [
|
targets: [
|
||||||
|
@ -145,36 +145,19 @@ final class ArticlesTable: DatabaseTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Fetching Articles for Indexer
|
// MARK: - Fetching Articles for Indexer
|
||||||
private func articleSearchInfosQuery(with placeholders: String) -> String {
|
|
||||||
return """
|
|
||||||
SELECT
|
|
||||||
art.articleID,
|
|
||||||
art.title,
|
|
||||||
art.contentHTML,
|
|
||||||
art.contentText,
|
|
||||||
art.summary,
|
|
||||||
art.searchRowID,
|
|
||||||
(SELECT GROUP_CONCAT(name, ' ')
|
|
||||||
FROM authorsLookup as autL
|
|
||||||
JOIN authors as aut ON autL.authorID = aut.authorID
|
|
||||||
WHERE art.articleID = autL.articleID
|
|
||||||
GROUP BY autl.articleID) as authors
|
|
||||||
FROM articles as art
|
|
||||||
WHERE articleID in \(placeholders);
|
|
||||||
"""
|
|
||||||
}
|
|
||||||
|
|
||||||
func fetchArticleSearchInfos(_ articleIDs: Set<String>, in database: FMDatabase) -> Set<ArticleSearchInfo>? {
|
func fetchArticleSearchInfos(_ articleIDs: Set<String>, in database: FMDatabase) -> Set<ArticleSearchInfo>? {
|
||||||
let parameters = articleIDs.map { $0 as AnyObject }
|
let parameters = articleIDs.map { $0 as AnyObject }
|
||||||
let placeholders = NSString.rs_SQLValueList(withPlaceholders: UInt(articleIDs.count))!
|
let placeholders = NSString.rs_SQLValueList(withPlaceholders: UInt(articleIDs.count))!
|
||||||
if let resultSet = database.executeQuery(self.articleSearchInfosQuery(with: placeholders), withArgumentsIn: parameters) {
|
let sql = "select articleID, title, contentHTML, contentText, summary, searchRowID from articles where articleID in \(placeholders);";
|
||||||
|
|
||||||
|
if let resultSet = database.executeQuery(sql, withArgumentsIn: parameters) {
|
||||||
return resultSet.mapToSet { (row) -> ArticleSearchInfo? in
|
return resultSet.mapToSet { (row) -> ArticleSearchInfo? in
|
||||||
let articleID = row.string(forColumn: DatabaseKey.articleID)!
|
let articleID = row.string(forColumn: DatabaseKey.articleID)!
|
||||||
let title = row.string(forColumn: DatabaseKey.title)
|
let title = row.string(forColumn: DatabaseKey.title)
|
||||||
let contentHTML = row.string(forColumn: DatabaseKey.contentHTML)
|
let contentHTML = row.string(forColumn: DatabaseKey.contentHTML)
|
||||||
let contentText = row.string(forColumn: DatabaseKey.contentText)
|
let contentText = row.string(forColumn: DatabaseKey.contentText)
|
||||||
let summary = row.string(forColumn: DatabaseKey.summary)
|
let summary = row.string(forColumn: DatabaseKey.summary)
|
||||||
let authorsNames = row.string(forColumn: DatabaseKey.authors)
|
|
||||||
|
|
||||||
let searchRowIDObject = row.object(forColumnName: DatabaseKey.searchRowID)
|
let searchRowIDObject = row.object(forColumnName: DatabaseKey.searchRowID)
|
||||||
var searchRowID: Int? = nil
|
var searchRowID: Int? = nil
|
||||||
@ -182,7 +165,7 @@ final class ArticlesTable: DatabaseTable {
|
|||||||
searchRowID = Int(row.longLongInt(forColumn: DatabaseKey.searchRowID))
|
searchRowID = Int(row.longLongInt(forColumn: DatabaseKey.searchRowID))
|
||||||
}
|
}
|
||||||
|
|
||||||
return ArticleSearchInfo(articleID: articleID, title: title, authorsNames: authorsNames, contentHTML: contentHTML, contentText: contentText, summary: summary, searchRowID: searchRowID)
|
return ArticleSearchInfo(articleID: articleID, title: title, contentHTML: contentHTML, contentText: contentText, summary: summary, searchRowID: searchRowID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -17,7 +17,6 @@ final class ArticleSearchInfo: Hashable {
|
|||||||
|
|
||||||
let articleID: String
|
let articleID: String
|
||||||
let title: String?
|
let title: String?
|
||||||
let authorsNames: String?
|
|
||||||
let contentHTML: String?
|
let contentHTML: String?
|
||||||
let contentText: String?
|
let contentText: String?
|
||||||
let summary: String?
|
let summary: String?
|
||||||
@ -44,10 +43,9 @@ final class ArticleSearchInfo: Hashable {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
init(articleID: String, title: String?, authorsNames: String?, contentHTML: String?, contentText: String?, summary: String?, searchRowID: Int?) {
|
init(articleID: String, title: String?, contentHTML: String?, contentText: String?, summary: String?, searchRowID: Int?) {
|
||||||
self.articleID = articleID
|
self.articleID = articleID
|
||||||
self.title = title
|
self.title = title
|
||||||
self.authorsNames = authorsNames
|
|
||||||
self.contentHTML = contentHTML
|
self.contentHTML = contentHTML
|
||||||
self.contentText = contentText
|
self.contentText = contentText
|
||||||
self.summary = summary
|
self.summary = summary
|
||||||
@ -68,7 +66,7 @@ final class ArticleSearchInfo: Hashable {
|
|||||||
// MARK: Equatable
|
// MARK: Equatable
|
||||||
|
|
||||||
static func == (lhs: ArticleSearchInfo, rhs: ArticleSearchInfo) -> Bool {
|
static func == (lhs: ArticleSearchInfo, rhs: ArticleSearchInfo) -> Bool {
|
||||||
return lhs.articleID == rhs.articleID && lhs.title == rhs.title && lhs.authorsNames == rhs.authorsNames && lhs.contentHTML == rhs.contentHTML && lhs.contentText == rhs.contentText && lhs.summary == rhs.summary && lhs.searchRowID == rhs.searchRowID
|
return lhs.articleID == rhs.articleID && lhs.title == rhs.title && lhs.contentHTML == rhs.contentHTML && lhs.contentText == rhs.contentText && lhs.summary == rhs.summary && lhs.searchRowID == rhs.searchRowID
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import AppKit
|
import AppKit
|
||||||
|
|
||||||
protocol Inspector: class {
|
protocol Inspector: AnyObject {
|
||||||
|
|
||||||
var objects: [Any]? { get set }
|
var objects: [Any]? { get set }
|
||||||
var isFallbackInspector: Bool { get } // Can handle nothing-to-inspect or unexpected type of objects.
|
var isFallbackInspector: Bool { get } // Can handle nothing-to-inspect or unexpected type of objects.
|
||||||
|
@ -15,7 +15,7 @@ enum AddFeedWindowControllerType {
|
|||||||
case twitterFeed
|
case twitterFeed
|
||||||
}
|
}
|
||||||
|
|
||||||
protocol AddFeedWindowControllerDelegate: class {
|
protocol AddFeedWindowControllerDelegate: AnyObject {
|
||||||
|
|
||||||
// userEnteredURL will have already been validated and normalized.
|
// userEnteredURL will have already been validated and normalized.
|
||||||
func addFeedWindowController(_: AddFeedWindowController, userEnteredURL: URL, userEnteredTitle: String?, container: Container)
|
func addFeedWindowController(_: AddFeedWindowController, userEnteredURL: URL, userEnteredTitle: String?, container: Container)
|
||||||
|
@ -12,7 +12,7 @@ import RSCore
|
|||||||
import RSWeb
|
import RSWeb
|
||||||
import Articles
|
import Articles
|
||||||
|
|
||||||
protocol DetailWebViewControllerDelegate: class {
|
protocol DetailWebViewControllerDelegate: AnyObject {
|
||||||
func mouseDidEnter(_: DetailWebViewController, link: String)
|
func mouseDidEnter(_: DetailWebViewController, link: String)
|
||||||
func mouseDidExit(_: DetailWebViewController, link: String)
|
func mouseDidExit(_: DetailWebViewController, link: String)
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ extension Notification.Name {
|
|||||||
static let appleSideBarDefaultIconSizeChanged = Notification.Name("AppleSideBarDefaultIconSizeChanged")
|
static let appleSideBarDefaultIconSizeChanged = Notification.Name("AppleSideBarDefaultIconSizeChanged")
|
||||||
}
|
}
|
||||||
|
|
||||||
protocol SidebarDelegate: class {
|
protocol SidebarDelegate: AnyObject {
|
||||||
func sidebarSelectionDidChange(_: SidebarViewController, selectedObjects: [AnyObject]?)
|
func sidebarSelectionDidChange(_: SidebarViewController, selectedObjects: [AnyObject]?)
|
||||||
func unreadCount(for: AnyObject) -> Int
|
func unreadCount(for: AnyObject) -> Int
|
||||||
func sidebarInvalidatedRestorationState(_: SidebarViewController)
|
func sidebarInvalidatedRestorationState(_: SidebarViewController)
|
||||||
|
@ -10,7 +10,7 @@ import AppKit
|
|||||||
import Account
|
import Account
|
||||||
import Articles
|
import Articles
|
||||||
|
|
||||||
protocol TimelineContainerViewControllerDelegate: class {
|
protocol TimelineContainerViewControllerDelegate: AnyObject {
|
||||||
func timelineSelectionDidChange(_: TimelineContainerViewController, articles: [Article]?, mode: TimelineSourceMode)
|
func timelineSelectionDidChange(_: TimelineContainerViewController, articles: [Article]?, mode: TimelineSourceMode)
|
||||||
func timelineRequestedWebFeedSelection(_: TimelineContainerViewController, webFeed: WebFeed)
|
func timelineRequestedWebFeedSelection(_: TimelineContainerViewController, webFeed: WebFeed)
|
||||||
func timelineInvalidatedRestorationState(_: TimelineContainerViewController)
|
func timelineInvalidatedRestorationState(_: TimelineContainerViewController)
|
||||||
|
@ -12,7 +12,7 @@ import Articles
|
|||||||
import Account
|
import Account
|
||||||
import os.log
|
import os.log
|
||||||
|
|
||||||
protocol TimelineDelegate: class {
|
protocol TimelineDelegate: AnyObject {
|
||||||
func timelineSelectionDidChange(_: TimelineViewController, selectedArticles: [Article]?)
|
func timelineSelectionDidChange(_: TimelineViewController, selectedArticles: [Article]?)
|
||||||
func timelineRequestedWebFeedSelection(_: TimelineViewController, webFeed: WebFeed)
|
func timelineRequestedWebFeedSelection(_: TimelineViewController, webFeed: WebFeed)
|
||||||
func timelineInvalidatedRestorationState(_: TimelineViewController)
|
func timelineInvalidatedRestorationState(_: TimelineViewController)
|
||||||
|
@ -12,7 +12,7 @@ import AuthenticationServices
|
|||||||
import OAuthSwift
|
import OAuthSwift
|
||||||
import Secrets
|
import Secrets
|
||||||
|
|
||||||
protocol ExtensionPointPreferencesEnabler: class {
|
protocol ExtensionPointPreferencesEnabler: AnyObject {
|
||||||
func enable(_ extensionPointType: ExtensionPoint.Type)
|
func enable(_ extensionPointType: ExtensionPoint.Type)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ import RSCore
|
|||||||
import Account
|
import Account
|
||||||
import Articles
|
import Articles
|
||||||
|
|
||||||
protocol SidebarModelDelegate: class {
|
protocol SidebarModelDelegate: AnyObject {
|
||||||
func unreadCount(for: Feed) -> Int
|
func unreadCount(for: Feed) -> Int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ import RSCore
|
|||||||
import Account
|
import Account
|
||||||
import Articles
|
import Articles
|
||||||
|
|
||||||
protocol TimelineModelDelegate: class {
|
protocol TimelineModelDelegate: AnyObject {
|
||||||
var selectedFeedsPublisher: AnyPublisher<[Feed], Never>? { get }
|
var selectedFeedsPublisher: AnyPublisher<[Feed], Never>? { get }
|
||||||
func timelineRequestedWebFeedSelection(_: TimelineModel, webFeed: WebFeed)
|
func timelineRequestedWebFeedSelection(_: TimelineModel, webFeed: WebFeed)
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ import Articles
|
|||||||
import SafariServices
|
import SafariServices
|
||||||
import MessageUI
|
import MessageUI
|
||||||
|
|
||||||
protocol WebViewControllerDelegate: class {
|
protocol WebViewControllerDelegate: AnyObject {
|
||||||
func webViewController(_: WebViewController, articleExtractorButtonStateDidUpdate: ArticleExtractorButtonState)
|
func webViewController(_: WebViewController, articleExtractorButtonStateDidUpdate: ArticleExtractorButtonState)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ import Combine
|
|||||||
import RSCore
|
import RSCore
|
||||||
import Articles
|
import Articles
|
||||||
|
|
||||||
protocol WebViewControllerDelegate: class {
|
protocol WebViewControllerDelegate: AnyObject {
|
||||||
func webViewController(_: WebViewController, articleExtractorButtonStateDidUpdate: ArticleExtractorButtonState)
|
func webViewController(_: WebViewController, articleExtractorButtonStateDidUpdate: ArticleExtractorButtonState)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6095,8 +6095,8 @@
|
|||||||
isa = XCRemoteSwiftPackageReference;
|
isa = XCRemoteSwiftPackageReference;
|
||||||
repositoryURL = "https://github.com/Ranchero-Software/Sparkle-Binary.git";
|
repositoryURL = "https://github.com/Ranchero-Software/Sparkle-Binary.git";
|
||||||
requirement = {
|
requirement = {
|
||||||
branch = main;
|
kind = upToNextMajorVersion;
|
||||||
kind = branch;
|
minimumVersion = 2.0.0;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
5102AE4324D17E820050839C /* XCRemoteSwiftPackageReference "RSCore" */ = {
|
5102AE4324D17E820050839C /* XCRemoteSwiftPackageReference "RSCore" */ = {
|
||||||
@ -6112,7 +6112,7 @@
|
|||||||
repositoryURL = "https://github.com/Ranchero-Software/RSTree.git";
|
repositoryURL = "https://github.com/Ranchero-Software/RSTree.git";
|
||||||
requirement = {
|
requirement = {
|
||||||
kind = upToNextMajorVersion;
|
kind = upToNextMajorVersion;
|
||||||
minimumVersion = "1.0.0-beta1";
|
minimumVersion = 1.0.0;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
51383A3024D1F90E0027E272 /* XCRemoteSwiftPackageReference "RSWeb" */ = {
|
51383A3024D1F90E0027E272 /* XCRemoteSwiftPackageReference "RSWeb" */ = {
|
||||||
@ -6136,7 +6136,7 @@
|
|||||||
repositoryURL = "https://github.com/Ranchero-Software/RSDatabase.git";
|
repositoryURL = "https://github.com/Ranchero-Software/RSDatabase.git";
|
||||||
requirement = {
|
requirement = {
|
||||||
kind = upToNextMajorVersion;
|
kind = upToNextMajorVersion;
|
||||||
minimumVersion = "1.0.0-beta1";
|
minimumVersion = 1.0.0;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
51B0DF2324D2C7FA000AD99E /* XCRemoteSwiftPackageReference "RSParser" */ = {
|
51B0DF2324D2C7FA000AD99E /* XCRemoteSwiftPackageReference "RSParser" */ = {
|
||||||
@ -6144,7 +6144,7 @@
|
|||||||
repositoryURL = "https://github.com/Ranchero-Software/RSParser.git";
|
repositoryURL = "https://github.com/Ranchero-Software/RSParser.git";
|
||||||
requirement = {
|
requirement = {
|
||||||
kind = upToNextMajorVersion;
|
kind = upToNextMajorVersion;
|
||||||
minimumVersion = "2.0.0-beta1";
|
minimumVersion = 2.0.0;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
/* End XCRemoteSwiftPackageReference section */
|
/* End XCRemoteSwiftPackageReference section */
|
||||||
|
@ -69,8 +69,8 @@
|
|||||||
"repositoryURL": "https://github.com/Ranchero-Software/RSDatabase.git",
|
"repositoryURL": "https://github.com/Ranchero-Software/RSDatabase.git",
|
||||||
"state": {
|
"state": {
|
||||||
"branch": null,
|
"branch": null,
|
||||||
"revision": "3aa706f3adfc0b798a2b69cf536461c39db4d269",
|
"revision": "a6c5f1622320f745cc9a0a910d1bed1e2eaf15e3",
|
||||||
"version": "1.0.0-beta1"
|
"version": "1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -78,8 +78,8 @@
|
|||||||
"repositoryURL": "https://github.com/Ranchero-Software/RSParser.git",
|
"repositoryURL": "https://github.com/Ranchero-Software/RSParser.git",
|
||||||
"state": {
|
"state": {
|
||||||
"branch": null,
|
"branch": null,
|
||||||
"revision": "fd9b9c974d551a9c94d970da90a42571d234efd6",
|
"revision": "a4467cb6ab32d67fa8b09fcef8b234c7f96b7f9c",
|
||||||
"version": "2.0.0-beta4"
|
"version": "2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -87,8 +87,8 @@
|
|||||||
"repositoryURL": "https://github.com/Ranchero-Software/RSTree.git",
|
"repositoryURL": "https://github.com/Ranchero-Software/RSTree.git",
|
||||||
"state": {
|
"state": {
|
||||||
"branch": null,
|
"branch": null,
|
||||||
"revision": "979ed0eb610b6d95dc7adcf4620bd44205f512a6",
|
"revision": "9d051f42cfc4faa991fd79cdb32e4cc8c545e334",
|
||||||
"version": "1.0.0-beta1"
|
"version": "1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -104,9 +104,9 @@
|
|||||||
"package": "RSSparkle",
|
"package": "RSSparkle",
|
||||||
"repositoryURL": "https://github.com/Ranchero-Software/Sparkle-Binary.git",
|
"repositoryURL": "https://github.com/Ranchero-Software/Sparkle-Binary.git",
|
||||||
"state": {
|
"state": {
|
||||||
"branch": "main",
|
"branch": null,
|
||||||
"revision": "67cd26321bdf4e77954cf6de7d9e6a20544f2030",
|
"revision": "67cd26321bdf4e77954cf6de7d9e6a20544f2030",
|
||||||
"version": null
|
"version": "2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -13,7 +13,7 @@ import Articles
|
|||||||
import Account
|
import Account
|
||||||
import RSCore
|
import RSCore
|
||||||
|
|
||||||
protocol PseudoFeed: class, Feed, SmallIconProvider, PasteboardWriterOwner {
|
protocol PseudoFeed: AnyObject, Feed, SmallIconProvider, PasteboardWriterOwner {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -24,7 +24,7 @@ import Articles
|
|||||||
import Account
|
import Account
|
||||||
import RSCore
|
import RSCore
|
||||||
|
|
||||||
protocol PseudoFeed: class, Feed, SmallIconProvider {
|
protocol PseudoFeed: AnyObject, Feed, SmallIconProvider {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ let package = Package(
|
|||||||
targets: ["SyncDatabase"]),
|
targets: ["SyncDatabase"]),
|
||||||
],
|
],
|
||||||
dependencies: [
|
dependencies: [
|
||||||
.package(url: "https://github.com/Ranchero-Software/RSDatabase.git", .upToNextMajor(from: "1.0.0-beta1")),
|
.package(url: "https://github.com/Ranchero-Software/RSDatabase.git", .upToNextMajor(from: "1.0.0")),
|
||||||
.package(url: "../Articles", .upToNextMajor(from: "1.0.0")),
|
.package(url: "../Articles", .upToNextMajor(from: "1.0.0")),
|
||||||
],
|
],
|
||||||
targets: [
|
targets: [
|
||||||
|
@ -14,7 +14,7 @@ import Articles
|
|||||||
import SafariServices
|
import SafariServices
|
||||||
import MessageUI
|
import MessageUI
|
||||||
|
|
||||||
protocol WebViewControllerDelegate: class {
|
protocol WebViewControllerDelegate: AnyObject {
|
||||||
func webViewController(_: WebViewController, articleExtractorButtonStateDidUpdate: ArticleExtractorButtonState)
|
func webViewController(_: WebViewController, articleExtractorButtonStateDidUpdate: ArticleExtractorButtonState)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ import RSCore
|
|||||||
import Account
|
import Account
|
||||||
import RSTree
|
import RSTree
|
||||||
|
|
||||||
protocol MasterFeedTableViewCellDelegate: class {
|
protocol MasterFeedTableViewCellDelegate: AnyObject {
|
||||||
func masterFeedTableViewCellDisclosureDidToggle(_ sender: MasterFeedTableViewCell, expanding: Bool)
|
func masterFeedTableViewCellDisclosureDidToggle(_ sender: MasterFeedTableViewCell, expanding: Bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ import UIKit
|
|||||||
import Account
|
import Account
|
||||||
import RSCore
|
import RSCore
|
||||||
|
|
||||||
protocol ShareFolderPickerControllerDelegate: class {
|
protocol ShareFolderPickerControllerDelegate: AnyObject {
|
||||||
func shareFolderPickerDidSelect(_ container: ExtensionContainer)
|
func shareFolderPickerDidSelect(_ container: ExtensionContainer)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user