From def174c65fbeea4da91c4b3b5dfc494ad0d1395c Mon Sep 17 00:00:00 2001 From: relikd Date: Fri, 24 Oct 2025 02:19:12 +0200 Subject: [PATCH] ref: StoreCoordinator updateArticles --- baRSS/Core Data/StoreCoordinator.h | 1 + baRSS/Core Data/StoreCoordinator.m | 32 ++++++++++++++++++++++++++++++ baRSS/Status Bar Menu/NSMenu+Ext.m | 22 +------------------- 3 files changed, 34 insertions(+), 21 deletions(-) diff --git a/baRSS/Core Data/StoreCoordinator.h b/baRSS/Core Data/StoreCoordinator.h index d1c9662..87cc44b 100644 --- a/baRSS/Core Data/StoreCoordinator.h +++ b/baRSS/Core Data/StoreCoordinator.h @@ -30,6 +30,7 @@ NS_ASSUME_NONNULL_BEGIN // Unread articles list & mark articled read + (NSArray*)articlesAtPath:(nullable NSString*)path isFeed:(BOOL)feedFlag sorted:(BOOL)sortFlag unread:(BOOL)readFlag inContext:(NSManagedObjectContext*)moc limit:(NSUInteger)limit; ++ (void)updateArticles:(NSArray*)list markRead:(BOOL)markRead andOpen:(BOOL)openLinks inContext:(NSManagedObjectContext*)moc; // Restore sound state + (void)cleanupAndShowAlert:(BOOL)flag; diff --git a/baRSS/Core Data/StoreCoordinator.m b/baRSS/Core Data/StoreCoordinator.m index 7b58120..f27049b 100644 --- a/baRSS/Core Data/StoreCoordinator.m +++ b/baRSS/Core Data/StoreCoordinator.m @@ -2,6 +2,7 @@ #import "AppHook.h" #import "Constants.h" #import "FaviconDownload.h" +#import "UserPrefs.h" #import "Feed+Ext.h" #import "NSURL+Ext.h" #import "NSError+Ext.h" @@ -202,6 +203,37 @@ 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*)list markRead:(BOOL)markRead andOpen:(BOOL)openLinks inContext:(NSManagedObjectContext*)moc { + BOOL success = NO; + if (openLinks) { + NSMutableArray *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 diff --git a/baRSS/Status Bar Menu/NSMenu+Ext.m b/baRSS/Status Bar Menu/NSMenu+Ext.m index 1209988..758d922 100644 --- a/baRSS/Status Bar Menu/NSMenu+Ext.m +++ b/baRSS/Status Bar Menu/NSMenu+Ext.m @@ -181,27 +181,7 @@ typedef NS_ENUM(NSInteger, MenuItemTag) { } NSManagedObjectContext *moc = [StoreCoordinator createChildContext]; NSArray *list = [StoreCoordinator articlesAtPath:path isFeed:isFeedMenu sorted:openLinks unread:markRead inContext:moc limit:limit]; - - BOOL success = NO; - if (openLinks) { - NSMutableArray *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); - } + [StoreCoordinator updateArticles:list markRead:markRead andOpen:openLinks inContext:moc]; } @end