This commit is contained in:
VXTLS 2025-11-15 12:37:11 -05:00 committed by GitHub
commit 8d269d0a9c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -4,6 +4,7 @@ import (
"context" "context"
"errors" "errors"
"io" "io"
"net/http"
"time" "time"
"github.com/go-resty/resty/v2" "github.com/go-resty/resty/v2"
@ -56,23 +57,27 @@ func setBody(body interface{}) base.ReqCallback {
} }
func handleFolderId(dir model.Obj) interface{} { func handleFolderId(dir model.Obj) interface{} {
if dir.GetID() == "" { if isRootFolder(dir) {
return nil return nil // Root folder doesn't need folderId
} }
return dir.GetID() return dir.GetID()
} }
func isRootFolder(dir model.Obj) bool {
return dir.GetID() == ""
}
// API layer methods // API layer methods
func (d *Misskey) getFiles(dir model.Obj) ([]model.Obj, error) { func (d *Misskey) getFiles(dir model.Obj) ([]model.Obj, error) {
var files []MFile var files []MFile
var body map[string]string var body map[string]string
if dir.GetPath() != "/" { if !isRootFolder(dir) {
body = map[string]string{"folderId": dir.GetID()} body = map[string]string{"folderId": dir.GetID()}
} else { } else {
body = map[string]string{} body = map[string]string{}
} }
err := d.request("/files", "POST", setBody(body), &files) err := d.request("/files", http.MethodPost, setBody(body), &files)
if err != nil { if err != nil {
return []model.Obj{}, err return []model.Obj{}, err
} }
@ -84,12 +89,12 @@ func (d *Misskey) getFiles(dir model.Obj) ([]model.Obj, error) {
func (d *Misskey) getFolders(dir model.Obj) ([]model.Obj, error) { func (d *Misskey) getFolders(dir model.Obj) ([]model.Obj, error) {
var folders []MFolder var folders []MFolder
var body map[string]string var body map[string]string
if dir.GetPath() != "/" { if !isRootFolder(dir) {
body = map[string]string{"folderId": dir.GetID()} body = map[string]string{"folderId": dir.GetID()}
} else { } else {
body = map[string]string{} body = map[string]string{}
} }
err := d.request("/folders", "POST", setBody(body), &folders) err := d.request("/folders", http.MethodPost, setBody(body), &folders)
if err != nil { if err != nil {
return []model.Obj{}, err return []model.Obj{}, err
} }
@ -106,7 +111,7 @@ func (d *Misskey) list(dir model.Obj) ([]model.Obj, error) {
func (d *Misskey) link(file model.Obj) (*model.Link, error) { func (d *Misskey) link(file model.Obj) (*model.Link, error) {
var mFile MFile var mFile MFile
err := d.request("/files/show", "POST", setBody(map[string]string{"fileId": file.GetID()}), &mFile) err := d.request("/files/show", http.MethodPost, setBody(map[string]string{"fileId": file.GetID()}), &mFile)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -117,7 +122,7 @@ func (d *Misskey) link(file model.Obj) (*model.Link, error) {
func (d *Misskey) makeDir(parentDir model.Obj, dirName string) (model.Obj, error) { func (d *Misskey) makeDir(parentDir model.Obj, dirName string) (model.Obj, error) {
var folder MFolder var folder MFolder
err := d.request("/folders/create", "POST", setBody(map[string]interface{}{"parentId": handleFolderId(parentDir), "name": dirName}), &folder) err := d.request("/folders/create", http.MethodPost, setBody(map[string]interface{}{"parentId": handleFolderId(parentDir), "name": dirName}), &folder)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -127,11 +132,11 @@ func (d *Misskey) makeDir(parentDir model.Obj, dirName string) (model.Obj, error
func (d *Misskey) move(srcObj, dstDir model.Obj) (model.Obj, error) { func (d *Misskey) move(srcObj, dstDir model.Obj) (model.Obj, error) {
if srcObj.IsDir() { if srcObj.IsDir() {
var folder MFolder var folder MFolder
err := d.request("/folders/update", "POST", setBody(map[string]interface{}{"folderId": srcObj.GetID(), "parentId": handleFolderId(dstDir)}), &folder) err := d.request("/folders/update", http.MethodPost, setBody(map[string]interface{}{"folderId": srcObj.GetID(), "parentId": handleFolderId(dstDir)}), &folder)
return mFolder2Object(folder), err return mFolder2Object(folder), err
} else { } else {
var file MFile var file MFile
err := d.request("/files/update", "POST", setBody(map[string]interface{}{"fileId": srcObj.GetID(), "folderId": handleFolderId(dstDir)}), &file) err := d.request("/files/update", http.MethodPost, setBody(map[string]interface{}{"fileId": srcObj.GetID(), "folderId": handleFolderId(dstDir)}), &file)
return mFile2Object(file), err return mFile2Object(file), err
} }
} }
@ -139,11 +144,11 @@ func (d *Misskey) move(srcObj, dstDir model.Obj) (model.Obj, error) {
func (d *Misskey) rename(srcObj model.Obj, newName string) (model.Obj, error) { func (d *Misskey) rename(srcObj model.Obj, newName string) (model.Obj, error) {
if srcObj.IsDir() { if srcObj.IsDir() {
var folder MFolder var folder MFolder
err := d.request("/folders/update", "POST", setBody(map[string]string{"folderId": srcObj.GetID(), "name": newName}), &folder) err := d.request("/folders/update", http.MethodPost, setBody(map[string]string{"folderId": srcObj.GetID(), "name": newName}), &folder)
return mFolder2Object(folder), err return mFolder2Object(folder), err
} else { } else {
var file MFile var file MFile
err := d.request("/files/update", "POST", setBody(map[string]string{"fileId": srcObj.GetID(), "name": newName}), &file) err := d.request("/files/update", http.MethodPost, setBody(map[string]string{"fileId": srcObj.GetID(), "name": newName}), &file)
return mFile2Object(file), err return mFile2Object(file), err
} }
} }
@ -171,7 +176,7 @@ func (d *Misskey) copy(srcObj, dstDir model.Obj) (model.Obj, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
err = d.request("/files/upload-from-url", "POST", setBody(map[string]interface{}{"url": url.URL, "folderId": handleFolderId(dstDir)}), &file) err = d.request("/files/upload-from-url", http.MethodPost, setBody(map[string]interface{}{"url": url.URL, "folderId": handleFolderId(dstDir)}), &file)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -181,10 +186,10 @@ func (d *Misskey) copy(srcObj, dstDir model.Obj) (model.Obj, error) {
func (d *Misskey) remove(obj model.Obj) error { func (d *Misskey) remove(obj model.Obj) error {
if obj.IsDir() { if obj.IsDir() {
err := d.request("/folders/delete", "POST", setBody(map[string]string{"folderId": obj.GetID()}), nil) err := d.request("/folders/delete", http.MethodPost, setBody(map[string]string{"folderId": obj.GetID()}), nil)
return err return err
} else { } else {
err := d.request("/files/delete", "POST", setBody(map[string]string{"fileId": obj.GetID()}), nil) err := d.request("/files/delete", http.MethodPost, setBody(map[string]string{"fileId": obj.GetID()}), nil)
return err return err
} }
} }
@ -196,16 +201,24 @@ func (d *Misskey) put(ctx context.Context, dstDir model.Obj, stream model.FileSt
Reader: stream, Reader: stream,
UpdateProgress: up, UpdateProgress: up,
}) })
req := base.RestyClient.R().
SetContext(ctx). // Build form data, only add folderId if not root folder
SetFileReader("file", stream.GetName(), reader). formData := map[string]string{
SetFormData(map[string]string{
"folderId": handleFolderId(dstDir).(string),
"name": stream.GetName(), "name": stream.GetName(),
"comment": "", "comment": "",
"isSensitive": "false", "isSensitive": "false",
"force": "false", "force": "false",
}). }
folderId := handleFolderId(dstDir)
if folderId != nil {
formData["folderId"] = folderId.(string)
}
req := base.RestyClient.R().
SetContext(ctx).
SetFileReader("file", stream.GetName(), reader).
SetFormData(formData).
SetResult(&file). SetResult(&file).
SetAuthToken(d.AccessToken) SetAuthToken(d.AccessToken)