diff --git a/leech b/leech index 0c95f6c..7049312 100755 Binary files a/leech and b/leech differ diff --git a/route/route.go b/route/route.go index 0ae6cdb..b74572f 100644 --- a/route/route.go +++ b/route/route.go @@ -12,6 +12,29 @@ import ( "github.com/gofiber/fiber/v2" ) +func RecursivelyGetSize(completePath string) (int64, error) { + files, err := os.ReadDir(completePath) + if err != nil { + return -1, err + } + var sum int64 + for _, f := range files { + dirEntryInfo, err := f.Info() + if err != nil { + return -1, err + } + dirEntrySize := dirEntryInfo.Size() + if f.IsDir() { + dirEntrySize, err = RecursivelyGetSize(path.Join(completePath, f.Name())) + if err != nil { + return -1, err + } + } + sum += dirEntrySize + } + return sum, nil +} + func HandleList(c *fiber.Ctx) error { encodedReq := c.Params("req") req, err := url.QueryUnescape(encodedReq) @@ -54,9 +77,16 @@ func HandleList(c *fiber.Ctx) error { if err != nil { return c.Status(fiber.StatusInternalServerError).SendString("Internal server error!") } + dirEntrySize := dirEntryInfo.Size() + if f.IsDir() { + dirEntrySize, err = RecursivelyGetSize(path.Join(completePath, f.Name())) + if err != nil { + return c.Status(fiber.StatusInternalServerError).SendString(err.Error()) + } + } entries = append(entries, html.Entry{ Name: f.Name(), - Size: dirEntryInfo.Size(), + Size: dirEntrySize, IsDir: f.IsDir(), }) }