上次发帖还停在 0.8。中间过了两版,改动大半是从回帖和私信里捡来的,索性一起讲完。
0.9.0
站点可以自己加了
以前 Litho 只认 linux.do 和 IDCFlare,两个站写死在代码里。现在「我的 → 站点 → 添加站点」,填一个 Discourse 论坛的地址就行。App 会先取一次那个站的公开信息,确认它确实是 Discourse,再用站点自己公布的名字入列。连不上也可以选择照样添加。登录走那个站自己的登录页,各站登录态互不干扰,长按可以移除。
有几处功能对新加的站不打开,聊天、抽奖、信任等级都在里面。那几处的口径是照着内置两个站写死的,比如抽奖要认标签编号和福利分类,换个站编号对不上,开着只会答非所问。站点名单只存在你自己手机上,App 没有后端,我这边看不到你加了什么。
站点一开放,第三方站的头像立刻空了一片。Litho 所有请求都交给页内的 fetch 发,过盾靠的就是这一条,可页内 fetch 要读到 body 就得过 CORS。很多站把头像 302 到自己的 CDN,那些 CDN 不发 Access-Control-Allow-Origin,于是整站头像全没了。头像是公开图片,不需要登录 cookie,所以现在网关这条路取不到就直连去拿。真被 CF 挡着的站,那条路在前面已经先走过一遍。
安卓终于能好好看图
这条反馈出现过两次,一次说底部有一大块白边,一次说回退直接把帖子退掉。翻下去是同一个原因。以前安卓点帖内图片,其实是让 WebView 整页导航去了图片本身的地址,交给 Chromium 那个裸图片页渲染,于是白底、大片留白,回退键当然把整个帖子一起带走。
现在点图是一个真的全屏看图层。黑底,双指能缩放,长按存相册,回退只关掉它,帖子和你读到的位置都还在。
正文字号可调
有人在平板上嫌正文太小。「我的 → 阅读字号」,小、标准、大、特大四档,只作用于帖子正文,列表和界面文字仍然跟随系统。选择页里每一档都按它自己的字号显示,档位名说明不了大小,字本身能说明。开着帖子改也立刻生效,不用退出重进。
多了一张「原生」皮肤
有人想要什么配色都不套的那种。这一张纸底是彻底中性的灰,主色系统蓝,看起来就像没换过皮。它和另外五张走同一套推导,六张皮肤两种模式一百五十六项对比度逐条校准过,深色模式也是真中性、不偏色。
推的时候踩了一脚。别的皮肤锚在颜料色上,彩度得压一压才不吵,系统蓝本来就是照着屏幕调好的,再砍 28% 就成了褪色的系统蓝,正好丢掉了「原样」这个意思。所以这一张单独关掉了那道阻尼。
没看过的帖子,标记对了
列表上那颗小圆点,有人问它为什么和网页版对不上。功能一直在,两个毛病让它基本等于没有。
一是卡片头部那一行的渲染条件漏了圆点自己,只看有没有分类名、置不置顶、有没有未读数。于是一个话题只要没分类名、没置顶、也没有未读回复,整行 header 都不画,圆点跟着一起没了。而那恰恰最常是刚发出来的新帖。
二是圆点画的是服务端下发的字段,那个字段要下次拉列表才会变,所以读完退回列表它还杵在那儿。网页版不等服务端,它在客户端就地标记。现在这里也加了同样的一层,点进去那一刻就消掉。
未读回复数没跟着一起动。读没读完只有服务端知道,本地擅自清零会谎报。
0.10.0
四条改动里有三条来自同一位佬友的反馈。
首页顶上那三条公告,收起来了
Discourse 把置顶帖排在列表最前面,一条一张整卡。linux.do 首页有三条全站公告,摞起来在手机上正好占掉一屏,而它们几个月不变,每次进来先划过一遍。
我没有去猜哪些是官方公告。pinned_globally 只说明是全站置顶,信任等级 4 的用户也够格设它,靠它分不出值不值得看。判据换成一件更实在的事,服务端把它按在列表最上面,你没得选。列表开头连续的那一段置顶收进一条「N 条置顶」,默认收起,里面有没读过的就在这一条上留个圆点。三条原本占掉三百三十点高,现在是一百二十七点。展开是一行一条,点进去照常。
哪一条真的不想再看到,iOS 右滑、安卓点行尾的叉,走的是 Discourse 自己的取消置顶接口。服务端记着这笔账,你在网页端也不会再看到它置顶。没登录不显示这个动作,服务端会回 403。折叠条上只给圆点,不印未读数,公告帖动辄几千楼,读过第一楼之后未读就是「8165」,那个数字对一条公告没有任何意义。
IDCFlare 直接用 LINUX DO 账号进
IDCFlare 只认 linux.do 账号,网页端点一下就回跳。但 App 里的登录页开在站点自己的 /login 上,那一页最显眼的是本站的邮箱密码表单,「使用 LINUX DO 登录」那枚按钮混在中间,读起来像是还得再注册一个账号。
现在 App 会先问这个站挂了几条第三方登录入口。只有一条的站,登录页直接开在授权页上,站内表单退到顶栏的「站内登录」后面,omniauth 那张「继续」确认页由脚本自动提交,全程零点击。挂了多条的站什么都不变,linux.do 就挂了好几条,那种页面站点自己已经列得很清楚,替你挑一个不合适。
数入口个数的时候踩了一脚。Google 那两项在内嵌 WebView 里会被拒,本来就不自动跳,我一开始把它们先滤掉再数,结果 meta.discourse.org 挂着 discourse_id 和 google_oauth2 两条,滤完剩「1」,于是替用户挑了 Discourse ID。现在数的是站点原样公布的清单。能不能用是我这边的限制,不改变「这个站有两条路」这件事。Google 照旧不会被自动跳过去,站点登录页上那颗按钮也照旧在,你想点就点。
另一半在切站上。在 linux.do 登录着的情况下切到 IDCFlare,授权页会自己升起来,点一下允许就进去了,手上真有对方站的凭据时这一跳全程无输入。每个站每次运行只主动问一次,按了取消是个答复。也只在你手动切站之后做,不在冷启动时做,开 App 就弹一张登录页不是谁想要的东西。
看图的关闭键,看得见也按得着
反馈原话是「看图片的关闭按钮太小了」。以前 iOS 是一枚标题尺寸的 xmark.circle.fill,安卓是裸的白色叉,压在浅色截图上几乎融进背景,能按的范围也只有图标那一圈。现在是深色实心圆底配白叉,落在任何一张图上都是硬对比,可点范围 iOS 是 60pt,安卓是 64dp。
通知点开,回到它来自的那个站
这条没人提,是站点能自己加之后我自己撞上的。话题编号是站内的,几个站的编号范围完全重叠。以前通知里只记了编号,在 A 站收到、切到 B 站再点开,编号大的打不开还看得出不对,编号小的会静默打开一个毫不相干的帖子。站一多,撞号只会越来越准。
现在通知记住自己来自哪个站,点开时站不对就先切回去再打开。那个站要是已经被你从列表里移除,就什么都不做,不在错的站上开一个错的帖子。顺手把通知的分组标识也加了站前缀,以前 B 站的 42 号通知会顶掉 A 站还没展示的 42 号。
下载
安卓 APK 和 iOS TestFlight 都在站点上。
有问题继续在这儿说,这两版里能改的基本都是这么来的。