part of 'neon_news.dart'; class NewsAppSpecificOptions extends NextcloudAppOptions { NewsAppSpecificOptions(super.storage) { super.categories = [ generalCategory, articlesCategory, foldersCategory, feedsCategory, ]; super.options = [ defaultCategoryOption, articleViewTypeOption, articleDisableMarkAsReadTimeoutOption, defaultArticlesFilterOption, articlesSortPropertyOption, articlesSortBoxOrderOption, foldersSortPropertyOption, foldersSortBoxOrderOption, defaultFolderViewTypeOption, feedsSortPropertyOption, feedsSortBoxOrderOption, ]; } final generalCategory = OptionsCategory( name: (final context) => NewsLocalizations.of(context).general, ); final articlesCategory = OptionsCategory( name: (final context) => NewsLocalizations.of(context).articles, ); final foldersCategory = OptionsCategory( name: (final context) => NewsLocalizations.of(context).folders, ); final feedsCategory = OptionsCategory( name: (final context) => NewsLocalizations.of(context).feeds, ); late final defaultCategoryOption = SelectOption( storage: super.storage, category: generalCategory, key: NewsOptionKeys.defaultCategory, label: (final context) => NewsLocalizations.of(context).optionsDefaultCategory, defaultValue: DefaultCategory.articles, values: { DefaultCategory.articles: (final context) => NewsLocalizations.of(context).articles, DefaultCategory.folders: (final context) => NewsLocalizations.of(context).folders, DefaultCategory.feeds: (final context) => NewsLocalizations.of(context).feeds, }, ); late final articleViewTypeOption = SelectOption( storage: super.storage, category: articlesCategory, key: NewsOptionKeys.articleViewType, label: (final context) => NewsLocalizations.of(context).optionsArticleViewType, defaultValue: ArticleViewType.direct, values: { ArticleViewType.direct: (final context) => NewsLocalizations.of(context).optionsArticleViewTypeDirect, if (NeonPlatform.instance.canUseWebView) ArticleViewType.internalBrowser: (final context) => NewsLocalizations.of(context).optionsArticleViewTypeInternalBrowser, ArticleViewType.externalBrowser: (final context) => NewsLocalizations.of(context).optionsArticleViewTypeExternalBrowser, }, ); late final articleDisableMarkAsReadTimeoutOption = ToggleOption( storage: super.storage, category: articlesCategory, key: NewsOptionKeys.articleDisableMarkAsReadTimeout, label: (final context) => NewsLocalizations.of(context).optionsArticleDisableMarkAsReadTimeout, defaultValue: false, ); late final defaultArticlesFilterOption = SelectOption( storage: super.storage, category: articlesCategory, key: NewsOptionKeys.defaultArticlesFilter, label: (final context) => NewsLocalizations.of(context).optionsDefaultArticlesFilter, defaultValue: FilterType.unread, values: { FilterType.all: (final context) => NewsLocalizations.of(context).articlesFilterAll, FilterType.unread: (final context) => NewsLocalizations.of(context).articlesFilterUnread, FilterType.starred: (final context) => NewsLocalizations.of(context).articlesFilterStarred, }, ); late final articlesSortPropertyOption = SelectOption( storage: super.storage, category: articlesCategory, key: NewsOptionKeys.articlesSortProperty, label: (final context) => NewsLocalizations.of(context).optionsArticlesSortProperty, defaultValue: ArticlesSortProperty.publishDate, values: { ArticlesSortProperty.publishDate: (final context) => NewsLocalizations.of(context).optionsArticlesSortPropertyPublishDate, ArticlesSortProperty.alphabetical: (final context) => NewsLocalizations.of(context).optionsArticlesSortPropertyAlphabetical, ArticlesSortProperty.byFeed: (final context) => NewsLocalizations.of(context).optionsArticlesSortPropertyFeed, }, ); late final articlesSortBoxOrderOption = SelectOption( storage: super.storage, category: articlesCategory, key: NewsOptionKeys.articlesSortBoxOrder, label: (final context) => NewsLocalizations.of(context).optionsArticlesSortOrder, defaultValue: SortBoxOrder.descending, values: sortBoxOrderOptionValues, ); late final foldersSortPropertyOption = SelectOption( storage: super.storage, category: foldersCategory, key: NewsOptionKeys.foldersSortProperty, label: (final context) => NewsLocalizations.of(context).optionsFoldersSortProperty, defaultValue: FoldersSortProperty.alphabetical, values: { FoldersSortProperty.alphabetical: (final context) => NewsLocalizations.of(context).optionsFoldersSortPropertyAlphabetical, FoldersSortProperty.unreadCount: (final context) => NewsLocalizations.of(context).optionsFoldersSortPropertyUnreadCount, }, ); late final foldersSortBoxOrderOption = SelectOption( storage: super.storage, category: foldersCategory, key: NewsOptionKeys.foldersSortBoxOrder, label: (final context) => NewsLocalizations.of(context).optionsFoldersSortOrder, defaultValue: SortBoxOrder.ascending, values: sortBoxOrderOptionValues, ); late final defaultFolderViewTypeOption = SelectOption( storage: super.storage, category: foldersCategory, key: NewsOptionKeys.defaultFolderViewType, label: (final context) => NewsLocalizations.of(context).optionsDefaultFolderViewType, defaultValue: DefaultFolderViewType.articles, values: { DefaultFolderViewType.articles: (final context) => NewsLocalizations.of(context).articles, DefaultFolderViewType.feeds: (final context) => NewsLocalizations.of(context).feeds, }, ); late final feedsSortPropertyOption = SelectOption( storage: super.storage, category: feedsCategory, key: NewsOptionKeys.feedsSortProperty, label: (final context) => NewsLocalizations.of(context).optionsFeedsSortProperty, defaultValue: FeedsSortProperty.alphabetical, values: { FeedsSortProperty.alphabetical: (final context) => NewsLocalizations.of(context).optionsFeedsSortPropertyAlphabetical, FeedsSortProperty.unreadCount: (final context) => NewsLocalizations.of(context).optionsFeedsSortPropertyUnreadCount, }, ); late final feedsSortBoxOrderOption = SelectOption( storage: super.storage, category: feedsCategory, key: NewsOptionKeys.feedsSortBoxOrder, label: (final context) => NewsLocalizations.of(context).optionsFeedsSortOrder, defaultValue: SortBoxOrder.ascending, values: sortBoxOrderOptionValues, ); } enum NewsOptionKeys implements Storable { defaultCategory._('default-category'), articleViewType._('article-view-type'), articleDisableMarkAsReadTimeout._('article-disable-mark-as-read-timeout'), defaultArticlesFilter._('default-articles-filter'), articlesSortProperty._('articles-sort-property'), articlesSortBoxOrder._('articles-sort-box-order'), foldersSortProperty._('folders-sort-property'), foldersSortBoxOrder._('folders-sort-box-order'), defaultFolderViewType._('default-folder-view-type'), feedsSortProperty._('feeds-sort-property'), feedsSortBoxOrder._('feeds-sort-box-order'); const NewsOptionKeys._(this.value); @override final String value; } enum DefaultCategory { articles, folders, feeds, } enum ArticleViewType { direct, internalBrowser, externalBrowser, } enum ArticlesSortProperty { publishDate, alphabetical, byFeed, } enum FoldersSortProperty { alphabetical, unreadCount, } enum DefaultFolderViewType { articles, feeds, } enum FeedsSortProperty { alphabetical, unreadCount, }