把构建交给 Actions,也得确认包里装的是对的核心
把五个平台接到一条发布流程里,再逐个检查二进制架构、签名和安装包内容。
~/tags · 124 篇
把五个平台接到一条发布流程里,再逐个检查二进制架构、签名和安装包内容。
读取 GitHub Release 清单,比较版本、选择安装包,下载校验后交给系统安装。
把 PDF 预览切到 pdfrx,保留自己的工具栏,再逐项处理页码、选区和加载状态。
StoreX 改名为 Vaultoz,更新窗口、桌面标签和安装身份,沿用原来的盾牌图标与加密格式。
把打开时的版本检查和实际迁移拆开,确认以后才改共享数据。
S3 上的发布和回收没有跨对象事务,进程内加锁挡不住另一个客户端。
把文件条目与不可变内容拆开,保存记录里的附件时可以共用原来的密文。
托盘图标只是入口,后台任务、草稿和 Go 子进程需要一条明确的退出路径。
单内容保存为文件,复合内容保存为文件夹,“保存到文件”和“下载到本机”也统一了意思。
选附件不再直接发出去,正文、图片和语音先进入同一份草稿,再一起提交。
把样板里选中的交互收成自己的桌面组件,去掉互相覆盖的主题和默认样式。
APK 里方法还在,问题出在反射签名:gomobile 把 Go int 映射成了 Java long。
从悬浮导航到半屏编辑器,先统一空间和状态,再把页面逐个接进来。
连接、密钥、缓存和清理范围一起检查,避免表面切换了,后台还在处理上一份存储。
批量操作保留逐项结果,重试只处理失败项,扫描游离文件时也查一下记录和任务的引用。
给查询加上请求身份,拦住晚回来的结果,再处理失败、离线和定位。
图片、PDF、文档和播放器各查了一遍,最容易漏掉的是失败后还剩什么。
大卡片、低对比和拼出来的组件让我返工,最后得重新看布局、密度和组件体系。
一次 S3 地址输入问题,被三层含糊的状态处理藏成了“内核启动失败”。
导入和导出逐块处理,再检查长度、截断、多余尾部和失败后的临时输出。
分块、临时文件和任务进度落库后,断网、暂停和重启终于能接着传。
文件列表先从本地 SQLite 读取,待同步操作放进 outbox,远端继续保存加密记录。
给加密分块绑定文件、内容版本和块序号,先解决能解密却读错内容的问题。
App.tsx 和 AppState 越写越大,先搬布局,再理清任务、草稿和配置各自该活多久。
回头看二三月的选型,最后留下的路线没有那么新鲜,但比较适合我继续维护。
重新打开这个搁置了一阵的项目,先把技术路线和要做的事情收回来。
按系统拆开的脚本、对不上的文档路径和一堆无关的 ignore 项,花了一晚收干净。
端到端加密加块存储,做公开分享时才发现三条路都不舒服,我把代码回滚了。
Markdown 和 HTML 保留渲染切换,代码和 txt 只看源码;大文件先只读。
实现系统分享接收,把分享的文件丢进上传队列;顺手清掉一堆废弃/重复代码。
Toast 有两套写法,比例只改了一个列表,文件夹选择器写了两份,这次一起收掉。
把左滑改成详情弹窗,清掉划选文本的旧逻辑,同时把误删的多选功能救回来。
心跳超时不再直接结束进程,上传任务完成后也清掉过期进度。
搜索框聚焦时冒出一圈蓝边,小部件有上传和笔记两个入口却只有一个保存路径;两处一起收拾。
“前往设置”跳错了页,删掉的密钥其实还在数据库里。
暂停上传后任务从列表里消失,背后是状态覆盖、fileId 缺失和启动加载几处问题叠在一起。
桌面端双击打开和移动端单击进入打架,我把它统一成单击。
同一行错误响应在十个文件里写了 150 多次,状态码也各写各的。
上传文件夹时列表里先冒出 ddd/ddd/fdfs.mp3 这种名字,刷新后又好了;问题出在前端自己拼了元数据。
桌面端的上传和新建要先悬停才出菜单,点一下反而不行;这次改成点击弹居中对话框。
桌面端顶部工具栏的三个按钮,改成点击弹窗。
桌面端补了悬浮反馈,也顺手把切页面时重新构建、加载圈乱闪的问题修了。
导航栏的滑动、拉伸和涟漪都删了,点击直接跳,手势滑动仍交给 PageView。
照着 123云盘 改桌面表格:列宽可拖、表头有全选,每行左边常年带着一个圆圈。
桌面端的上传菜单、托盘入口、拖拽文件夹和导航动画一起调整。
为了省十几 KB 的缩略图,反而要再下一次十几 MB 的原图;这次把生成挪到上传完成之后。
Android 的返回键先收起应用,桌面关闭窗口先隐藏到托盘,真正退出再结束进程。
长按菜单不认返回键、语音播一条漏一个订阅、文件名里的斜杠没人管,一次业务逻辑扫描捡出来的三件事。
日期分割线画在了消息下面,缩略图缓存又总被系统清掉;两件事都出在聊天页上。
生成缩略图时弹窗一闪就没,批量任务看不到进度。
bootstrap 检查原来只在文件页触发,缩略图逻辑散在几个页面,这次把前者收进 AppState,后者收进一个服务。
缩略图丢了就自动补,图片要下原图、视频要抽帧,流量一直悄悄往外走;这次改成默认不补。
删掉 app_state.dart 里五十多行重复类型,flutter analyze 一次报了 59 个错。
AppState 三千多行,缩略图缓存没有上限,debugPrint 散在各处,这次先搭基础设施,不动业务。
输入框高度跳、图片放大误滑、缩略图一直转圈,都是使用中撞见的小毛病。
横屏下比例菜单被切掉,长按加速带着出场动画,两指捏合还会滑到隔壁图片。
图片缓存的判断写反了,横屏按钮贴着屏幕边,输入框切换时抖一下,顺带把长按加速和锁定补上。
media_kit 的手势和 API 大都已经现成,缺的是入口,还有横屏那套藏起来的控件栏。
聊天里的预览页和网盘共用,菜单得分开;附件和文本都能存进网盘。
视频文件名不滚动、日期分隔按 UTC 算、深色模式按钮发白,凑到了一起。
长按 500ms 才弹菜单,划选会把 Markdown 变成纯文本,左滑又只能删;这次把三套手势一起重做。
MdiIcons 和 Icons 混着用,这次统一换成 TablerIcons,顺便把文件夹图标做成填充版。
文件气泡的名字颜色、图片角上的时间、视频的时长,几处小地方一起收了口。
时间戳默认藏着,点一下气泡才出现在下方,文本、图片、视频三种气泡都改了。
按住麦克风录音,松开发送,录音库踩了版本坑,播放要带 token 走流式。
消息一多,一次性全量加载就会卡;改成分页之后,又撞上日历跳转和搜索。
日历面板一开始滑不动,后来又自己弹回去;试了三版才发现,问题出在那只没被使用的 scrollController。
消息翻不到底,就在聊天页加了会话内搜索和一个按日期跳转的日历。
把聊天滚动和搜索拆开,避免两套状态互相打断。
文件搜索单开一页,聊天搜索留在会话列表里,两边共用高亮和上下文截取。
聊天里发图,缩略图能打开,画质却是原图;查下去发现前端把原图当缩略图传了。
上传没走完就退出聊天页,任务会跟着页面一起消失。
四档字重只有“粗”看得出来,文件图标变灰,图片缩略图卡在占位符;三个问题凑到了一起。
四个页面要能左右滑,激活的圆球得跟着走、变色,中间还得拉长一下。
发送网盘文件要等接口才上屏,删掉消息后 S3 上的数据还在,发出去的附件还跑进了文件列表。
事件总线、没人实现的接口、从没被调用的 HTTP 服务,一共删了约 590 行。
3035 行的 files_page 里,组件和操作逻辑各抄了好几份。
浅色模式的气泡看不清、滑动时垃圾桶从气泡里透出来,顺手把移动和发送两个场景的选择器合成了一个。
离线状态有十七个设置点,启动时序又没等初始化完成,页面各自刷新只会把状态搅得更乱。
聊天页键盘一弹,输入框先被盖住再猛地跳上来;试了一圈避让方案,最后只留 Scaffold 默认行为。
前后端都在存 MIME,可它完全由扩展名决定,删掉这一列,判断函数也只剩一个参数。
导入导出做着做着长成了另一套上传下载,最后砍回两个加解密接口。
项目规范要求导出文件名随机,我给它留了个可编辑的输入框,顺手补上 APK 和代码文件的图标。
加密文件一直只能留在网盘里,这次给它做了个能带走的 .e2e 导出格式。
传了几个大文件,App 数据涨到 1.45GB;顺着 ADB 查下去,是 file_picker 留在 cache 里的副本。
S3 配置从一份变成多份,每份带自己的文件索引和传输记录。
Android 有 MediaMetadataRetriever,桌面端没有对应接口,最后选了 FFmpeg,代价是多带一个 ffmpeg.exe。
客户端显示内核未启动,杀掉客户端之后核心反而通了。
旧视频没有缩略图,media_kit 在后台截出 0 字节,最后换成 Android 的 MediaMetadataRetriever。
S3 上存的是密文,播放器却要能拖进度条、列表里还要有缩略图,这两个需求分别走了一条路。
视频跳到 80% 要先下 400MB,旧加密格式撑不住 Range 请求,只能把存储改成目录加分块。
前 50MB 里没有 moov,57MB 的视频怎么都截不出图,最后把生成挪到了上传成功那一刻。
6 个视频只传上去 2 个,服务端日志停在 /data/local/tmp 的 permission denied 上。
每传一个文件就读写一次 S3,100 个文件多等十几秒;用一个 worker 把更新攒起来写。
批量上传之后 S3 里多出一批元数据中查不到的文件,日志的时间戳排在一起,问题就露出来了。
游离文件夹里有种以 .enc 结尾却解不开的文件,收养会失败,得单独分成一类。
收养完的加密文件全被标成“文件损坏”,问题出在扫描和补元数据这条路上。
桶里有、索引里没有的文件收进一个虚拟目录,文件名则留一份在加密文件的尾部。
前端不再下载源文件自己生成缩略图,这件事交给后端按需做。
缩略图和普通文件共用一个模型,预览、下载、详情全走错了路;加一个字段,再把命名收到后端。
“缩略图”是个不能改名也不能删的系统文件夹,缩略图对象另有一套接口,前端只按当前路径决定调哪个。
S3 一慢客户端就说核心没启动,Windows 上停掉调试旧核心还占着端口,两个问题都出在状态说不清。
调试页说内核没启动,其实核心在跑,只是 /health 卡在 S3 Ping 上,客户端先超时了。
错误信息、失败重试、健康检查和离线提示一起收拾,用户至少知道出了什么事。
底部导航、文件列表和传输列表挤在一个文件里,改一处要先滚几百行。
字号四档、主题三种模式,都要写进本地,重启之后还是上次选的。
批量删除时提示一条盖一条,最后只剩一句;这次把散在各页面的 SnackBar 收进了一个能堆叠的 Toast。
gomobile 报找不到 bind 包之后,我把 Android 和 Windows 的构建、运行四件事都收进了脚本。
用 gomobile 把 Go 核心编成 AAR 塞进 Android 客户端,让内核跟着 App 一起跑。
启动时界面一片空白,不知道该初始化、解锁还是处理冲突;先把核心和桶的状态用两个接口说清楚。
传了 -s3-bucket=testinit,启动日志里还是 e2eepan,问题出在 Windows 这边的命令行写法。
S3 配置里的“使用 HTTPS”默认是关的,清除应用数据之后也不该例外。
S3 的端点、密钥、桶散在几个入口里,改完也不知道什么时候生效,这次收进一个弹窗,顺手留下重启核心的位置。
应用里一度有三个“解锁界面”,站在门口分不清该输 PIN 还是保险库密码。
ApiClient 在干活,ICoreService 没人用,NativeCoreService 全是 UnimplementedError;这次先把方向定下来。
新建的 .txt 图标是对的,编辑保存一次就变回普通文件。
一个文本文件的图标退回通用图标,顺着查下去,元数据的写入路径最后全收到了后端。
Go 核心是用 gomobile 打进客户端的,把缩略图生成搬过去,收益和想象的不太一样。
多选时按返回,第一下先退出多选,别急着离开目录。
批量上传结束、批量删除、滚动停下,缩略图一起来抢 CPU,列表就卡了。
网络差的设备上三个并发就卡,性能好的机器又嫌慢,最后把并发数挪进了设置页。
保存完文本回到列表,文件不见了,大小和修改时间还停在旧值。
文件页右下角只有一个上传按钮,新建文本还要先建一个空文件,再自己找回来点开。
在上传 Tab 点了清空,切到下载一看,那边的已完成记录也一起没了。