From 75e525380bc547c357e2c1e91f145b7ed5b8d086 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sun, 29 Sep 2024 10:36:34 -0700 Subject: [PATCH] Make Article a class, which boosts performance by not having to init/destroy Article all time. --- Modules/Articles/Sources/Articles/Article.swift | 3 +-- .../ArticlesDatabase/Extensions/Article+Database.swift | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Modules/Articles/Sources/Articles/Article.swift b/Modules/Articles/Sources/Articles/Article.swift index a78343b32..62ab1406b 100644 --- a/Modules/Articles/Sources/Articles/Article.swift +++ b/Modules/Articles/Sources/Articles/Article.swift @@ -10,7 +10,7 @@ import Foundation public typealias ArticleSetBlock = (Set
) -> Void -public struct Article: Hashable, Sendable { +public final class Article: Hashable, Sendable { public let articleID: String // Unique database ID (possibly sync service ID) public let accountID: String @@ -83,7 +83,6 @@ public extension Set where Element == Article { func contains(accountID: String, articleID: String) -> Bool { return contains(where: { $0.accountID == accountID && $0.articleID == articleID}) } - } public extension Array where Element == Article { diff --git a/Modules/ArticlesDatabase/Sources/ArticlesDatabase/Extensions/Article+Database.swift b/Modules/ArticlesDatabase/Sources/ArticlesDatabase/Extensions/Article+Database.swift index 1d2f7384d..9396c6837 100644 --- a/Modules/ArticlesDatabase/Sources/ArticlesDatabase/Extensions/Article+Database.swift +++ b/Modules/ArticlesDatabase/Sources/ArticlesDatabase/Extensions/Article+Database.swift @@ -14,7 +14,7 @@ import FMDB extension Article { - init?(accountID: String, row: FMResultSet, status: ArticleStatus) { + convenience init?(accountID: String, row: FMResultSet, status: ArticleStatus) { guard let articleID = row.string(forColumn: DatabaseKey.articleID) else { assertionFailure("Expected articleID.") return nil @@ -41,7 +41,7 @@ extension Article { self.init(accountID: accountID, articleID: articleID, feedID: feedID, uniqueID: uniqueID, title: title, contentHTML: contentHTML, contentText: contentText, url: url, externalURL: externalURL, summary: summary, imageURL: imageURL, datePublished: datePublished, dateModified: dateModified, authors: nil, status: status) } - init(parsedItem: ParsedItem, maximumDateAllowed: Date, accountID: String, feedID: String, status: ArticleStatus) { + convenience init(parsedItem: ParsedItem, maximumDateAllowed: Date, accountID: String, feedID: String, status: ArticleStatus) { let authors = Author.authorsWithParsedAuthors(parsedItem.authors) // Deal with future datePublished and dateModified dates.