Merge branch 'main' into pr/1695

This commit is contained in:
Fábio Oliveira 2021-02-11 01:37:01 +01:00 committed by GitHub
commit 3e082f938a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
44 changed files with 67 additions and 86 deletions

View File

@ -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")),

View File

@ -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)
} }

View File

@ -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 }

View File

@ -8,7 +8,7 @@
import Foundation import Foundation
public protocol FeedProviderManagerDelegate: class { public protocol FeedProviderManagerDelegate: AnyObject {
var activeFeedProviders: [FeedProvider] { get } var activeFeedProviders: [FeedProvider] { get }
} }

View File

@ -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 }

View File

@ -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) -> ())

View File

@ -8,7 +8,7 @@
import Foundation import Foundation
protocol FeedlyEntryIdentifierProviding: class { protocol FeedlyEntryIdentifierProviding: AnyObject {
var entryIds: Set<String> { get } var entryIds: Set<String> { get }
} }

View File

@ -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)
} }

View File

@ -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>) -> ())
} }

View File

@ -8,7 +8,7 @@
import Foundation import Foundation
protocol FeedlyCheckpointOperationDelegate: class { protocol FeedlyCheckpointOperationDelegate: AnyObject {
func feedlyCheckpointOperationDidReachCheckpoint(_ operation: FeedlyCheckpointOperation) func feedlyCheckpointOperationDidReachCheckpoint(_ operation: FeedlyCheckpointOperation)
} }

View File

@ -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 }
} }

View File

@ -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)
} }

View File

@ -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)
} }

View File

@ -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)
} }

View File

@ -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)
} }

View File

@ -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)
} }

View File

@ -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>) -> ())
} }

View File

@ -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>) -> ())
} }

View File

@ -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>) -> ())
} }

View File

@ -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>) -> ())
} }

View File

@ -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>) -> ())
} }

View File

@ -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)
} }

View File

@ -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?
} }

View File

@ -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: [

View File

@ -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

View File

@ -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
} }
} }

View File

@ -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.

View File

@ -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)

View File

@ -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)
} }

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)
} }

View File

@ -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
} }

View File

@ -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)
} }

View File

@ -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)
} }

View File

@ -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)
} }

View File

@ -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 */

View File

@ -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"
} }
}, },
{ {

View File

@ -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 {
} }

View File

@ -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: [

View File

@ -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)
} }

View File

@ -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)
} }

View File

@ -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)
} }