alist icon indicating copy to clipboard operation
alist copied to clipboard

fix(misskey): folderId format validation and root directory handling

Open vxtls opened this issue 1 month ago • 0 comments

Description / 描述

主要更改:

  1. 修复panic问题

    • put方法中添加了空值检查,避免对nil调用GetID()
  2. 修复Misskey API的folderId格式问题

    • handleFolderId返回类型从string改为interface{}
    • 根目录返回nil而不是空字符串,避免触发misskey:id格式验证错误
    • put方法中正确处理form data,只有非根目录才添加folderId字段
  3. 添加根目录检查逻辑

    • 新增isRootFolder函数统一判断是否为根目录
    • 在所有相关方法中统一使用isRootFolder函数:
      • getFilesgetFolders:根目录不传folderId
      • handleFolderId:根目录返回nil
      • put:根目录不添加folderId到formData
  4. 代码优化

    • 统一了根目录判断逻辑,提高代码可维护性
    • 修复了类型转换问题,确保编译通过
    • 使用 http.MethodPost 代替手动编码的POST

Motivation and Context / 背景

为什么需要此更改?它解决了什么问题?

  1. Panic问题:当上传文件到根目录时,put方法中的dstDir为nil,导致dstDir.GetID()调用引发panic,此前将会导致500错误,文件在根目录将无法上传

  2. API格式验证错误:Misskey API对folderIdmisskey:id格式要求,对于根目录来说,空字符串不满足此格式,根目录不传 folderId 字段,而不是传空字符串,导致上传失败:

    {"error":{"message":"Invalid param.","code":"INVALID_PARAM","id":"3d81ceae-475f-4600-b2a8-2bc116157532","kind":"client","info":{"param":"#/properties/folderId/format","reason":"must match format \"misskey:id\""}}}
    
  3. 代码一致性:之前根目录判断逻辑分散在不同方法中,使用dir.GetPath() != "/"dir.GetID() == ""两种不同方式,需要统一

How Has This Been Tested? / 测试

测试步骤:

  1. 编译测试:使用go fmt格式化代码,确保代码风格一致
  2. 类型检查:确保所有方法调用的类型匹配,避免编译错误
  3. 逻辑验证
    • 根目录isRootFolder返回true,非根目录返回false
    • handleFolderId对根目录返回nil,非根目录返回正确的ID字符串
    • put方法中根目录不添加folderId字段,非根目录正确添加

测试场景:

  • 文件上传到根目录
  • 文件上传到子目录
  • 文件夹创建在根目录
  • 文件夹创建在子目录
  • 文件/文件夹移动操作

vxtls avatar Nov 15 '25 17:11 vxtls