KOReader阅读数据管道:SimpleUI如何把SQLite阅读记录解析成阅读连击与热力图
【免费下载链接】simpleui.kopluginA highly customizable UI plugin for KOReader that features a home screen, bottom navigation bar, top bar and desktop modules/widgets.项目地址https://gitcode.com/gh_mirrors/si/simpleui.koplugin点击查看免费下载SimpleUIsimpleui.koplugin是一个功能强大的 KOReader 阅读插件它为阅读统计建立了一条完整的数据管道直接读取 SQLite 数据库 statistics.sqlite3 中的page_stat翻页统计记录经过 SQL 聚合、按日缓存和连击推算最终渲染出首页阅读统计卡片、连续阅读天数Streak 连击、GitHub 风格阅读热力图与「星期几 × 小时」时段网格。本文带你从数据源一路读到渲染层看看这条管道是如何运转的。数据源头statistics.sqlite3 里的 page_stat一切数据都来自 KOReader 自带的阅读统计数据库statistics.sqlite3位于 KOReader 设置目录其中的page_stat视图记录了每一次翻页id_book、page、start_timeUnix 时间戳和duration阅读秒数。SimpleUI 通过 infra/sui_config.lua 中的Config.openStatsDB()以只读方式打开该数据库。这里有几个关键设计只读、绝不写入——插件从不动 KOReader 自己的统计表连「冻结日」也保存在 SimpleUI 自己的设置里infra/sui_streak.luapage_stat是视图、无法建索引插件直接查询其底表page_stat_data利用start_time上的索引把每次扫描限定在所需时间窗内若 Statistics 云端同步正在进行openStatsDB()会返回 nil 优雅降级而不是卡死界面统计中枢module_stats_provider 的 3 次查询modules/module_stats_provider.lua 是整条管道的核心它用最少的数据库往返取回首页所有数字一次冷缓存调用只需 3 条 SQL查询作用覆盖窗口查询 1a按日分桶用 CASE WHEN 一次算出今日 / 本周 / 近 7 天 / 本月近约一个月查询 1b简单 SUM 求和本年度 历史总计查询 2取近期活跃日列表交给连击算法自适应回溯几个值得注意的细节页面去重页数按DISTINCT page || || id_book计数同一天重复读某页只算一次周 vs 滚动 7 天「本周」以周一为界「近 7 天均值」则是真正的滚动窗口两者互不干扰按日缓存结果以「YYYY-MM-DD」为键缓存跨过午夜自动失效无需额外刷新逻辑跨进程快照最近一次结果还会镜像到磁盘modules/module_stats_provider.lua冷启动首页第一帧就不至于显示暂无数据阅读连击从日期列表到 Streak 推算连击Streak的计算被单独抽成纯函数位于 infra/sui_streak.lua 的computeCurrentDayStreak()。它的输入只是一份活跃日期列表输出是从今天或昨天往回数、连续有多少天有阅读自适应窗口查询先从最近 90 天开始取DISTINCT date(start_time)如果连击恰好延伸到窗口边缘就把窗口翻倍重试直到连击在窗口内部自然结束modules/module_stats_provider.lua冻结日合并Streak Manager 的「冻结」机制允许你消耗一次冻结来补上昨天的一天断档。冻结日期在推算前合并进活跃日集合全程不写回数据库奖励规则每累计阅读 500 分钟、或连击每达到 5 的倍数各奖励 1 次冻结infra/sui_streak.lua这套设计让首页卡片和「阅读洞察」窗口共享同一份推算逻辑——修一个 bug 只需改一处。热力图数据层两条 SQL 聚合engines/sui_heatmap_data.lua 是热力图专用的数据层只认数字和时间戳不含任何 UI 代码每日数据getDailyReadingData()按id_book/page/day分组后再按天汇总避免重复阅读把时间重复计入返回「日期 → 秒数」的映射时段数据getWeekdayHourReadingData()把阅读时间落到「星期几 × 小时」的 7×24 格子里帮你发现自己是晨型还是夜猫子读者历史分页getWeekBlockRange()把时间轴切成 N 周一个的区块配合getEarliestStartTime()取最早一条记录计算最多能往回翻多少页每日级缓存MAX(start_time)廉价探测没有新阅读就完全跳过重新查询渲染层把秒数变成像素数据变成格子的过程在 engines/sui_heatmap_widgets.lua 中两个纯函数把数据表转成 KOReader 控件同一套构建器同时服务于首页卡片modules/module_heatmap.lua和全屏弹层screens/sui_heatmap_popup.lua日历热力图GitHub 贡献图风格——每格一天、周一开始排周、列顶标月份默认展示 24 周时段热力图7 行周一到周日× 24 列小时的网格一眼看出你的阅读高峰时段五级着色每个格子与整个数据集中最忙的那一天/小时对比按 25% 分位划入 0–4 级灰度没读过的格子保持纯白而非浅灰全屏弹层固定以 26 周为一块可以用箭头翻回更早的历史区块阅读洞察窗口screens/sui_stats_windows.lua则在此基础上提供逐年月度图表与当年/最佳连击统计。管道全景一次刷新发生了什么把上面各环节串起来你在首页看到的每个数字背后是这样一条链路读Config.openStatsDB()只读打开 statistics.sqlite3聚合3 条或 2 条索引友好的 SQL 完成分桶、去重、求和推算日期列表交给computeCurrentDayStreak()纯函数得出连击缓存按日缓存 磁盘快照让重复渲染零成本激励累计时长与连击长度触发冻结奖励写入 SimpleUI 自己的设置画数据层 → 着色分级 → 控件构建秒数最终变成深浅不一的格子整个管道保持了严格的职责分离——数据库访问、日期运算、连击逻辑、UI 绘制各占一个文件——这也是它能以极低开销常驻首页的原因。如果你想深入某一层可以从 modules/module_stats_provider.lua 的注释开始读起每条 SQL 的作用都有详细批注。赞分享【免费下载链接】simpleui.kopluginA highly customizable UI plugin for KOReader that features a home screen, bottom navigation bar, top bar and desktop modules/widgets.项目地址https://gitcode.com/gh_mirrors/si/simpleui.koplugin点击查看免费下载相关推荐Librum阅读统计报告生成个性化阅读数据分析Librum阅读统计报告生成个性化阅读数据分析 你是否曾想过自己一年读了多少本书哪类书籍占据阅读时间最多Librum虽然尚未提供完整的统计功能但通过其内桌面应用跨平台Genesis World 机器人仿真平台从零构建物理AI应用的终极指南Genesis World 机器人仿真平台从零构建物理AI应用的终极指南 你是否曾为机器人仿真开发的复杂性而头疼面对繁琐的物理引擎配置、渲染管线集成和性能优物理引擎具身智能机器人人工智能告别阅读困扰开源阅读鸿蒙版如何重塑你的数字阅读体验告别阅读困扰开源阅读鸿蒙版如何重塑你的数字阅读体验 你是否遇到过这样的情况想读的小说分散在不同平台每个App都要注册登录精心整理的书单在更换设备时丢失创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

