- 脚本目录按系统拆分(windows/linux/macos)导致重复与维护分叉。
- 需求:在端到端加密、分块存储、无中转服务的前提下提供“公开分享”。
- 文档预览统一交互:Markdown/HTML 可渲染与源码切换,代码/txt 仅源码高亮。
实现系统分享接收,把分享的文件丢进上传队列;顺手清掉一堆废弃/重复代码。
2026-01-12
**范围**: Flutter 客户端 UI 层
**涉及文件**:
把左滑改成详情弹窗,清掉划选文本的旧逻辑,同时把误删的多选功能救回来。
- **品牌残留**:旧代号 “E2E Pan/E2EPan” 仍存在于核心启动 banner、Flutter 入口类名、默认下载目录命名,导致对外展示不一致。
把旧代号清干净,心跳优雅关停,上传进度自动收尾,让 StoreX 跑得更稳。
本次任务主要包含三个核心需求:
本次修复涉及多个我这边用的时候发现的问题:
我在排查时发现上传任务在暂停后直接从 UI 界面消失,无法在任何地方找到该任务。
> 时间:2026-01-07 > 模块:传输任务状态管理 > 核心文件:`client/lib/core/state/app_state.
"# 文件列表交互简化:从双击打开到单击进入的重构
Go 核心代码中存在大量重复的错误响应模式: ```go c.
**涉及功能**: 文件夹上传、文件元数据管理、前后端数据一致性
在桌面端文件管理界面中,我这边用的时候发现顶部工具栏的上传和新建按钮使用悬停菜单不够直观。
在桌面端文件管理界面中,我这边用的时候发现上传和新建功能的菜单层级较深,操作不够直观。
我希望让桌面端 UI 更加现代化和丝滑,同时修复页面切换时重新渲染和加载界面闪现的问题。
原有设计中,底部/侧边导航栏在切换页面时有复杂的动画效果: - 背景指示器有滑动动画(从一个位置滑到另一个位置) - 背景形状有 stretch 弹性效果(中间拉长再收缩) - 桌面端有 InkWell 涟漪反馈
桌面端文件列表使用表格视图(FileTableView),我想参考 123云盘 的界面设计,优化多选交互体验。
2026-01-03
项目原有的缩略图生成策略为**按需生成**: - 上传文件时,只上传原始文件 - 浏览文件列表时,前端请求缩略图 API - 后端检查缩略图是否存在,不存在则下载源文件、生成缩略图、保存后返回
**涉及模块**: 全局命名、Android 原生、Windows 托盘、Flutter 生命周期
**范围**: 聊天菜单返回键、资源泄漏、文件名安全校验
本次开发解决了聊天界面三个关联问题:
我这边用的时候发现生成缩略图时,弹窗闪一下就消失,无法感知任务执行状态。
两个历史遗留问题需要解决:
由于生成缩略图需要耗费很多流量(图片需要下载原图生成,视频需要流媒体提取帧),不再默认自动重生成丢失的缩略图,改为可控的策略。
**时间**: 2026-01-01 16:00 **类型**: 代码结构优化 / 重复代码清理 **范围**: 前端 (Flutter) + 后端 (Go) 全仓库评估
**状态**: 完成
**涉及功能**: 图片预览缓存、视频播放器边距、聊天输入框、长按加速、锁定屏幕、App 重命名
**涉及功能**: 视频倍速/音轨/字幕/画面比例、图片滑动切换/双击缩放/旋转/信息面板
**涉及功能**: 聊天文件预览来源区分、附件保存到网盘、文本消息保存为文件
**涉及功能**: 视频卡片跑马灯、时区处理、深色模式主题适配
**涉及文件**: `chat_page.dart`, `chat_widgets.dart`
项目原先混用了多种图标库: - `material_design_icons_flutter`(MdiIcons) - Flutter 自带 `Icons`(Material Icons)
在聊天界面中,多媒体消息(图片、视频、文件)的UI需要进行优化,以提升整体体验和视觉一致性。
在聊天界面中,需要查看消息的具体发送时间,但又不想让时间戳一直显示在界面上影响视觉效果。
> 日期: 2024-12-28 > 状态: 已完成 > 涉及文件: chat_page.
> 日期: 2024-12-28 > 状态: 已完成 > 涉及文件: client/lib/ui/chat_page.
**范围**: message_history_calendar.dart, chat_page.dart
**范围**: chat_page.dart, 后端 API, 新增日历组件
**范围**: chat_page.dart, send_page.dart, session_search_page.dart, file_search_page.dart
本笔记记录了搜索功能的完整开发过程,包括方案设计、技术选型、实现细节、架构决策等。
**状态**: 已完成
在聊天界面上传文件时,如果我在上传完成前退出聊天页面,上传任务会直接终止失败。
设置页面提供了四档字重选项(细、正常、中粗、粗),但除了"粗"之外,其他三档视觉上没有任何区别。
2025-12-27
发送功能允许向指定会话发送文本消息和文件附件。
随着项目架构演进,部分早期设计的抽象层和事件机制变得冗余。
files_page.dart 作为应用的核心文件列表页面,代码量达到 3035 行,包含了大量的 UI 组件和业务逻辑。
完成状态管理重构后,我在实际使用中发现了多个 UI 细节问题,同时需要实现"选择网盘文件发送"功能,该功能与文件移动的选择器可以复用。
我在使用过程中发现多个状态相关的问题:
根据项目规范: > "导出文件的文件名必须使用随机生成的八位小写字母,禁止使用明文或可预测的文件名,以增强安全性。
2025-12-23
**时间**: 2025-12-22 20:57 **标签**: `架构优化` `代码简化` `重构`
实现 E2E 便携式加密文件的导入导出功能时,我们经历了一个"越做越复杂"的过程,最终意识到走入了过度设计的误区。
**功能**: .e2e 便携式加密文件的导入导出
我这边用的时候发现上传大文件后 App 数据显著增大(从几十 MB 增长到 1.45GB),重启 App 也无法释放。通过 ADB 诊断发现问题根源是 **file_picker 插件在 Android 上的临时文件复制机制**。
原有设计中,S3 配置通过 Settings 页面的弹窗设置,存储在 SharedPreferences 中,只支持单个 S3 配置。使用上需要在不同 S3 存储之间切换时非常不便。本次重构实现:
**类型**: 功能实现
我在 Windows 桌面端遇到一个奇怪的现象:
在 [20251220-211500-video-thumbnail-upload-time-generation.md](./20251220-211500-video-thumbnail-upload-time-generation.md) 中,我们解决了上传时生成视频缩略图的问题。
E2EEPAN 是一个端到端加密的网盘应用,存储在 S3 上的都是密文。
E2EEPAN 是一个端到端加密的网盘应用,所有文件在上传前加密,存储在 S3 上的都是密文。
在文件列表中显示视频缩略图,提升使用体验。
在 Android 设备上批量上传视频文件时,部分文件上传失败。
在解决批量上传产生游离文件的问题后(通过互斥锁保证原子性),发现新的性能问题:
我这边用的时候发现批量上传文件时会产生大量游离文件(orphan files)。
游离文件夹中可能存在一种特殊情况:文件以 `.enc` 结尾,但无法解密。
游离文件(orphan files)是指存在于 S3 但不在元数据库中的文件。
系统中可能存在两类"游离文件"——S3 中存在但元数据库中没有记录的文件:
之前缩略图生成逻辑在前端实现: 1.
在缩略图文件夹中点击缩略图预览时,发现显示的是源文件而非缩略图本身,查看详情时信息也不准确。
日期:2025-12-19 主题:围绕“缩略图”系统文件夹,统一后端能力和前端行为,做到:
- 之前的 `/health` 同时承担“核心是否在线”和“S3 是否可用”的责任,逻辑偏重 S3,导致在 S3 很慢或超时时,客户端会把“核心还在工作但 S3 掉了”误判成“核心未启动”。
- 设置页 → 调试选项中,内核和 S3 状态偶尔出现矛盾: - 内核状态显示“未启动或不可用”。
1. **错误信息不友好**:
`home_page.dart` 文件过于庞大(2000+ 行),包含了:
不同人对字体大小的偏好不同:
应用中使用 `ScaffoldMessenger.showSnackBar()` 显示提示消息,存在以下问题:
- 目标:为 Android 和 Windows 两端建立一套稳定、可重复的“构建 + 运行 + 调试”工具链,减少手工步骤,避免把调试兼容逻辑写死在业务代码里。
- 目标:把 Go 核心服务通过 gomobile 以 AAR 形式内嵌进 Android Flutter 客户端,让普通我在手机上开箱即用,而不是先手动起一个独立的 HTTP 核心。
- 目标:未来通过 gomobile / FFI 把 Go 核心嵌入到移动端/桌面应用中,减少“先启动核心进程,再连接 HTTP 服务”的操作成本。
- Go 核心通过命令行参数接收 S3 配置: - 入口:`core/cmd/server/main.go:11-33` - 相关 flag: - `-s3-endpoint`:S3 端点,例如 `127.0.0.1:9000`。
- 项目已经是端到端加密: - 客户端在本地用 AES-256-GCM 加密后,才上传到 S3。
- 早期的 S3 配置是零散的: - 端点、AccessKey、SecretKey、Bucket 可能通过多个入口修改。
- 早期版本里存在一个 `UnlockPage`,用于输入“解锁密码/密钥”。
2025-12-14 HTTP 架构 vs NativeCore 抽象取舍记录
- 场景:在客户端中新建一个文本文件(例如 `note.txt`)时,文件列表中的图标是“文本文件图标”;但在文本编辑器里修改内容并保存后,图标会变成“普通文件图标”。
这次重构的起点是一个看起来很小、但暴露出架构问题的 bug:
我们讨论过一个方案: 把图片缩略图的生成从 Flutter/Dart 侧搬到 Go 后端,由 Go 负责解密原图并生成小图。
文件列表支持长按进入多选模式,进行批量复制、移动、删除等操作。
文件列表中展示图片略缩图时,遇到以下几个典型问题:
默认情况下,上传和下载任务都是按代码里固定的并发度执行,例如固定 3 个并发。
在实现文本文件编辑保存功能后,出现了两个严重问题:
最初文件列表右下角的上传按钮功能比较单一,只支持上传文件,且新建文本文件的交互是:
传输列表页支持按类型切换上传、下载、全部三个 Tab。