diff --git a/CHANGELOG.md b/CHANGELOG.md index 338ef06..985abd8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ and this project does adhere to [Semantic Versioning](https://semver.org/spec/v2 - *UI:* Accessibility hints for most UI elements - *UI*: Show welcome message upon first usage (empty db) - *UI*: Custom colors via user defaults plist (bar icon tint & unread indicator) +- *UI:* Unread indicator for groups - Welcome message also adds Github releases feed - Config URL scheme `barss:` with `open/preferences`, `config/fixcache`, and `backup/show` diff --git a/baRSS/Helper/UserPrefs.h b/baRSS/Helper/UserPrefs.h index eda8088..5c4fa80 100644 --- a/baRSS/Helper/UserPrefs.h +++ b/baRSS/Helper/UserPrefs.h @@ -36,23 +36,24 @@ // ------ General settings ------ (Preferences > General Tab) ------ /** default: @c nil */ static NSString* const Pref_defaultHttpApplication = @"defaultHttpApplication"; // ------ Appearance matrix ------ (Preferences > Appearance Tab) ------ -/** default: @c YES */ static NSString* const Pref_globalTintMenuIcon = @"globalTintMenuBarIcon"; -/** default: @c YES */ static NSString* const Pref_globalUpdateAll = @"globalUpdateAll"; -/** default: @c YES */ static NSString* const Pref_globalOpenUnread = @"globalOpenUnread"; -/** default: @c YES */ static NSString* const Pref_globalMarkRead = @"globalMarkRead"; -/** default: @c YES */ static NSString* const Pref_globalMarkUnread = @"globalMarkUnread"; -/** default: @c YES */ static NSString* const Pref_globalUnreadCount = @"globalUnreadCount"; -/** default: @c YES */ static NSString* const Pref_groupOpenUnread = @"groupOpenUnread"; -/** default: @c YES */ static NSString* const Pref_groupMarkRead = @"groupMarkRead"; -/** default: @c YES */ static NSString* const Pref_groupMarkUnread = @"groupMarkUnread"; -/** default: @c YES */ static NSString* const Pref_groupUnreadCount = @"groupUnreadCount"; -/** default: @c YES */ static NSString* const Pref_feedOpenUnread = @"feedOpenUnread"; -/** default: @c YES */ static NSString* const Pref_feedMarkRead = @"feedMarkRead"; -/** default: @c YES */ static NSString* const Pref_feedMarkUnread = @"feedMarkUnread"; -/** 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_feedTruncateTitle = @"feedTruncateTitle"; -/** default: @c NO */ static NSString* const Pref_feedLimitArticles = @"feedLimitArticles"; +/** default: @c YES */ static NSString* const Pref_globalTintMenuIcon = @"globalTintMenuBarIcon"; +/** default: @c YES */ static NSString* const Pref_globalUpdateAll = @"globalUpdateAll"; +/** default: @c YES */ static NSString* const Pref_globalOpenUnread = @"globalOpenUnread"; +/** default: @c YES */ static NSString* const Pref_globalMarkRead = @"globalMarkRead"; +/** default: @c YES */ static NSString* const Pref_globalMarkUnread = @"globalMarkUnread"; +/** default: @c YES */ static NSString* const Pref_globalUnreadCount = @"globalUnreadCount"; +/** default: @c YES */ static NSString* const Pref_groupOpenUnread = @"groupOpenUnread"; +/** default: @c YES */ static NSString* const Pref_groupMarkRead = @"groupMarkRead"; +/** default: @c YES */ static NSString* const Pref_groupMarkUnread = @"groupMarkUnread"; +/** default: @c YES */ static NSString* const Pref_groupUnreadCount = @"groupUnreadCount"; +/** default: @c NO */ static NSString* const Pref_groupUnreadIndicator = @"groupUnreadIndicator"; +/** default: @c YES */ static NSString* const Pref_feedOpenUnread = @"feedOpenUnread"; +/** default: @c YES */ static NSString* const Pref_feedMarkRead = @"feedMarkRead"; +/** default: @c YES */ static NSString* const Pref_feedMarkUnread = @"feedMarkUnread"; +/** 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_feedTruncateTitle = @"feedTruncateTitle"; +/** default: @c NO */ static NSString* const Pref_feedLimitArticles = @"feedLimitArticles"; // ------ 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 e2b029a..2fd3c0d 100644 --- a/baRSS/Helper/UserPrefs.m +++ b/baRSS/Helper/UserPrefs.m @@ -39,7 +39,8 @@ void UserPrefsInit(void) { Pref_globalMarkUnread, Pref_groupMarkUnread, Pref_feedMarkUnread, Pref_globalUnreadCount, Pref_groupUnreadCount, Pref_feedUnreadCount, Pref_feedUnreadIndicator]); - defaultsAppend(defs, @NO, @[Pref_feedTruncateTitle, + defaultsAppend(defs, @NO, @[Pref_groupUnreadIndicator, + Pref_feedTruncateTitle, Pref_feedLimitArticles]); // Display limits & truncation ( defaults write de.relikd.baRSS {KEY} -int 10 ) [defs setObject:[NSNumber numberWithUnsignedInteger:10] forKey:Pref_openFewLinksLimit]; diff --git a/baRSS/Info.plist b/baRSS/Info.plist index 90d1b57..369dfe4 100644 --- a/baRSS/Info.plist +++ b/baRSS/Info.plist @@ -70,7 +70,7 @@ CFBundleVersion - 14336 + 14344 LSApplicationCategoryType public.app-category.news LSMinimumSystemVersion diff --git a/baRSS/Preferences/Appearance Tab/SettingsAppearanceView.m b/baRSS/Preferences/Appearance Tab/SettingsAppearanceView.m index 344bb88..e22a221 100644 --- a/baRSS/Preferences/Appearance Tab/SettingsAppearanceView.m +++ b/baRSS/Preferences/Appearance Tab/SettingsAppearanceView.m @@ -51,7 +51,7 @@ [self entry:NSLocalizedString(@"Mark all read", nil) c1:Pref_globalMarkRead c2:Pref_groupMarkRead c3:Pref_feedMarkRead]; [self entry:NSLocalizedString(@"Mark all unread", nil) c1:Pref_globalMarkUnread c2:Pref_groupMarkUnread c3:Pref_feedMarkUnread]; [self entry:NSLocalizedString(@"Number of unread articles", nil) c1:Pref_globalUnreadCount c2:Pref_groupUnreadCount c3:Pref_feedUnreadCount]; - [self entry:NSLocalizedString(@"Indicator for unread articles", nil) c1:nil c2:nil c3:Pref_feedUnreadIndicator]; + [self entry:NSLocalizedString(@"Indicator for unread articles", nil) c1:nil c2:Pref_groupUnreadIndicator c3:Pref_feedUnreadIndicator]; [[self entry:NSLocalizedString(@"Truncate article title", nil) c1:nil c2:nil c3:Pref_feedTruncateTitle] tooltip:NSLocalizedString(@"Truncate article title after 60 characters", nil)]; [[self entry:NSLocalizedString(@"Limit number of articles", nil) c1:nil c2:nil c3:Pref_feedLimitArticles] diff --git a/baRSS/Status Bar Menu/NSMenu+Ext.m b/baRSS/Status Bar Menu/NSMenu+Ext.m index 8ba0d3b..4961b8e 100644 --- a/baRSS/Status Bar Menu/NSMenu+Ext.m +++ b/baRSS/Status Bar Menu/NSMenu+Ext.m @@ -246,6 +246,7 @@ typedef NS_ENUM(NSInteger, MenuItemTag) { - (void)setTitleCount:(NSUInteger)count { if (self.tag == TagTitleCountVisible) { self.tag = 0; // clear mask + self.state = NSControlStateValueOff; NSUInteger loc = [self.title rangeOfString:@" (" options:NSLiteralSearch | NSBackwardsSearch].location; if (loc != NSNotFound) self.title = [self.title substringToIndex:loc]; @@ -253,6 +254,9 @@ typedef NS_ENUM(NSInteger, MenuItemTag) { if (count > 0 && UserPrefsBool(self.submenu.isFeedMenu ? 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)) + self.state = NSControlStateValueOn; } }