Info Fetching completed
This commit is contained in:
98
lib/helper/helper.go
Normal file
98
lib/helper/helper.go
Normal file
@@ -0,0 +1,98 @@
|
||||
package helper
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"mime"
|
||||
"net/url"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
func ParseSizeToKB(sizeStr string) (int64, error) {
|
||||
s := strings.TrimSpace(strings.ToLower(sizeStr))
|
||||
|
||||
var multiplier float64
|
||||
switch {
|
||||
case strings.HasSuffix(s, "gb"):
|
||||
multiplier = 1024 * 1024
|
||||
s = strings.TrimSuffix(s, "gb")
|
||||
case strings.HasSuffix(s, "mb"):
|
||||
multiplier = 1024
|
||||
s = strings.TrimSuffix(s, "mb")
|
||||
case strings.HasSuffix(s, "kb"):
|
||||
multiplier = 1
|
||||
s = strings.TrimSuffix(s, "kb")
|
||||
default:
|
||||
return 0, fmt.Errorf("unrecognized unit in %q", sizeStr)
|
||||
}
|
||||
|
||||
s = strings.TrimSpace(s)
|
||||
value, err := strconv.ParseFloat(s, 64)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("invalid number %q: %w", s, err)
|
||||
}
|
||||
|
||||
return int64(value * multiplier), nil
|
||||
}
|
||||
|
||||
func FormatSizeFromKB(sizeKB int64) (string, error) {
|
||||
if sizeKB < 0 {
|
||||
return "", fmt.Errorf("size must be non-negative")
|
||||
}
|
||||
|
||||
units := []string{"Kb", "Mb", "Gb", "Tb"} //Add more if needed.
|
||||
unitIndex := 0
|
||||
|
||||
sizeFloat := float64(sizeKB)
|
||||
|
||||
for sizeFloat >= 1024 && unitIndex < len(units)-1 {
|
||||
sizeFloat /= 1024
|
||||
unitIndex++
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%.2f %s", sizeFloat, units[unitIndex]), nil
|
||||
}
|
||||
|
||||
func GetLastPathElement(u *url.URL) string {
|
||||
|
||||
path := u.Path
|
||||
if path == "" {
|
||||
return "" // Handle empty path
|
||||
}
|
||||
|
||||
parts := strings.Split(path, "/")
|
||||
if len(parts) == 0 {
|
||||
return ""
|
||||
}
|
||||
|
||||
return parts[len(parts)-1]
|
||||
}
|
||||
|
||||
func GetMimeTypeFromFilename(filename string) string {
|
||||
ext := strings.ToLower(filepath.Ext(filename))
|
||||
if ext == "" {
|
||||
return "application/octet-stream" // fallback
|
||||
}
|
||||
|
||||
mimeType := mime.TypeByExtension(ext)
|
||||
if mimeType != "" {
|
||||
return mimeType
|
||||
}
|
||||
|
||||
// handle common missing types
|
||||
switch ext {
|
||||
case ".mov":
|
||||
return "video/quicktime"
|
||||
case ".rar":
|
||||
return "application/x-rar-compressed"
|
||||
default:
|
||||
return "application/octet-stream"
|
||||
}
|
||||
}
|
||||
|
||||
func ParseCustomDateTime(input string) (time.Time, error) {
|
||||
layout := "15:04:05 02/01/2006"
|
||||
return time.Parse(layout, input)
|
||||
}
|
||||
Reference in New Issue
Block a user