Skip to content

下载镜像页新增“导入设备分区表”功能 - #6

Open
AiByteScribe wants to merge 1 commit into
hiifong:mainfrom
AiByteScribe:feat/import-device-partition-table
Open

AiByteScribe wants to merge 1 commit into
hiifong:mainfrom
AiByteScribe:feat/import-device-partition-table

Conversation

@AiByteScribe

Copy link
Copy Markdown

功能

在“下载镜像”页面新增“导入设备分区表”按钮:选择 SDK 的 parameter.txt(如 device/rockchip/.chips/rk3506/parameter-hmi-nand.txt)即可按分区表自动生成下载配置行,无需手动逐条新增配置项。

行为

  • 点击按钮选择 parameter 文件后,按分区顺序追加配置行:分区名与起始扇区自动填入(0x 十六进制),镜像路径留空由用户选择
  • 同时支持 GPT(TYPE: GPT + mtdparts)与传统(无 TYPE 行)parameter 格式
  • 兼容以下文件形态:PARM 头包装与裸文本、mtdparts 设备名前缀可省略(mtdparts=:…)、末尾的 uuid:rootfs=… 行、大小为 - 的 grow 分区

实现

  • 后端新增 parse_device_partition_table 命令,完全复用现有 parameter 解析逻辑(firmware/android.rs),仅做文件读取与格式分派
  • 前端在分区表格底部新增按钮,导入行走现有 PartitionRow 数据模型,不影响既有“新增配置项/清空”等功能
  • 中英文界面文案齐备;新增单元测试以真实 parameter-hmi-nand.txt 内容为 fixture 防回归

新增“导入设备分区表”按钮:选择 SDK 的 parameter.txt(GPT 或传统格式)后,
按分区表自动追加下载配置行(分区名与起始扇区自动填入,镜像路径留空待选),
无需手动逐条新增。

- 后端新增 parse_device_partition_table 命令,复用现有 parameter 解析逻辑;
  同时兼容 PARM 头包装与裸文本文件、mtdparts 设备名前缀可省略(mtdparts=:…)、
  parameter 内 uuid:rootfs=… 行
- 大小为 "-" 的分区(如 userdata:grow)按无固定大小导入
- 界面文案中英文齐备

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

新增的 Tauri 异步命令包含阻塞式文件读取且缺少对命令封装逻辑的单测覆盖,建议先修正以避免运行时阻塞与回归风险。

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

本 PR 为“下载镜像”页面增加从 SDK parameter.txt 导入设备分区表的能力,通过后端解析分区表并在前端自动追加下载配置行,减少手工逐条填写。

Changes:

  • 前端新增“导入设备分区表”按钮,选择 parameter 文件后按分区顺序追加配置行并自动填入起始扇区地址
  • 后端新增 parse_device_partition_table Tauri 命令,复用现有 parameter/GPT 解析逻辑输出精简分区条目
  • 补充中英文 i18n 文案,并新增针对 mtdparts=:(空设备名)场景的解析单测
File summaries
File Description
src/types/tool.ts 新增前后端通用的分区条目类型声明(用于导入结果传输)
src/i18n/messages/zh-CN.ts 增加“导入设备分区表”等中文文案
src/i18n/messages/en.ts 增加“Import device partition table”等英文文案
src/components/pages/DownloadPage.vue 增加导入按钮与导入逻辑,将解析结果追加为下载配置行并更新样式布局
src/api/tool.ts 增加前端 API:parseDevicePartitionTable 调用新 Tauri 命令
src-tauri/src/lib.rs 注册新 Tauri 命令到 invoke handler
src-tauri/src/firmware/android.rs 新增解析 mtdparts=: 的单测用例
src-tauri/src/device_ops.rs 新增后端命令 parse_device_partition_table,读取文件并分派 GPT/传统 parameter 解析
Review details
  • Files reviewed: 8/8 changed files
  • Comments generated: 3
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +1496 to +1497
let data = std::fs::read(&path).map_err(|e| format!("Read partition table failed: {e}"))?;
let partitions = match parse_gpt_parameter(&data)? {
Comment on lines +1490 to +1501
/// Parse a device parameter table file (SDK parameter.txt style) into entries
/// for the Download Image page.
#[tauri::command]
pub async fn parse_device_partition_table(
path: String,
) -> Result<Vec<DevicePartitionEntry>, String> {
let data = std::fs::read(&path).map_err(|e| format!("Read partition table failed: {e}"))?;
let partitions = match parse_gpt_parameter(&data)? {
Some(partitions) => partitions,
None => parse_parameter_partitions(&data)?
.ok_or_else(|| "Parameter file has no partition entries".to_string())?,
};
Comment on lines +639 to +643
const SDK_DEVICE_PARAMETER_FILE: &[u8] = b"FIRMWARE_VER:8.1\nMACHINE_MODEL:RK3506\nMACHINE_ID:007\nMANUFACTURER: RK3506\nMAGIC: 0x5041524B\nATAG: 0x00200800\nMACHINE: 3506\nCHECK_MASK: 0x80\nPWR_HLD: 0,0,A,0,1\nTYPE: GPT\nGROW_ALIGN: 0\nCMDLINE:mtdparts=:0x00001000@0x00000800(vnvm),0x00004000@0x00001800(uboot),0x00001000@0x00005800(misc),0x0000f000@0x00006800(recovery),0x00005000@0x00015800(boot),0x00050000@0x0001a800(rootfs),0x00008000@0x0006a800(oem),-@0x00072800(userdata:grow)\nuuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9\n";

#[test]
fn parses_sdk_device_parameter_file_with_empty_mtdparts_device_name() {
let partitions = parse_gpt_parameter(SDK_DEVICE_PARAMETER_FILE).unwrap().unwrap();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants