fix: fix formatting and add switch for showing folder size

This commit is contained in:
Suacrbah 2024-01-07 22:51:31 +08:00
parent 123f44d1c8
commit a1f79e1197
4 changed files with 25 additions and 31 deletions

View File

@ -55,6 +55,7 @@ type FileOptions struct {
Modify bool
Expand bool
ReadHeader bool
FolderSize bool
Token string
Checker rules.Checker
Content bool
@ -78,6 +79,14 @@ func NewFileInfo(opts FileOptions) (*FileInfo, error) {
return nil, err
}
if file.IsDir && opts.FolderSize {
size, err := getFolderSize(file.RealPath())
if err != nil {
return nil, err
}
file.Size = size
}
if opts.Expand {
if file.IsDir {
if err := file.readListing(opts.Checker, opts.ReadHeader); err != nil { //nolint:govet
@ -95,20 +104,7 @@ func NewFileInfo(opts FileOptions) (*FileInfo, error) {
return file, err
}
func NewFolderInfo(opts FileOptions) (*FileInfo, error) {
file, err := NewFileInfo(opts)
if err != nil {
return nil, err
}
size, err := GetFolderSize(file.RealPath())
if err != nil {
return nil, err
}
file.Size = size
return file, nil
}
func GetFolderSize(path string) (int64, error) {
func getFolderSize(path string) (int64, error) {
var size int64
err := filepath.WalkDir(path, func(_ string, d os.DirEntry, err error) error {
if err != nil {

View File

@ -42,16 +42,6 @@ async function resourceAction(url, method, content) {
return res;
}
async function resourceSizeAction(url, method, content) {
url = removePrefix(url);
let opts = { method };
if (content) {
opts.body = content;
}
const res = await fetchURL(`/api/resources/size${url}`, opts);
return res;
}
export async function remove(url) {
return resourceAction(url, "DELETE");
}
@ -173,8 +163,9 @@ export async function checksum(url, algo) {
return (await data.json()).checksums[algo];
}
export async function foldersize(url) {
const data = await resourceSizeAction(`${url}`, "GET");
export async function folderSize(url) {
url = removePrefix(url);
const data = await fetchURL(`/api/resources/size${url}`, { method: "GET" });
return (await data.json()).size;
}

View File

@ -18,10 +18,10 @@
<span id="content_length"></span> {{ humanSize }}
</p>
<p v-if="dir || selected.length > 1">
<p v-if="showFolderSize && (dir || selected.length > 1)">
<strong>Size: </strong
><code
><a @click="foldersize($event)">{{
><a @click="folderSize($event)">{{
$t("prompts.show")
}}</a></code
>
@ -103,6 +103,12 @@ import { files as api } from "@/api";
export default {
name: "info",
props: {
showFolderSize: {
type: Boolean,
default: true,
},
},
computed: {
...mapState(["req", "selected"]),
...mapGetters(["selectedCount", "isListing"]),
@ -175,7 +181,7 @@ export default {
this.$showError(e);
}
},
foldersize: async function (event) {
folderSize: async function (event) {
event.preventDefault();
try {
@ -186,7 +192,7 @@ export default {
if (!item.isDir) {
totalSize += item.size;
} else {
totalSize += await api.foldersize(item.url)
totalSize += await api.folderSize(item.url)
}
}

View File

@ -20,11 +20,12 @@ import (
)
var resourceGetSizeHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
folder, err := files.NewFolderInfo(files.FileOptions{
folder, err := files.NewFileInfo(files.FileOptions{
Fs: d.user.Fs,
Path: r.URL.Path,
Modify: d.user.Perm.Modify,
Expand: true,
FolderSize: true,
ReadHeader: d.server.TypeDetectionByHeader,
Checker: d,
Content: true,