205daea027
Moved api services. All validations are now in validator util and all upload functions are in upload util
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
|
|
}
|