75 lines
1.6 KiB
Go
75 lines
1.6 KiB
Go
package boxstore
|
|
|
|
import (
|
|
"os"
|
|
"sort"
|
|
|
|
"warpbox/lib/helpers"
|
|
"warpbox/lib/models"
|
|
)
|
|
|
|
func ListBoxSummaries() ([]models.BoxSummary, error) {
|
|
entries, err := os.ReadDir(uploadRoot)
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
return nil, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
summaries := make([]models.BoxSummary, 0, len(entries))
|
|
for _, entry := range entries {
|
|
if !entry.IsDir() || !ValidBoxID(entry.Name()) {
|
|
continue
|
|
}
|
|
|
|
summary, err := BoxSummary(entry.Name())
|
|
if err != nil {
|
|
continue
|
|
}
|
|
summaries = append(summaries, summary)
|
|
}
|
|
|
|
sort.Slice(summaries, func(i int, j int) bool {
|
|
return summaries[i].CreatedAt.After(summaries[j].CreatedAt)
|
|
})
|
|
return summaries, nil
|
|
}
|
|
|
|
func BoxSummary(boxID string) (models.BoxSummary, error) {
|
|
files, err := ListFiles(boxID)
|
|
if err != nil {
|
|
return models.BoxSummary{}, err
|
|
}
|
|
|
|
var manifest models.BoxManifest
|
|
hasManifest := false
|
|
if readManifest, err := ReadManifest(boxID); err == nil {
|
|
manifest = readManifest
|
|
hasManifest = true
|
|
}
|
|
|
|
totalSize := int64(0)
|
|
for _, file := range files {
|
|
totalSize += file.Size
|
|
}
|
|
|
|
summary := models.BoxSummary{
|
|
ID: boxID,
|
|
FileCount: len(files),
|
|
TotalSize: totalSize,
|
|
TotalSizeLabel: helpers.FormatBytes(totalSize),
|
|
}
|
|
if hasManifest {
|
|
summary.CreatedAt = manifest.CreatedAt
|
|
summary.ExpiresAt = manifest.ExpiresAt
|
|
summary.Expired = IsExpired(manifest)
|
|
summary.OneTimeDownload = manifest.OneTimeDownload
|
|
summary.PasswordProtected = IsPasswordProtected(manifest)
|
|
} else if info, err := os.Stat(BoxPath(boxID)); err == nil {
|
|
summary.CreatedAt = info.ModTime().UTC()
|
|
}
|
|
|
|
return summary, nil
|
|
}
|