feat: notifications

This commit is contained in:
relikd
2025-10-25 11:32:38 +02:00
parent def174c65f
commit 0a23819428
21 changed files with 372 additions and 21 deletions

View File

@@ -13,6 +13,7 @@
/** default: @c nil */ static NSString* const Pref_modalSheetWidth = @"modalSheetWidth";
// ------ General settings ------ (Preferences > General Tab) ------
/** default: @c nil */ static NSString* const Pref_defaultHttpApplication = @"defaultHttpApplication";
/** default: @c nil */ static NSString* const Pref_notificationType = @"notificationType";
// ------ Appearance matrix ------ (Preferences > Appearance Tab) ------
/** default: @c YES */ static NSString* const Pref_globalTintMenuIcon = @"globalTintMenuBarIcon";
/** default: @c YES */ static NSString* const Pref_globalUpdateAll = @"globalUpdateAll";
@@ -49,6 +50,16 @@
void UserPrefsInit(void);
NSColor* UserPrefsColor(NSString *key, NSColor *defaultColor); // Change with: defaults write de.relikd.baRSS {KEY} -string "#FBA33A"
typedef NS_ENUM(NSInteger, NotificationType) {
NotificationTypeDisabled,
NotificationTypePerArticle,
NotificationTypePerFeed,
NotificationTypeGlobal,
};
NotificationType UserPrefsNotificationType(void);
NSString* NotificationTypeToString(NotificationType typ);
// ------ Getter ------
/// Helper method calls @c (standardUserDefaults)boolForKey:
static inline BOOL UserPrefsBool(NSString* const key) { return [[NSUserDefaults standardUserDefaults] boolForKey:key]; }

View File

@@ -44,3 +44,22 @@ NSColor* UserPrefsColor(NSString *key, NSColor *defaultColor) {
}
return defaultColor;
}
/// Convert stored notification type string into enum
NotificationType UserPrefsNotificationType(void) {
NSString *typ = UserPrefsString(Pref_notificationType);
if ([typ isEqualToString:@"article"]) return NotificationTypePerArticle;
if ([typ isEqualToString:@"feed"]) return NotificationTypePerFeed;
if ([typ isEqualToString:@"global"]) return NotificationTypeGlobal;
return NotificationTypeDisabled;
}
/// Convert enum type to storable string
NSString* NotificationTypeToString(NotificationType typ) {
switch (typ) {
case NotificationTypePerArticle: return @"article";
case NotificationTypePerFeed: return @"feed";
case NotificationTypeGlobal: return @"global";
default: return nil;
}
}