一次小打小闹,没有多少技术含量,读者只图一乐就好.
我使用RSS订阅作为日常信息来源已有一年的时间了,采用的方案是RSS Hub(生成RSS feed) + Reeder(一个macOS平台上的RSS阅读器).不管是订阅独立的个人博客还是诸如b站,推特这类平台上的发布者都很方便.
Reeder的使用体验很好,但是有几个我不满意的地方:
忍受了很久之后,我决定自己实现一个RSS阅读器,目标是用起来和Reeder体验相近,但是在查看网页时可以用Adblock Plus这样的广告屏蔽插件移除自己不想要的东西.我并没有仔细考虑实现这一功能的技术细节,觉得车到山前必有路,对于自己很有信心.
不幸的是,我的选择标准几乎完全基于对新兴事物的冲动,最终选定一个尚未稳定的由Rust实现的GUI库egui.我想用刚学过的Rust编程语言来做事情,而且这个库的外观看上去和Reeder很相似,仅此而已.于是,在继续考察这个库提供的功能之前就开始了编程工作.
我给项目取名叫grass,原因有三点:
egui的设计目标之一就是易用性,所以没花多少时间我就达成了下图中的效果,只写了300行左右的代码:
这时候已经有了可互动的Feed列表(左边),可以拉取Item(中间)并展示内容(右边),界面设计完全是仿照Reeder.拉取和解析Item的工作直接采用crates.io上的rss包完成,整个开发过程都很愉快,流程大体上是:在纸上写下目标效果-看示例-实现(单元测试?这是GUI项目).
但是到这里项目就无法继续下去了,因为我遇到了那座山:怎样加入一个带有广告屏蔽插件的浏览器来展示内容?
我展开了搜索,这时才开始意识到内嵌一个浏览器不像是一个GUI库会做的事情,最后止步于一个讨论,内容大概是这样的:
Q: Hi, how can I integrate a webview with egui?
A: AFAIK, you cannot. …