2017-05-25 23:35:37 +02:00
package filelist
2017-05-24 16:13:56 +02:00
import (
2017-05-26 12:12:52 +02:00
"strings"
2017-05-24 16:13:56 +02:00
"github.com/NyaaPantsu/nyaa/model"
2017-05-25 23:35:37 +02:00
"github.com/bradfitz/slice"
2017-05-24 16:13:56 +02:00
)
2017-05-26 12:12:52 +02:00
// FileListFolder struct
2017-05-24 16:13:56 +02:00
type FileListFolder struct {
2017-05-26 03:53:18 +02:00
Folders [ ] * FileListFolder
Files [ ] model . File
FolderName string
2017-05-24 16:13:56 +02:00
}
2017-05-26 12:12:52 +02:00
// FileListToFolder convert a filelist to filelistfolder
2017-05-26 03:53:18 +02:00
func FileListToFolder ( fileList [ ] model . File , folderName string ) ( out * FileListFolder ) {
2017-05-24 16:13:56 +02:00
out = & FileListFolder {
2017-05-26 03:53:18 +02:00
Folders : make ( [ ] * FileListFolder , 0 ) ,
Files : make ( [ ] model . File , 0 ) ,
FolderName : folderName ,
2017-05-24 16:13:56 +02:00
}
pathsToFolders := make ( map [ string ] [ ] model . File )
for _ , file := range fileList {
pathArray := file . Path ( )
if len ( pathArray ) > 1 {
pathStrippedFile := model . File {
2017-05-25 23:35:37 +02:00
ID : file . ID ,
TorrentID : file . TorrentID ,
2017-05-24 16:13:56 +02:00
BencodedPath : "" ,
2017-05-25 23:35:37 +02:00
Filesize : file . Filesize ,
2017-05-24 16:13:56 +02:00
}
pathStrippedFile . SetPath ( pathArray [ 1 : ] )
pathsToFolders [ pathArray [ 0 ] ] = append ( pathsToFolders [ pathArray [ 0 ] ] , pathStrippedFile )
} else {
out . Files = append ( out . Files , file )
}
}
for folderName , folderFiles := range pathsToFolders {
2017-05-26 03:53:18 +02:00
out . Folders = append ( out . Folders , FileListToFolder ( folderFiles , folderName ) )
2017-05-24 16:13:56 +02:00
}
2017-05-26 03:53:18 +02:00
// 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 [ i ] . Filename ( ) )
} )
2017-05-24 16:13:56 +02:00
return
}
2017-05-26 12:12:52 +02:00
// TotalSize : gives the total size of filelistfolder
2017-05-24 16:13:56 +02:00
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
}