44 "context"
55 "errors"
66 "io"
7+ "net/http"
78 "time"
89
910 "github.com/go-resty/resty/v2"
@@ -56,23 +57,27 @@ func setBody(body interface{}) base.ReqCallback {
5657}
5758
5859func handleFolderId (dir model.Obj ) interface {} {
59- if dir . GetID () == "" {
60- return nil
60+ if isRootFolder ( dir ) {
61+ return nil // Root folder doesn't need folderId
6162 }
6263 return dir .GetID ()
6364}
6465
66+ func isRootFolder (dir model.Obj ) bool {
67+ return dir .GetID () == ""
68+ }
69+
6570// API layer methods
6671
6772func (d * Misskey ) getFiles (dir model.Obj ) ([]model.Obj , error ) {
6873 var files []MFile
6974 var body map [string ]string
70- if dir . GetPath () != "/" {
75+ if ! isRootFolder ( dir ) {
7176 body = map [string ]string {"folderId" : dir .GetID ()}
7277 } else {
7378 body = map [string ]string {}
7479 }
75- err := d .request ("/files" , "POST" , setBody (body ), & files )
80+ err := d .request ("/files" , http . MethodPost , setBody (body ), & files )
7681 if err != nil {
7782 return []model.Obj {}, err
7883 }
@@ -84,12 +89,12 @@ func (d *Misskey) getFiles(dir model.Obj) ([]model.Obj, error) {
8489func (d * Misskey ) getFolders (dir model.Obj ) ([]model.Obj , error ) {
8590 var folders []MFolder
8691 var body map [string ]string
87- if dir . GetPath () != "/" {
92+ if ! isRootFolder ( dir ) {
8893 body = map [string ]string {"folderId" : dir .GetID ()}
8994 } else {
9095 body = map [string ]string {}
9196 }
92- err := d .request ("/folders" , "POST" , setBody (body ), & folders )
97+ err := d .request ("/folders" , http . MethodPost , setBody (body ), & folders )
9398 if err != nil {
9499 return []model.Obj {}, err
95100 }
@@ -106,7 +111,7 @@ func (d *Misskey) list(dir model.Obj) ([]model.Obj, error) {
106111
107112func (d * Misskey ) link (file model.Obj ) (* model.Link , error ) {
108113 var mFile MFile
109- err := d .request ("/files/show" , "POST" , setBody (map [string ]string {"fileId" : file .GetID ()}), & mFile )
114+ err := d .request ("/files/show" , http . MethodPost , setBody (map [string ]string {"fileId" : file .GetID ()}), & mFile )
110115 if err != nil {
111116 return nil , err
112117 }
@@ -117,7 +122,7 @@ func (d *Misskey) link(file model.Obj) (*model.Link, error) {
117122
118123func (d * Misskey ) makeDir (parentDir model.Obj , dirName string ) (model.Obj , error ) {
119124 var folder MFolder
120- err := d .request ("/folders/create" , "POST" , setBody (map [string ]interface {}{"parentId" : handleFolderId (parentDir ), "name" : dirName }), & folder )
125+ err := d .request ("/folders/create" , http . MethodPost , setBody (map [string ]interface {}{"parentId" : handleFolderId (parentDir ), "name" : dirName }), & folder )
121126 if err != nil {
122127 return nil , err
123128 }
@@ -127,23 +132,23 @@ func (d *Misskey) makeDir(parentDir model.Obj, dirName string) (model.Obj, error
127132func (d * Misskey ) move (srcObj , dstDir model.Obj ) (model.Obj , error ) {
128133 if srcObj .IsDir () {
129134 var folder MFolder
130- err := d .request ("/folders/update" , "POST" , setBody (map [string ]interface {}{"folderId" : srcObj .GetID (), "parentId" : handleFolderId (dstDir )}), & folder )
135+ err := d .request ("/folders/update" , http . MethodPost , setBody (map [string ]interface {}{"folderId" : srcObj .GetID (), "parentId" : handleFolderId (dstDir )}), & folder )
131136 return mFolder2Object (folder ), err
132137 } else {
133138 var file MFile
134- err := d .request ("/files/update" , "POST" , setBody (map [string ]interface {}{"fileId" : srcObj .GetID (), "folderId" : handleFolderId (dstDir )}), & file )
139+ err := d .request ("/files/update" , http . MethodPost , setBody (map [string ]interface {}{"fileId" : srcObj .GetID (), "folderId" : handleFolderId (dstDir )}), & file )
135140 return mFile2Object (file ), err
136141 }
137142}
138143
139144func (d * Misskey ) rename (srcObj model.Obj , newName string ) (model.Obj , error ) {
140145 if srcObj .IsDir () {
141146 var folder MFolder
142- err := d .request ("/folders/update" , "POST" , setBody (map [string ]string {"folderId" : srcObj .GetID (), "name" : newName }), & folder )
147+ err := d .request ("/folders/update" , http . MethodPost , setBody (map [string ]string {"folderId" : srcObj .GetID (), "name" : newName }), & folder )
143148 return mFolder2Object (folder ), err
144149 } else {
145150 var file MFile
146- err := d .request ("/files/update" , "POST" , setBody (map [string ]string {"fileId" : srcObj .GetID (), "name" : newName }), & file )
151+ err := d .request ("/files/update" , http . MethodPost , setBody (map [string ]string {"fileId" : srcObj .GetID (), "name" : newName }), & file )
147152 return mFile2Object (file ), err
148153 }
149154}
@@ -171,7 +176,7 @@ func (d *Misskey) copy(srcObj, dstDir model.Obj) (model.Obj, error) {
171176 if err != nil {
172177 return nil , err
173178 }
174- err = d .request ("/files/upload-from-url" , "POST" , setBody (map [string ]interface {}{"url" : url .URL , "folderId" : handleFolderId (dstDir )}), & file )
179+ err = d .request ("/files/upload-from-url" , http . MethodPost , setBody (map [string ]interface {}{"url" : url .URL , "folderId" : handleFolderId (dstDir )}), & file )
175180 if err != nil {
176181 return nil , err
177182 }
@@ -181,10 +186,10 @@ func (d *Misskey) copy(srcObj, dstDir model.Obj) (model.Obj, error) {
181186
182187func (d * Misskey ) remove (obj model.Obj ) error {
183188 if obj .IsDir () {
184- err := d .request ("/folders/delete" , "POST" , setBody (map [string ]string {"folderId" : obj .GetID ()}), nil )
189+ err := d .request ("/folders/delete" , http . MethodPost , setBody (map [string ]string {"folderId" : obj .GetID ()}), nil )
185190 return err
186191 } else {
187- err := d .request ("/files/delete" , "POST" , setBody (map [string ]string {"fileId" : obj .GetID ()}), nil )
192+ err := d .request ("/files/delete" , http . MethodPost , setBody (map [string ]string {"fileId" : obj .GetID ()}), nil )
188193 return err
189194 }
190195}
@@ -196,16 +201,24 @@ func (d *Misskey) put(ctx context.Context, dstDir model.Obj, stream model.FileSt
196201 Reader : stream ,
197202 UpdateProgress : up ,
198203 })
204+
205+ // Build form data, only add folderId if not root folder
206+ formData := map [string ]string {
207+ "name" : stream .GetName (),
208+ "comment" : "" ,
209+ "isSensitive" : "false" ,
210+ "force" : "false" ,
211+ }
212+
213+ folderId := handleFolderId (dstDir )
214+ if folderId != nil {
215+ formData ["folderId" ] = folderId .(string )
216+ }
217+
199218 req := base .RestyClient .R ().
200219 SetContext (ctx ).
201220 SetFileReader ("file" , stream .GetName (), reader ).
202- SetFormData (map [string ]string {
203- "folderId" : handleFolderId (dstDir ).(string ),
204- "name" : stream .GetName (),
205- "comment" : "" ,
206- "isSensitive" : "false" ,
207- "force" : "false" ,
208- }).
221+ SetFormData (formData ).
209222 SetResult (& file ).
210223 SetAuthToken (d .AccessToken )
211224
0 commit comments