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 Modify bool
Expand bool Expand bool
ReadHeader bool ReadHeader bool
FolderSize bool
Token string Token string
Checker rules.Checker Checker rules.Checker
Content bool Content bool
@ -78,6 +79,14 @@ func NewFileInfo(opts FileOptions) (*FileInfo, error) {
return nil, err 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 opts.Expand {
if file.IsDir { if file.IsDir {
if err := file.readListing(opts.Checker, opts.ReadHeader); err != nil { //nolint:govet 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 return file, err
} }
func NewFolderInfo(opts FileOptions) (*FileInfo, error) { func getFolderSize(path string) (int64, 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) {
var size int64 var size int64
err := filepath.WalkDir(path, func(_ string, d os.DirEntry, err error) error { err := filepath.WalkDir(path, func(_ string, d os.DirEntry, err error) error {
if err != nil { if err != nil {

View File

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

View File

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