Merge branch 'mac-candidate'
This commit is contained in:
commit
4667e533fc
|
@ -557,8 +557,7 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container,
|
|||
}
|
||||
|
||||
public func fetchUnreadCountForToday(_ callback: @escaping (Int) -> Void) {
|
||||
let startOfToday = NSCalendar.startOfToday()
|
||||
database.fetchUnreadCount(for: flattenedFeeds().feedIDs(), since: startOfToday, callback: callback)
|
||||
database.fetchUnreadCountForToday(for: flattenedFeeds().feedIDs(), callback: callback)
|
||||
}
|
||||
|
||||
public func fetchUnreadCountForStarredArticles(_ callback: @escaping (Int) -> Void) {
|
||||
|
|
|
@ -57,7 +57,7 @@ public final class ArticlesDatabase {
|
|||
}
|
||||
|
||||
public func fetchTodayArticles(_ feedIDs: Set<String>) -> Set<Article> {
|
||||
return articlesTable.fetchTodayArticles(feedIDs)
|
||||
return articlesTable.fetchArticlesSince(feedIDs, todayCutoffDate())
|
||||
}
|
||||
|
||||
public func fetchStarredArticles(_ feedIDs: Set<String>) -> Set<Article> {
|
||||
|
@ -83,7 +83,7 @@ public final class ArticlesDatabase {
|
|||
}
|
||||
|
||||
public func fetchTodayArticlesAsync(_ feedIDs: Set<String>, _ callback: @escaping ArticleSetBlock) {
|
||||
articlesTable.fetchTodayArticlesAsync(feedIDs, callback)
|
||||
articlesTable.fetchArticlesSinceAsync(feedIDs, todayCutoffDate(), callback)
|
||||
}
|
||||
|
||||
public func fetchedStarredArticlesAsync(_ feedIDs: Set<String>, _ callback: @escaping ArticleSetBlock) {
|
||||
|
@ -100,6 +100,10 @@ public final class ArticlesDatabase {
|
|||
articlesTable.fetchUnreadCounts(feedIDs, callback)
|
||||
}
|
||||
|
||||
public func fetchUnreadCountForToday(for feedIDs: Set<String>, callback: @escaping (Int) -> Void) {
|
||||
fetchUnreadCount(for: feedIDs, since: todayCutoffDate(), callback: callback)
|
||||
}
|
||||
|
||||
public func fetchUnreadCount(for feedIDs: Set<String>, since: Date, callback: @escaping (Int) -> Void) {
|
||||
articlesTable.fetchUnreadCount(feedIDs, since, callback)
|
||||
}
|
||||
|
@ -164,4 +168,9 @@ private extension ArticlesDatabase {
|
|||
|
||||
CREATE TRIGGER if not EXISTS articles_after_delete_trigger_delete_search_text after delete on articles begin delete from search where rowid = OLD.searchRowID; end;
|
||||
"""
|
||||
|
||||
func todayCutoffDate() -> Date {
|
||||
// 28 hours previous. This is used by the Today smart feed, which should not actually empty out at midnight.
|
||||
return Date(timeIntervalSinceNow: -(60 * 60 * 28)) // This does not need to be more precise.
|
||||
}
|
||||
}
|
||||
|
|
|
@ -102,23 +102,22 @@ final class ArticlesTable: DatabaseTable {
|
|||
|
||||
// MARK: - Fetching Today Articles
|
||||
|
||||
func fetchTodayArticles(_ feedIDs: Set<String>) -> Set<Article> {
|
||||
return fetchArticles{ self.fetchTodayArticles(feedIDs, $0) }
|
||||
func fetchArticlesSince(_ feedIDs: Set<String>, _ cutoffDate: Date) -> Set<Article> {
|
||||
return fetchArticles{ self.fetchArticlesSince(feedIDs, cutoffDate, $0) }
|
||||
}
|
||||
|
||||
func fetchTodayArticlesAsync(_ feedIDs: Set<String>, _ callback: @escaping ArticleSetBlock) {
|
||||
fetchArticlesAsync({ self.fetchTodayArticles(feedIDs, $0) }, callback)
|
||||
func fetchArticlesSinceAsync(_ feedIDs: Set<String>, _ cutoffDate: Date, _ callback: @escaping ArticleSetBlock) {
|
||||
fetchArticlesAsync({ self.fetchArticlesSince(feedIDs, cutoffDate, $0) }, callback)
|
||||
}
|
||||
|
||||
private func fetchTodayArticles(_ feedIDs: Set<String>, _ database: FMDatabase) -> Set<Article> {
|
||||
private func fetchArticlesSince(_ feedIDs: Set<String>, _ cutoffDate: Date, _ database: FMDatabase) -> Set<Article> {
|
||||
// select * from articles natural join statuses where feedID in ('http://ranchero.com/xml/rss.xml') and (datePublished > ? || (datePublished is null and dateArrived > ?)
|
||||
//
|
||||
// datePublished may be nil, so we fall back to dateArrived.
|
||||
if feedIDs.isEmpty {
|
||||
return Set<Article>()
|
||||
}
|
||||
let startOfToday = NSCalendar.startOfToday()
|
||||
let parameters = feedIDs.map { $0 as AnyObject } + [startOfToday as AnyObject, startOfToday as AnyObject]
|
||||
let parameters = feedIDs.map { $0 as AnyObject } + [cutoffDate as AnyObject, cutoffDate as AnyObject]
|
||||
let placeholders = NSString.rs_SQLValueList(withPlaceholders: UInt(feedIDs.count))!
|
||||
let whereClause = "feedID in \(placeholders) and (datePublished > ? or (datePublished is null and dateArrived > ?)) and userDeleted = 0"
|
||||
return fetchArticlesWithWhereClause(database, whereClause: whereClause, parameters: parameters, withLimits: false)
|
||||
|
|
Loading…
Reference in New Issue