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
|
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 {
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user