From 2e77f67102e702e0618601bedb8a02219ad5508c Mon Sep 17 00:00:00 2001 From: relikd Date: Thu, 11 Dec 2025 15:46:40 +0100 Subject: [PATCH] feat: introduce new Pref_article options --- baRSS/Core Data/FeedArticle+Ext.m | 2 +- baRSS/Helper/UserPrefs.h | 4 +++- baRSS/Helper/UserPrefs.m | 6 +++--- baRSS/Status Bar Menu/BarMenu.m | 2 +- baRSS/Status Bar Menu/BarStatusItem.m | 2 +- baRSS/Status Bar Menu/NSMenu+Ext.m | 9 +++++---- 6 files changed, 14 insertions(+), 11 deletions(-) diff --git a/baRSS/Core Data/FeedArticle+Ext.m b/baRSS/Core Data/FeedArticle+Ext.m index ae17cdb..25c6676 100644 --- a/baRSS/Core Data/FeedArticle+Ext.m +++ b/baRSS/Core Data/FeedArticle+Ext.m @@ -60,7 +60,7 @@ NSMenuItem *item = [NSMenuItem new]; item.title = [self shortArticleName]; item.enabled = (self.link.length > 0); - item.state = (self.unread && UserPrefsBool(Pref_feedUnreadIndicator) ? NSControlStateValueOn : NSControlStateValueOff); + item.state = (self.unread && UserPrefsBool(Pref_articleUnreadIndicator) ? NSControlStateValueOn : NSControlStateValueOff); item.onStateImage = [NSImage imageNamed:RSSImageMenuItemUnread]; item.accessibilityLabel = (self.unread ? NSLocalizedString(@"article: unread", @"accessibility label, feed menu item") : NSLocalizedString(@"article: read", @"accessibility label, feed menu item")); // truncate tooltip diff --git a/baRSS/Helper/UserPrefs.h b/baRSS/Helper/UserPrefs.h index 75c0d15..312135c 100644 --- a/baRSS/Helper/UserPrefs.h +++ b/baRSS/Helper/UserPrefs.h @@ -33,9 +33,11 @@ /** default: @c YES */ static NSString* const Pref_feedMarkUnread = @"feedMarkUnread"; /** default: @c NO */ static NSString* const Pref_feedUnreadOnly = @"feedUnreadOnly"; /** default: @c YES */ static NSString* const Pref_feedUnreadCount = @"feedUnreadCount"; -/** default: @c YES */ static NSString* const Pref_feedUnreadIndicator = @"feedUnreadIndicator"; +/** default: @c NO */ static NSString* const Pref_feedUnreadIndicator = @"feedUnreadIndicator"; /** default: @c NO */ static NSString* const Pref_feedTruncateTitle = @"feedTruncateTitle"; /** default: @c NO */ static NSString* const Pref_feedLimitArticles = @"feedLimitArticles"; +/** default: @c NO */ static NSString* const Pref_articleUnreadOnly = @"articleUnreadOnly"; +/** default: @c YES */ static NSString* const Pref_articleUnreadIndicator = @"articleUnreadIndicator"; // ------ Hidden preferences ------ only modifiable via `defaults write de.relikd.baRSS {KEY}` ------ /** default: @c 10 */ static NSString* const Pref_openFewLinksLimit = @"openFewLinksLimit"; /** default: @c 60 */ static NSString* const Pref_shortArticleNamesLimit = @"shortArticleNamesLimit"; diff --git a/baRSS/Helper/UserPrefs.m b/baRSS/Helper/UserPrefs.m index 45c09f5..2d559c6 100644 --- a/baRSS/Helper/UserPrefs.m +++ b/baRSS/Helper/UserPrefs.m @@ -17,12 +17,12 @@ void UserPrefsInit(void) { Pref_globalMarkRead, Pref_groupMarkRead, Pref_feedMarkRead, Pref_globalMarkUnread, Pref_groupMarkUnread, Pref_feedMarkUnread, Pref_globalUnreadCount, Pref_groupUnreadCount, Pref_feedUnreadCount, - Pref_feedUnreadIndicator + Pref_articleUnreadIndicator ]); defaultsAppend(defs, @NO, @[ Pref_globalToggleHidden, - Pref_groupUnreadOnly, Pref_feedUnreadOnly, - Pref_groupUnreadIndicator, + Pref_groupUnreadOnly, Pref_feedUnreadOnly, Pref_articleUnreadOnly, + Pref_groupUnreadIndicator, Pref_feedUnreadIndicator, Pref_feedTruncateTitle, Pref_feedLimitArticles ]); diff --git a/baRSS/Status Bar Menu/BarMenu.m b/baRSS/Status Bar Menu/BarMenu.m index 24de513..60da071 100644 --- a/baRSS/Status Bar Menu/BarMenu.m +++ b/baRSS/Status Bar Menu/BarMenu.m @@ -75,7 +75,7 @@ NSInteger mc = NSIntegerMax; if (UserPrefsBool(Pref_feedLimitArticles)) mc = UserPrefsInt(Pref_articlesInMenuLimit); - BOOL onlyUnread = UserPrefsBool(Pref_feedUnreadOnly); + BOOL onlyUnread = UserPrefsBool(Pref_articleUnreadOnly); for (FeedArticle *fa in sortedList) { if (onlyUnread && !fa.unread && !_showHidden) diff --git a/baRSS/Status Bar Menu/BarStatusItem.m b/baRSS/Status Bar Menu/BarStatusItem.m index c2420ec..583f144 100644 --- a/baRSS/Status Bar Menu/BarStatusItem.m +++ b/baRSS/Status Bar Menu/BarStatusItem.m @@ -188,7 +188,7 @@ if (UserPrefsBool(Pref_globalToggleHidden)) { NSMenuItem *toggleHidden = [menu addItemWithTitle:NSLocalizedString(@"Show hidden feeds", nil) action:@selector(toggleHiddenArticles) keyEquivalent:@"h"]; toggleHidden.target = self; - toggleHidden.enabled = !self.holdingOptKey && (UserPrefsBool(Pref_groupUnreadOnly) || UserPrefsBool(Pref_feedUnreadOnly)); + toggleHidden.enabled = !self.holdingOptKey && (UserPrefsBool(Pref_groupUnreadOnly) || UserPrefsBool(Pref_feedUnreadOnly) || UserPrefsBool(Pref_articleUnreadOnly)); [toggleHidden setState:self.barMenu.showHidden ? NSControlStateValueOn : NSControlStateValueOff]; if (!toggleHidden.enabled) { toggleHidden.toolTip = self.holdingOptKey diff --git a/baRSS/Status Bar Menu/NSMenu+Ext.m b/baRSS/Status Bar Menu/NSMenu+Ext.m index 06c3e3b..b6baf22 100644 --- a/baRSS/Status Bar Menu/NSMenu+Ext.m +++ b/baRSS/Status Bar Menu/NSMenu+Ext.m @@ -58,8 +58,8 @@ typedef NS_ENUM(NSInteger, MenuItemTag) { // Check user preferences to show only unread entries if (unread == 0 && !showHidden - && (fg.type == FEED || fg.type == GROUP) - && UserPrefsBool(Pref_groupUnreadOnly)) { + && ((fg.type == GROUP && UserPrefsBool(Pref_groupUnreadOnly)) + || (fg.type == FEED && UserPrefsBool(Pref_feedUnreadOnly)))) { item.hidden = YES; } @@ -212,11 +212,12 @@ typedef NS_ENUM(NSInteger, MenuItemTag) { if (loc != NSNotFound) self.title = [self.title substringToIndex:loc]; } - if (count > 0 && UserPrefsBool(self.submenu.isFeedMenu ? Pref_feedUnreadCount : Pref_groupUnreadCount)) { + BOOL isFeed = self.submenu.isFeedMenu; + if (count > 0 && UserPrefsBool(isFeed ? Pref_feedUnreadCount : Pref_groupUnreadCount)) { self.tag = TagTitleCountVisible; // apply new mask self.title = [self.title stringByAppendingFormat:@" (%ld)", count]; self.onStateImage = [NSImage imageNamed:RSSImageMenuItemUnread]; - if (UserPrefsBool(Pref_groupUnreadIndicator)) + if (UserPrefsBool(isFeed ? Pref_feedUnreadIndicator : Pref_groupUnreadIndicator)) self.state = NSControlStateValueOn; } }