package utils
import (
"path/filepath"
"runtime"
"strings"
)
// StripMountPoint removes OS-specific mount point prefixes from a path
func StripMountPoint(absPath string) string {
// Clean path first
absPath = filepath.Clean(absPath)
// Handle Windows drive letters
if runtime.GOOS == "windows" {
volumeName := filepath.VolumeName(absPath)
if volumeName != "" {
// Remove "C:\" and return rest
return strings.TrimPrefix(absPath, volumeName+string(filepath.Separator))
}
}
// Handle Unix-like mount points
switch {
case absPath == "/Volumes":
// Exact match to mount point root
return "."
case strings.HasPrefix(absPath, "/Volumes/"):
// macOS external volumes: /Volumes/Drive/... → Drive/...
return strings.TrimPrefix(absPath, "/Volumes/")
case strings.HasPrefix(absPath, "/media/"):
// Linux user mounts: /media/username/Drive/... → Drive/...
// Strip /media/ and the username directory
pathAfterMedia := strings.TrimPrefix(absPath, "/media/")
parts := strings.SplitN(pathAfterMedia, string(filepath.Separator), 2)
if len(parts) > 1 {
return parts[1] // Return everything after username
}
// Just username, no subdirectory (e.g., /media/david)
return "."
case strings.HasPrefix(absPath, "/mnt/"):
// Linux system mounts: /mnt/storage/... → storage/...
return strings.TrimPrefix(absPath, "/mnt/")
}
// No known mount point detected, return as-is
return absPath
}
// NormalizeFolderPath strips mount points and cleans up a folder path
// Unlike a file path normalization, this expects a directory path
func NormalizeFolderPath(folderPath string) string {
// Clean the path
folderPath = filepath.Clean(folderPath)
// Strip mount point
relativePath := StripMountPoint(folderPath)
// Clean up leading/trailing slashes
relativePath = strings.Trim(relativePath, string(filepath.Separator))
return relativePath
}