@@ -6,25 +6,21 @@ import (
66 "log/slog"
77 "os"
88 "path/filepath"
9- "runtime"
109 "slices"
11- "strings"
1210
13- "github.com/reinhrst/fzf-lib"
1411 "github.com/yorukot/superfile/src/internal/utils"
1512
1613 "github.com/adrg/xdg"
17- "github.com/shirou/gopsutil/v4/disk"
1814 variable "github.com/yorukot/superfile/src/config"
1915 "github.com/yorukot/superfile/src/config/icon"
2016)
2117
2218// Return all sidebar directories
23- func GetDirectories () []directory {
24- return FormDirctorySlice ( GetWellKnownDirectories (), GetPinnedDirectories (), GetExternalMediaFolders ())
19+ func getDirectories () []directory {
20+ return formDirctorySlice ( getWellKnownDirectories (), getPinnedDirectories (), getExternalMediaFolders ())
2521}
2622
27- func FormDirctorySlice (homeDirectories []directory , pinnedDirectories []directory , diskDirectories []directory ) []directory {
23+ func formDirctorySlice (homeDirectories []directory , pinnedDirectories []directory , diskDirectories []directory ) []directory {
2824 // Preallocation for efficiency
2925 totalCapacity := len (homeDirectories ) + len (pinnedDirectories ) + len (diskDirectories ) + 2
3026 directories := make ([]directory , 0 , totalCapacity )
@@ -38,7 +34,7 @@ func FormDirctorySlice(homeDirectories []directory, pinnedDirectories []director
3834}
3935
4036// Return system default directory e.g. Home, Downloads, etc
41- func GetWellKnownDirectories () []directory {
37+ func getWellKnownDirectories () []directory {
4238 wellKnownDirectories := []directory {
4339 {Location : xdg .Home , Name : icon .Home + icon .Space + "Home" },
4440 {Location : xdg .UserDirs .Download , Name : icon .Download + icon .Space + "Downloads" },
@@ -57,7 +53,7 @@ func GetWellKnownDirectories() []directory {
5753}
5854
5955// Get user pinned directories
60- func GetPinnedDirectories () []directory {
56+ func getPinnedDirectories () []directory {
6157 directories := []directory {}
6258 var paths []string
6359
@@ -84,88 +80,8 @@ func GetPinnedDirectories() []directory {
8480 return directories
8581}
8682
87- // Get external media directories
88- func GetExternalMediaFolders () []directory {
89- // only get physical drives
90- parts , err := disk .Partitions (false )
91-
92- if err != nil {
93- slog .Error ("Error while getting external media: " , "error" , err )
94- return nil
95- }
96- var disks []directory
97- for _ , disk := range parts {
98- // ShouldListDisk, DiskName, and DiskLocation, each has runtime.GOOS checks
99- // We can ideally reduce it to one check only.
100- if ShouldListDisk (disk .Mountpoint ) {
101- disks = append (disks , directory {
102- Name : DiskName (disk .Mountpoint ),
103- Location : DiskLocation (disk .Mountpoint ),
104- })
105- }
106- }
107- return disks
108- }
109-
110- func ShouldListDisk (mountPoint string ) bool {
111- if runtime .GOOS == utils .OsWindows {
112- // We need to get C:, D: drive etc in the list
113- return true
114- }
115-
116- // Should always list the main disk
117- if mountPoint == "/" {
118- return true
119- }
120-
121- // Todo : make a configurable field in config.yaml
122- // excluded_disk_mounts = ["/Volumes/.timemachine"]
123- // Mountpoints that are in subdirectory of disk_mounts
124- // but still are to be excluded in disk section of sidebar
125- if strings .HasPrefix (mountPoint , "/Volumes/.timemachine" ) {
126- return false
127- }
128-
129- // We avoid listing all mounted partitions (Otherwise listed disk could get huge)
130- // but only a few partitions that usually corresponds to external physical devices
131- // For example : mounts like /boot, /var/ will get skipped
132- // This can be inaccurate based on your system setup if you mount any external devices
133- // on other directories, or if you have some extra mounts on these directories
134- // Todo : make a configurable field in config.yaml
135- // disk_mounts = ["/mnt", "/media", "/run/media", "/Volumes"]
136- // Only block devicies that are mounted on these or any subdirectory of these Mountpoints
137- // Will be shown in disk sidebar
138- return strings .HasPrefix (mountPoint , "/mnt" ) ||
139- strings .HasPrefix (mountPoint , "/media" ) ||
140- strings .HasPrefix (mountPoint , "/run/media" ) ||
141- strings .HasPrefix (mountPoint , "/Volumes" )
142- }
143-
144- func DiskName (mountPoint string ) string {
145- // In windows we dont want to use filepath.Base as it returns "\" for when
146- // mountPoint is any drive root "C:", "D:", etc. Hence causing same name
147- // for each drive
148- if runtime .GOOS == utils .OsWindows {
149- return mountPoint
150- }
151-
152- // This might cause duplicate names in case you mount two devices in
153- // /mnt/usb and /mnt/dir2/usb . Full mountpoint is a more accurate way
154- // but that results in messy UI, hence we do this.
155- return filepath .Base (mountPoint )
156- }
157-
158- func DiskLocation (mountPoint string ) string {
159- // In windows if you are in "C:\some\path", "cd C:" will not cd to root of C: drive
160- // but "cd C:\" will
161- if runtime .GOOS == utils .OsWindows {
162- return filepath .Join (mountPoint , "\\ " )
163- }
164- return mountPoint
165- }
166-
16783// Fuzzy search function for a list of directories.
168- func FuzzySearch (query string , dirs []directory ) []directory {
84+ func fuzzySearch (query string , dirs []directory ) []directory {
16985 if len (dirs ) == 0 {
17086 return []directory {}
17187 }
@@ -181,7 +97,7 @@ func FuzzySearch(query string, dirs []directory) []directory {
18197 dirMap [dir .Name ] = dir
18298 }
18399
184- for _ , match := range FzfSearch (query , haystack ) {
100+ for _ , match := range utils . FzfSearch (query , haystack ) {
185101 if d , ok := dirMap [match .Key ]; ok {
186102 filteredDirs = append (filteredDirs , d )
187103 }
@@ -191,26 +107,17 @@ func FuzzySearch(query string, dirs []directory) []directory {
191107}
192108
193109// Get filtered directories using fuzzy search logic with three haystacks.
194- func GetFilteredDirectories (query string ) []directory {
195- return FormDirctorySlice (
196- FuzzySearch (query , GetWellKnownDirectories ()),
197- FuzzySearch (query , GetPinnedDirectories ()),
198- FuzzySearch (query , GetExternalMediaFolders ()),
110+ func getFilteredDirectories (query string ) []directory {
111+ return formDirctorySlice (
112+ fuzzySearch (query , getWellKnownDirectories ()),
113+ fuzzySearch (query , getPinnedDirectories ()),
114+ fuzzySearch (query , getExternalMediaFolders ()),
199115 )
200116}
201117
202- // Returning a string slice causes inefficiency in current usage
203- func FzfSearch (query string , source []string ) []fzf.MatchResult {
204- fzfSearcher := fzf .New (source , fzf .DefaultOptions ())
205- fzfSearcher .Search (query )
206- fzfResults := <- fzfSearcher .GetResultChannel ()
207- fzfSearcher .End ()
208- return fzfResults .Matches
209- }
210-
211118// TogglePinnedDirectory adds or removes a directory from the pinned directories list
212119func TogglePinnedDirectory (dir string ) error {
213- dirs := GetPinnedDirectories ()
120+ dirs := getPinnedDirectories ()
214121 unPinned := false
215122
216123 for i , other := range dirs {
0 commit comments