@@ -51,6 +51,8 @@ type FsListResp struct {
5151 Total int64 `json:"total"`
5252 Readme string `json:"readme"`
5353 Header string `json:"header"`
54+ ReadmeObj * ObjResp `json:"readme_obj"`
55+ HeaderObj * ObjResp `json:"header_obj"`
5456 Write bool `json:"write"`
5557 Provider string `json:"provider"`
5658 Permissions int32 `json:"permissions"` // ACL permissions bitmask
@@ -120,13 +122,38 @@ func FsList(c *gin.Context, req *ListReq, user *model.User) {
120122 Total : int64 (total ),
121123 Readme : getReadme (meta , reqPath ),
122124 Header : getHeader (meta , reqPath ),
125+ ReadmeObj : resolveMetaObj (c , getReadme (meta , reqPath ), req .Password ),
126+ HeaderObj : resolveMetaObj (c , getHeader (meta , reqPath ), req .Password ),
123127 Write : user .CanWrite () || common .CanWrite (meta , reqPath ),
124128 Provider : provider ,
125129 Permissions : common .GetACLPermissions (c , reqPath ),
126130 DirectUploadTools : directUploadTools ,
127131 })
128132}
129133
134+ func resolveMetaObj (c * gin.Context , path string , password string ) * ObjResp {
135+ if ! strings .HasPrefix (path , "/" ) {
136+ return nil
137+ }
138+ obj , err := fs .Get (c .Request .Context (), path , & fs.GetArgs {})
139+ if err != nil {
140+ return nil
141+ }
142+ parent := stdpath .Dir (path )
143+ meta , _ := op .GetNearestMeta (path )
144+ return & ObjResp {
145+ Name : obj .GetName (),
146+ Size : obj .GetSize (),
147+ IsDir : obj .IsDir (),
148+ Modified : obj .ModTime (),
149+ Created : obj .CreateTime (),
150+ HashInfoStr : obj .GetHash ().String (),
151+ HashInfo : obj .GetHash ().Export (),
152+ Sign : common .Sign (obj , parent , isEncrypt (meta , path )),
153+ Type : utils .GetObjType (obj .GetName (), obj .IsDir ()),
154+ }
155+ }
156+
130157func FsDirs (c * gin.Context ) {
131158 var req DirReq
132159 if err := c .ShouldBind (& req ); err != nil {
@@ -257,11 +284,13 @@ type FsGetReq struct {
257284
258285type FsGetResp struct {
259286 ObjResp
260- RawURL string `json:"raw_url"`
261- Readme string `json:"readme"`
262- Header string `json:"header"`
263- Provider string `json:"provider"`
264- Related []ObjResp `json:"related"`
287+ RawURL string `json:"raw_url"`
288+ Readme string `json:"readme"`
289+ Header string `json:"header"`
290+ ReadmeObj * ObjResp `json:"readme_obj"`
291+ HeaderObj * ObjResp `json:"header_obj"`
292+ Provider string `json:"provider"`
293+ Related []ObjResp `json:"related"`
265294}
266295
267296func FsGetSplit (c * gin.Context ) {
@@ -375,11 +404,13 @@ func FsGet(c *gin.Context, req *FsGetReq, user *model.User) {
375404 Thumb : thumb ,
376405 MountDetails : mountDetails ,
377406 },
378- RawURL : rawURL ,
379- Readme : getReadme (meta , reqPath ),
380- Header : getHeader (meta , reqPath ),
381- Provider : provider ,
382- Related : toObjsResp (related , parentPath , isEncrypt (parentMeta , parentPath )),
407+ RawURL : rawURL ,
408+ Readme : getReadme (meta , reqPath ),
409+ Header : getHeader (meta , reqPath ),
410+ ReadmeObj : resolveMetaObj (c , getReadme (meta , reqPath ), req .Password ),
411+ HeaderObj : resolveMetaObj (c , getHeader (meta , reqPath ), req .Password ),
412+ Provider : provider ,
413+ Related : toObjsResp (related , parentPath , isEncrypt (parentMeta , parentPath )),
383414 })
384415}
385416
0 commit comments