diff --git a/Frameworks/Data/Article.swift b/Frameworks/Data/Article.swift index 4f3b0a25d..17acc578a 100644 --- a/Frameworks/Data/Article.swift +++ b/Frameworks/Data/Article.swift @@ -33,13 +33,13 @@ public final class Article: Hashable { public var status: ArticleStatus? public let hashValue: Int - var feed: Feed? { + public var feed: Feed? { get { return account?.existingFeed(with: feedID) } } - init(account: Account, articleID: String?, feedID: String, uniqueID: String, title: String?, contentHTML: String?, contentText: String?, url: String?, externalURL: String?, summary: String?, imageURL: String?, bannerImageURL: String?, datePublished: Date?, dateModified: Date?, authors: [Author]?, tags: Set?, attachments: [Attachment]?, accountInfo: AccountInfo?) { + public init(account: Account, articleID: String?, feedID: String, uniqueID: String, title: String?, contentHTML: String?, contentText: String?, url: String?, externalURL: String?, summary: String?, imageURL: String?, bannerImageURL: String?, datePublished: Date?, dateModified: Date?, authors: [Author]?, tags: Set?, attachments: [Attachment]?, accountInfo: AccountInfo?) { self.account = account self.feedID = feedID diff --git a/Frameworks/Database/ArticlesTable.swift b/Frameworks/Database/ArticlesTable.swift index cc5aa9f35..86b3f0f6b 100644 --- a/Frameworks/Database/ArticlesTable.swift +++ b/Frameworks/Database/ArticlesTable.swift @@ -10,18 +10,48 @@ import Foundation import RSDatabase import Data -//final class ArticlesTable: DatabaseTable { -// -// let name: String +final class ArticlesTable: DatabaseTable { + + let name: String + let databaseIDKey = DatabaseKey.articleID // private let cachedArticles: NSMapTable = NSMapTable.weakToWeakObjects() -// -// init(name: String) { -// -// self.name = name -// } + init(name: String) { + self.name = name + } + // MARK: DatabaseTable Methods + + func objectWithRow(_ row: FMResultSet) -> DatabaseObject? { + +// if let article = articleWithRow(row) { +// +// } + return nil // TODO + } + + func save(_ objects: [DatabaseObject], in database: FMDatabase) { + // TODO + } + + // MARK: Fetching + + func fetchArticlesForFeed(_ feed: Feed) -> Set
{ + + return Set
() // TODO + } + + func fetchArticlesForFeedAsync(_ feed: Feed, _ resultBlock: @escaping ArticleResultBlock) { + + // TODO + } + + func fetchUnreadArticlesForFeeds(_ feeds: Set) -> Set
{ + + return Set
() // TODO + } + // func uniquedArticles(_ fetchedArticles: Set
, statusesTable: StatusesTable) -> Set
{ // // var articles = Set
() @@ -67,7 +97,7 @@ import Data // } // // } -//} +} //private extension ArticlesTable { diff --git a/Frameworks/Database/Database.swift b/Frameworks/Database/Database.swift index 4385a3bbd..8c1b1da8b 100644 --- a/Frameworks/Database/Database.swift +++ b/Frameworks/Database/Database.swift @@ -26,7 +26,7 @@ final class Database { private let queue: RSDatabaseQueue private let databaseFile: String -// private let articlesTable: ArticlesTable + private let articlesTable: ArticlesTable private let statusesTable: StatusesTable private let authorsLookupTable: DatabaseLookupTable private let attachmentsLookupTable: DatabaseLookupTable @@ -41,7 +41,7 @@ final class Database { self.databaseFile = databaseFile self.queue = RSDatabaseQueue(filepath: databaseFile, excludeFromBackup: false) -// self.articlesTable = ArticlesTable(name: DatabaseTableName.articles, queue: queue) + self.articlesTable = ArticlesTable(name: DatabaseTableName.articles) self.statusesTable = StatusesTable(name: DatabaseTableName.statuses) let authorsTable = AuthorsTable(name: DatabaseTableName.authors) @@ -63,7 +63,9 @@ final class Database { func fetchArticlesForFeed(_ feed: Feed) -> Set
{ - return Set
() // TODO + return articlesTable.fetchArticlesForFeed(feed) + +// return Set
() // TODO // var fetchedArticles = Set
() // let feedID = feed.feedID // @@ -78,6 +80,8 @@ final class Database { func fetchArticlesForFeedAsync(_ feed: Feed, _ resultBlock: @escaping ArticleResultBlock) { + articlesTable.fetchArticlesForFeedAsync(feed, resultBlock) + // let feedID = feed.feedID // // queue.fetch { (database: FMDatabase!) -> Void in @@ -95,7 +99,7 @@ final class Database { func fetchUnreadArticlesForFolder(_ folder: Folder) -> Set
{ - return Set
() // TODO + return articlesTable.fetchUnreadArticlesForFeeds(folder.flattenedFeeds()) // return fetchUnreadArticlesForFeedIDs(folder.flattenedFeedIDs()) } diff --git a/Frameworks/Database/Extensions/Article+Database.swift b/Frameworks/Database/Extensions/Article+Database.swift index c479de172..94056ad2a 100644 --- a/Frameworks/Database/Extensions/Article+Database.swift +++ b/Frameworks/Database/Extensions/Article+Database.swift @@ -32,12 +32,17 @@ extension Article { let bannerImageURL = row.string(forColumn: DatabaseKey.bannerImageURL) let datePublished = row.date(forColumn: DatabaseKey.datePublished) let dateModified = row.date(forColumn: DatabaseKey.dateModified) + let authors: [Author]? = nil + let tags: Set? = nil + let attachments: [Attachment]? = nil + let accountInfo: [String: Any]? = nil + // let authors = PropertyListTransformer.authorsWithRow(row) // let tags = PropertyListTransformer.tagsWithRow(row) // let attachments = PropertyListTransformer.attachmentsWithRow(row) // let accountInfo = accountInfoWithRow(row) - self.init(account: account, feedID: feedID, uniqueID: uniqueID, title: title, contentHTML: contentHTML, contentText: contentText, url: url, externalURL: externalURL, summary: summary, imageURL: imageURL, bannerImageURL: bannerImageURL, datePublished: datePublished, dateModified: dateModified, authors: authors, tags: tags, attachments: attachments, accountInfo: accountInfo) + self.init(account: account, articleID: articleID, feedID: feedID, uniqueID: uniqueID, title: title, contentHTML: contentHTML, contentText: contentText, url: url, externalURL: externalURL, summary: summary, imageURL: imageURL, bannerImageURL: bannerImageURL, datePublished: datePublished, dateModified: dateModified, authors: authors, tags: tags, attachments: attachments, accountInfo: accountInfo) } func databaseDictionary() -> NSDictionary { @@ -67,6 +72,6 @@ extension Set where Element == Article { func articleIDs() -> Set { - return Set(map { $0.databaseID }) + return Set(map { $0.databaseID }) } } diff --git a/Frameworks/RSDatabase/RSDatabase.xcodeproj/project.pbxproj b/Frameworks/RSDatabase/RSDatabase.xcodeproj/project.pbxproj index 335014e97..8072d1fd3 100755 --- a/Frameworks/RSDatabase/RSDatabase.xcodeproj/project.pbxproj +++ b/Frameworks/RSDatabase/RSDatabase.xcodeproj/project.pbxproj @@ -565,7 +565,7 @@ INFOPLIST_FILE = RSDatabase/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - OTHER_SWIFT_FLAGS = "-Xfrontend -warn-long-function-bodies=125"; + OTHER_SWIFT_FLAGS = "-Xfrontend -warn-long-function-bodies=200"; PRODUCT_BUNDLE_IDENTIFIER = com.ranchero.RSDatabase; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -586,7 +586,7 @@ INFOPLIST_FILE = RSDatabase/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - OTHER_SWIFT_FLAGS = "-Xfrontend -warn-long-function-bodies=125"; + OTHER_SWIFT_FLAGS = "-Xfrontend -warn-long-function-bodies=200"; PRODUCT_BUNDLE_IDENTIFIER = com.ranchero.RSDatabase; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES;