ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

NewsBlur 按订阅源/按文件夹自动标记已读(Per-feed Per-folder Auto-Mark-as-Read)配置指南

NewsBlur 按订阅源/按文件夹自动标记已读(Per-feed  Per-folder Auto-Mark-as-Read)配置指南 后端前端社交人工智能【免费下载链接】NewsBlurNewsBlur is a personal news reader that brings people together to talk about the world. A new sound of an old instrument.项目地址https://gitcode.com/gh_mirrors/ne/NewsBlur点击查看免费下载不同订阅源的信息价值衰减速度完全不同有的源值得逐条读完有的源一周扫一眼即可而高频更新的源隔一两天没看就失去了补读的意义。NewsBlur 的 Premium Archive 用户此前只能设置一个全站统一的「未读天数」这个一刀切的规则很难覆盖复杂的订阅结构。本文介绍 NewsBlur 在 web 端新增的**按订阅源per-feed与按文件夹per-folder自动标记已读Auto Mark as Read**功能从界面的操作入口、滑杆取值语义到「文件夹 → 订阅源 → 全站」三级继承规则、站点设置对话框再到后端的数据模型、继承解析算法与保存接口帮助你精确控制每一类内容的保留时长。功能概览与适用场景在引入该功能之前NewsBlur 只有两种粒度控制未读故事的生命周期Premium Archive 用户的全站设置位于 Manage → Preferences → General → Days of unreads未读天数对所有订阅源一视同仁非 Archive 用户的固定默认值由后端settings.DAYS_OF_UNREAD/DAYS_OF_UNREAD_FREE决定无法自定义。「全站一套规则」带来的典型问题你既想把「必读」源的故事永远保留又想自动清理每天几百条的新闻流。2026 年 1 月上线的 per-feed / per-folder 自动标记已读功能正好解决了这个粒度问题其核心思路在 apps/reader/models.py 的文档字符串中写得很明确Site-wide setting (Profile.days_of_unread) 是默认值Folder settings 可以覆盖 site-wide 设置嵌套文件夹默认继承父文件夹除非被显式覆盖Feed settingsUserSubscription.auto_mark_read_days优先级最高覆盖文件夹设置。操作入口Feed options 弹出层Feed options popover打开订阅源标题栏上的齿轮图标即可看到新增的Auto Mark as Read区块。点击该区块即可为该订阅源设置故事保持未读的天数。滑杆与选项的取值语义如下选项存储值含义Default继承null/None不在此层做任何设置向上继承父文件夹或全站设置Days天数1 ~ 365故事超过该天数仍未读NewsBlur 自动将其标记为已读Never永不0显式关闭自动过期无论故事多旧都保留为未读滑块最右侧为「never」区域适合那些你希望逐条读完、不因时间流逝而丢失的订阅源。滑块下方的状态文本会明确标注当前生效的设置来自哪里全站偏好、某个父文件夹还是本订阅源的显式设置。文件夹继承从文件夹向下级联设置会从文件夹级联到其中的订阅源。例如你把「News」文件夹设为 2 天其内部所有订阅源除非各自显式覆盖都会继承 2 天规则。官方博客给出的典型组织方式Must Read 文件夹设为 Never任何故事都不随时间过期News 文件夹设为 2 天新闻时效性短、过期快Blogs 文件夹设为 30 天长文值得在一个月内反复回看单个订阅源仍可覆盖所在文件夹的设置。这一「越靠近叶子节点优先级越高」的设计让「按内容衰减速度组织订阅」成为可能把高时效源集中在一个文件夹统一老化把长读源放进另一个文件夹长期保留。站点设置对话框Site settings除了 feed options 弹出层右键点击某个订阅源并选择Site settings也能进入同样的 Auto Mark as Read 控件该对话框的样式已按弹出层风格重新设计。两处入口最终写入的是同一个后端设置字段方便你在完整站点设置页面里一并调整分类器等其他选项。后端实现数据模型与继承解析订阅源级设置UserSubscription.auto_mark_read_days每条用户订阅user feed 唯一在 apps/reader/models.py 上持有auto_mark_read_days models.IntegerField(nullTrue, blankTrue, defaultNone) # None inherit from folder/site-wide # 0 never auto-mark (explicit override to disable aging) # 1-365 days until auto-mark该字段由迁移 apps/reader/migrations/0002_add_auto_mark_read_days.py 添加。在canonical()序列化时apps/reader/models.py只要设置了非None值就会以feed[auto_mark_read_days]的形式下发给前端。文件夹级设置MongoDB 集合folder_auto_mark_read文件夹设置存储于 MongoEngine 文档MFolderAutoMarkReadapps/reader/models.py集合名为folder_auto_mark_read以user_id folder_title建立唯一索引。其类方法提供了完整的 CRUD 与联动逻辑get_folder_setting(user_id, folder_title)读取单个文件夹设置get_folder_settings_for_user(user_id)读取用户全部文件夹设置避免 N1 查询save_folder_setting(...)保存或更新传入None时删除该记录即恢复继承delete_folder_setting(...)/rename_folder_setting(...)删除设置、文件夹重命名时同步更新folder_title。继承解析get_effective_auto_mark_read_days()NewsBlur 用一个专门的解析方法把三级继承规则实现为确定性算法见 apps/reader/models.py订阅源自身设置了auto_mark_read_days若为0返回(None, feed)即「显式永不自动标记」否则返回(天数, feed)。否则定位包含该订阅源的文件夹逐个文件夹向上查找文件夹层级用 - 作为分隔符如Parent - Child - Grandchild见_resolve_folder_auto_mark_read找到该文件夹的显式设置即返回(天数, folder:FolderName)文件夹设为0时返回(None, folder:FolderName)文件夹无设置则递归检查其父文件夹。仍未命中时回退到全站设置仅对is_archive用户返回(profile.days_of_unread, site-wide)apps/reader/models.py。全部未命中则返回(None, default)表示不做任何自动老化。生效时机未读截止日期与重算get_auto_mark_read_cutoff()apps/reader/models.py把天数换算为截止时刻utcnow() - timedelta(daysdays)若有效设置为None则不施加老化。在calculate_feed_scores()中apps/reader/models.pyper-feed/per-folder 设置优先于全站的user.profile.unread_cutoff并会以截止日期更新mark_read_date。全站基准线本身定义在 apps/profile/models.pyArchive 用户取days_of_unread可自定义Premium 用户取settings.DAYS_OF_UNREAD免费用户取settings.DAYS_OF_UNREAD_FREE。为保证改动立即反映到未读计数保存设置时都会置位needs_unread_recalc True由后台任务重算相关订阅源的未读数。保存接口Ajax 端点与参数三个 Ajax 端点定义在 apps/reader/urls.py实现在 apps/reader/views.py端点说明关键 POST 参数save_feed_auto_mark_read保存单个订阅源设置feed_id、auto_mark_read_dayssave_folder_auto_mark_read保存文件夹设置folder_title、auto_mark_read_daysget_auto_mark_read_settings拉取用户全部设置无GET/POST 均可参数语义apps/reader/views.pyauto_mark_read_days1-365为天数0为永不自动标记null/ 空字符串 为继承恢复 Default。两个保存端点均做0 ~ 365的边界校验越界返回Days must be between 0 and 365。两个保存端点都会先检查user.profile.is_archive非 Archive 订阅用户返回This feature requires the Archive subscription——这是该功能的付费门槛校验。save_folder_auto_mark_read还会在保存后遍历UserSubscriptionFolders的扁平文件夹树把目标文件夹及其所有嵌套子文件夹ft.startswith(folder_title - )内的订阅源批量置为needs_unread_recalcTrueapps/reader/views.py确保级联改动被后台及时重算。响应体返回effective_days与source字段前端据此显示「当前设置来自哪一层」。前端交互与滑块实现前端逻辑集中在 media/js/newsblur/views/feed_options_popover.jsopen_auto_mark_readL812打开区块必要时滚动到该区域update_auto_mark_read_uiL528根据当前订阅源与所在文件夹计算「当前生效天数来自哪一层」状态文本即由此渲染change_auto_mark_read_settingL847区分「文件夹设置」与「订阅源设置」两类保存路径on_auto_mark_read_slider_inputL920滑块输入做 debounce约 300ms 定时器见 L975-L982后自动保存save_auto_mark_read/save_folder_auto_mark_readL1072调用NEWSBLUR.assets中的对应方法成功回调里同步更新本地 model。文件夹级设置还会进入NEWSBLUR.assets.get_folder_auto_mark_read(folder_title)的按需查询路径供订阅源计算继承值时使用Site settings 对话框reader_feed_exception.js复用同一套设置数据。使用建议先规划文件夹层级继承只认文件夹名含 - 层级分隔符建议按「内容衰减速度」组织文件夹结构再逐级设置避免对每个订阅源重复配置。用 Default 保持整洁只想微调个别源时把大部分文件夹留在 Default继承全站仅在差异处显式设置需要恢复时选择 Default 即可删除该层记录。注意与全站的交互per-feed/per-folder 设置只对 Premium Archive 用户开放且只有 Archive 用户的全站days_of_unread才会作为最终回退值普通 Premium 用户仍受settings.DAYS_OF_UNREAD固定值约束见 apps/profile/models.py。改动即时生效无论是滑块拖拽还是站点设置对话框保存都会触发对应订阅源/文件夹内所有订阅源的未读重算无需手动刷新计数。小结NewsBlur 的 per-feed / per-folder 自动标记已读功能把「未读故事保留多久」从全站一刀切升级为「订阅源 / 文件夹 / 全站」三级可继承、可覆盖的精细化配置前端滑杆与状态文本让操作直观后端UserSubscription.auto_mark_read_days、MongoDB 的folder_auto_mark_read集合以及get_effective_auto_mark_read_days()解析算法共同保证了继承语义的一致性。对于大量订阅、信息节奏各异的用户这是管理未读列表、保持阅读节奏最直接的抓手之一。若对该功能有改进建议可到 NewsBlur 官方论坛反馈。赞分享后端前端社交人工智能【免费下载链接】NewsBlurNewsBlur is a personal news reader that brings people together to talk about the world. A new sound of an old instrument.项目地址https://gitcode.com/gh_mirrors/ne/NewsBlur点击查看免费下载相关推荐Ruff 怎么配置 per-file-ignores 按文件路径忽略特定 Lint 规则Ruff 怎么配置 per file ignores 按文件路径忽略特定 Lint 规则 用 ruff check 检查项目时常有这样的需求某条规则在全局是开发工具Lint格式化静态分析CLIiTerm2 Per-Host Colors 实战用 Python API 按主机名自动切换终端配色iTerm2 Per Host Colors 实战用 Python API 按主机名自动切换终端配色 本篇技术指南围绕 iTerm2 Python API 官桌面应用AI 应用gogcli gog gmail mark-read 命令详解在终端批量将 Gmail 邮件标记为已读gogcli gog gmail mark read 命令详解在终端批量将 Gmail 邮件标记为已读 导读 gog gmail mark read 是 go上一篇TanStack Table终极指南构建企业级Skateshop数据表格组件下一篇Open Live Writer 性能优化技巧如何提升编辑器响应速度和发布效率创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表