fix: fix formatting and add switch for showing folder size
This commit is contained in:
parent
123f44d1c8
commit
a1f79e1197
@ -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 {
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user