ref: StoreCoordinator updateArticles
This commit is contained in:
@@ -30,6 +30,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
|
|
||||||
// Unread articles list & mark articled read
|
// Unread articles list & mark articled read
|
||||||
+ (NSArray<FeedArticle*>*)articlesAtPath:(nullable NSString*)path isFeed:(BOOL)feedFlag sorted:(BOOL)sortFlag unread:(BOOL)readFlag inContext:(NSManagedObjectContext*)moc limit:(NSUInteger)limit;
|
+ (NSArray<FeedArticle*>*)articlesAtPath:(nullable NSString*)path isFeed:(BOOL)feedFlag sorted:(BOOL)sortFlag unread:(BOOL)readFlag inContext:(NSManagedObjectContext*)moc limit:(NSUInteger)limit;
|
||||||
|
+ (void)updateArticles:(NSArray<FeedArticle*>*)list markRead:(BOOL)markRead andOpen:(BOOL)openLinks inContext:(NSManagedObjectContext*)moc;
|
||||||
|
|
||||||
// Restore sound state
|
// Restore sound state
|
||||||
+ (void)cleanupAndShowAlert:(BOOL)flag;
|
+ (void)cleanupAndShowAlert:(BOOL)flag;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#import "AppHook.h"
|
#import "AppHook.h"
|
||||||
#import "Constants.h"
|
#import "Constants.h"
|
||||||
#import "FaviconDownload.h"
|
#import "FaviconDownload.h"
|
||||||
|
#import "UserPrefs.h"
|
||||||
#import "Feed+Ext.h"
|
#import "Feed+Ext.h"
|
||||||
#import "NSURL+Ext.h"
|
#import "NSURL+Ext.h"
|
||||||
#import "NSError+Ext.h"
|
#import "NSError+Ext.h"
|
||||||
@@ -202,6 +203,37 @@
|
|||||||
return [fr fetchAllRows:moc];
|
return [fr fetchAllRows:moc];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
For provided articles, pen link, mark read, and save changes.
|
||||||
|
@warning Will invalidate context.
|
||||||
|
|
||||||
|
@param list Should only contain @c FeedArticle
|
||||||
|
@param markRead Whether the articles should be marked read or unread.
|
||||||
|
@param openLinks Whether to open the link or mark read without opening
|
||||||
|
*/
|
||||||
|
+ (void)updateArticles:(NSArray<FeedArticle*>*)list markRead:(BOOL)markRead andOpen:(BOOL)openLinks inContext:(NSManagedObjectContext*)moc {
|
||||||
|
BOOL success = NO;
|
||||||
|
if (openLinks) {
|
||||||
|
NSMutableArray<NSURL*> *urls = [NSMutableArray arrayWithCapacity:list.count];
|
||||||
|
for (FeedArticle *fa in list) {
|
||||||
|
if (fa.link.length > 0)
|
||||||
|
[urls addObject:[NSURL URLWithString:fa.link]];
|
||||||
|
}
|
||||||
|
if (urls.count > 0)
|
||||||
|
success = UserPrefsOpenURLs(urls);
|
||||||
|
}
|
||||||
|
// if success == NO, do not modify unread state
|
||||||
|
if (!openLinks || success) {
|
||||||
|
for (FeedArticle *fa in list) {
|
||||||
|
fa.unread = !markRead;
|
||||||
|
}
|
||||||
|
[self saveContext:moc andParent:YES];
|
||||||
|
[moc reset];
|
||||||
|
NSNumber *num = [NSNumber numberWithInteger: (markRead ? -1 : +1) * (NSInteger)list.count ];
|
||||||
|
PostNotification(kNotificationTotalUnreadCountChanged, num);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#pragma mark - Restore Sound State
|
#pragma mark - Restore Sound State
|
||||||
|
|
||||||
|
|||||||
@@ -181,27 +181,7 @@ typedef NS_ENUM(NSInteger, MenuItemTag) {
|
|||||||
}
|
}
|
||||||
NSManagedObjectContext *moc = [StoreCoordinator createChildContext];
|
NSManagedObjectContext *moc = [StoreCoordinator createChildContext];
|
||||||
NSArray<FeedArticle*> *list = [StoreCoordinator articlesAtPath:path isFeed:isFeedMenu sorted:openLinks unread:markRead inContext:moc limit:limit];
|
NSArray<FeedArticle*> *list = [StoreCoordinator articlesAtPath:path isFeed:isFeedMenu sorted:openLinks unread:markRead inContext:moc limit:limit];
|
||||||
|
[StoreCoordinator updateArticles:list markRead:markRead andOpen:openLinks inContext:moc];
|
||||||
BOOL success = NO;
|
|
||||||
if (openLinks) {
|
|
||||||
NSMutableArray<NSURL*> *urls = [NSMutableArray arrayWithCapacity:list.count];
|
|
||||||
for (FeedArticle *fa in list) {
|
|
||||||
if (fa.link.length > 0)
|
|
||||||
[urls addObject:[NSURL URLWithString:fa.link]];
|
|
||||||
}
|
|
||||||
if (urls.count > 0)
|
|
||||||
success = UserPrefsOpenURLs(urls);
|
|
||||||
}
|
|
||||||
// if success == NO, do not modify unread state
|
|
||||||
if (!openLinks || success) {
|
|
||||||
for (FeedArticle *fa in list) {
|
|
||||||
fa.unread = !markRead;
|
|
||||||
}
|
|
||||||
[StoreCoordinator saveContext:moc andParent:YES];
|
|
||||||
[moc reset];
|
|
||||||
NSNumber *num = [NSNumber numberWithInteger: (markRead ? -1 : +1) * (NSInteger)list.count ];
|
|
||||||
PostNotification(kNotificationTotalUnreadCountChanged, num);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
Reference in New Issue
Block a user