AI File Sorter GPU 加速调优指南:CUDA/Vulkan/CPU 后端选择与环境变量完整清单

AI File Sorter GPU 加速调优指南:CUDA/Vulkan/CPU 后端选择与环境变量完整清单

AI 应用大模型本地部署桌面应用 【免费下载链接】ai-file-sorter Cross-platform desktop application for content-aware file organization and renaming. Supports local and remote LLMs, preview-based workflows, and fully user-controlled changes. 项目地址&#xff1…

2026/10/11 17:52:33 阅读更多 →
运筹学建模训练闭环:从变量分层到影子价格的实战指南

运筹学建模训练闭环:从变量分层到影子价格的实战指南

简介:本资源为高校运筹学课程期末复习专用练习试卷,面向本科生及考研备考学生,聚焦线性规划建模、整数规划、网络计划(PERT/CPM)、对偶理论与运输问题等核心考点,助力系统梳理知识框架与提升解题实战能力。…

2026/10/11 17:52:33 阅读更多 →
【每天一个 Python 小案例04】Python 实现 1 到 100 求和

【每天一个 Python 小案例04】Python 实现 1 到 100 求和

【每天一个 Python 小案例04】Python 实现 1 到 100 求和 希望通过持续记录,把每天学习的 Python 知识逐渐积累起来,通过一个个小案例打好编程基础。 系列:《每天一个 Python 小案例》 第 4 篇: Python 实现 1 到 100 求和 关键词…

2026/10/11 17:52:33 阅读更多 →

最新新闻

如何为OpenMOSS创建自定义Agent:角色提示词编写与Skill配置完整教程

如何为OpenMOSS创建自定义Agent:角色提示词编写与Skill配置完整教程

【免费下载链接】OpenMOSS A self-organizing multi-agent collaboration platform for OpenClaw. Multiple AI agents work as an autonomous team — planning, executing, reviewing, and patrolling tasks with zero human intervention. 项目地址: https://git…

2026/10/12 19:50:05 阅读更多 →
AI使用方式决定产出质量:从提示词到工作流

AI使用方式决定产出质量:从提示词到工作流

真正拉开差距的,从来不是用没用AI,而是打开对话框之后那几十秒里,你脑子里在想什么。这个观察我做了快两年。带过的几个团队里,有人用AI五分钟能交付一版完整方案,有人蹲在同一个对话框里磨了一小时还停在“帮我写个策…

2026/10/12 19:50:05 阅读更多 →
Prometheus+Windows Exporter+Grafana+Alertmanager:Windows监控告警部署实战

Prometheus+Windows Exporter+Grafana+Alertmanager:Windows监控告警部署实战

不少做运维的朋友都遇到过这种场景:公司有一批 Windows 服务器,老板要求“出问题必须第一时间知道”,但又不愿意上重型的商业监控软件。我自己在 Windows 环境里摸底过 n 套方案,最后稳定留下来的就是 Prometheus Windows Export…

2026/10/12 19:50:05 阅读更多 →
Windows服务器监控方案:Prometheus+windows_exporter+Grafana+Alertmanager搭建指南

Windows服务器监控方案:Prometheus+windows_exporter+Grafana+Alertmanager搭建指南

1. 监控方案整体拆解:为什么Windows监控不用Zabbix而选Prometheus全家桶很多朋友一提到Windows监控,第一反应是用Zabbix Agent或Windows自带的性能监视器。这两个方案其实都有明显痛点:Zabbix的Windows模板维护成本高,自定义指标要…

2026/10/12 19:50:05 阅读更多 →
Claude Code 工具系统拆解:30+ 内置工具地图与 MCP / Skills 协作全览

Claude Code 工具系统拆解:30+ 内置工具地图与 MCP / Skills 协作全览

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 19:50:04 阅读更多 →
open-code-review:从个人经验到流程驱动的代码审查实践

open-code-review:从个人经验到流程驱动的代码审查实践

1. 项目缘起与核心定位第一次看到“open-code-review”这个标题,我脑子里蹦出来的不是某个具体工具,而是一整套协作流程。代码审查这件事,但凡在团队里写过几年代码的人都懂——它既是保证质量的最后一道闸门,也是最容易变成走过场…

2026/10/12 19:49:04 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →