From 1fd4ebe53e511fbce277f3228022ae530bf6db11 Mon Sep 17 00:00:00 2001
From: Noah Hsu <i@nn.ci>
Date: Sun, 7 Aug 2022 21:01:29 +0800
Subject: [PATCH] feat: add related objs while get obj

---
 server/handles/fsread.go | 27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

diff --git a/server/handles/fsread.go b/server/handles/fsread.go
index d8bb74424a1..7300d62eb03 100644
--- a/server/handles/fsread.go
+++ b/server/handles/fsread.go
@@ -190,7 +190,9 @@ type FsGetOrLinkReq struct {
 
 type FsGetResp struct {
 	ObjResp
-	RawURL string `json:"raw_url"`
+	RawURL  string   `json:"raw_url"`
+	Readme  string   `json:"readme"`
+	Related []string `json:"related"`
 }
 
 func FsGet(c *gin.Context) {
@@ -242,6 +244,11 @@ func FsGet(c *gin.Context) {
 			}
 		}
 	}
+	var related []string
+	sameLevelFiles, err := fs.List(c, stdpath.Dir(req.Path))
+	if err == nil {
+		related = filterRelated(sameLevelFiles, obj)
+	}
 	common.SuccessResp(c, FsGetResp{
 		ObjResp: ObjResp{
 			Name:     obj.GetName(),
@@ -250,10 +257,26 @@ func FsGet(c *gin.Context) {
 			Modified: obj.ModTime(),
 			Sign:     common.Sign(obj),
 		},
-		RawURL: rawURL,
+		RawURL:  rawURL,
+		Readme:  getReadme(meta, req.Path),
+		Related: related,
 	})
 }
 
+func filterRelated(objs []model.Obj, obj model.Obj) []string {
+	var related []string
+	nameWithoutExt := strings.TrimSuffix(obj.GetName(), stdpath.Ext(obj.GetName()))
+	for _, o := range objs {
+		if o.GetName() == obj.GetName() {
+			continue
+		}
+		if strings.HasPrefix(o.GetName(), nameWithoutExt) {
+			related = append(related, o.GetName())
+		}
+	}
+	return related
+}
+
 type FsOtherReq struct {
 	model.FsOtherArgs
 	Password string `json:"password" form:"password"`