97b3a1d7ea
Common is no more a thing Use of TorrentParam instead of SearchParam now Common structs for search are exported in utils/search/structs Util has been renamed utils
69 lignes
1,7 Kio
Go
69 lignes
1,7 Kio
Go
package filelist
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/NyaaPantsu/nyaa/models"
|
|
"github.com/bradfitz/slice"
|
|
)
|
|
|
|
// FileListFolder struct
|
|
type FileListFolder struct {
|
|
Folders []*FileListFolder
|
|
Files []models.File
|
|
FolderName string
|
|
}
|
|
|
|
// FileListToFolder convert a filelist to filelistfolder
|
|
func FileListToFolder(fileList []models.File, folderName string) (out *FileListFolder) {
|
|
out = &FileListFolder{
|
|
Folders: make([]*FileListFolder, 0),
|
|
Files: make([]models.File, 0),
|
|
FolderName: folderName,
|
|
}
|
|
|
|
pathsToFolders := make(map[string][]models.File)
|
|
|
|
for _, file := range fileList {
|
|
pathArray := file.Path()
|
|
|
|
if len(pathArray) > 1 {
|
|
pathStrippedFile := models.File{
|
|
ID: file.ID,
|
|
TorrentID: file.TorrentID,
|
|
BencodedPath: "",
|
|
Filesize: file.Filesize,
|
|
}
|
|
pathStrippedFile.SetPath(pathArray[1:])
|
|
pathsToFolders[pathArray[0]] = append(pathsToFolders[pathArray[0]], pathStrippedFile)
|
|
} else {
|
|
out.Files = append(out.Files, file)
|
|
}
|
|
}
|
|
|
|
for folderName, folderFiles := range pathsToFolders {
|
|
out.Folders = append(out.Folders, FileListToFolder(folderFiles, folderName))
|
|
}
|
|
|
|
// Do some sorting
|
|
slice.Sort(out.Folders, func(i, j int) bool {
|
|
return strings.ToLower(out.Folders[i].FolderName) < strings.ToLower(out.Folders[j].FolderName)
|
|
})
|
|
slice.Sort(out.Files, func(i, j int) bool {
|
|
return strings.ToLower(out.Files[i].Filename()) < strings.ToLower(out.Files[j].Filename())
|
|
})
|
|
return
|
|
}
|
|
|
|
// TotalSize : gives the total size of filelistfolder
|
|
func (f *FileListFolder) TotalSize() (out int64) {
|
|
out = 0
|
|
for _, folder := range f.Folders {
|
|
out += folder.TotalSize()
|
|
}
|
|
|
|
for _, file := range f.Files {
|
|
out += file.Filesize
|
|
}
|
|
return
|
|
}
|