53 lines
897 B
Go
53 lines
897 B
Go
package model
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.kmsign.ru/royalcat/tstor/src/host/vfs"
|
|
)
|
|
|
|
type FsElem interface {
|
|
Name() string
|
|
IsDir() bool
|
|
}
|
|
|
|
func FillFsEntry(ctx context.Context, e FsElem, fs vfs.Filesystem, path string) (FsEntry, error) {
|
|
switch e.(type) {
|
|
case *vfs.ArchiveFS:
|
|
e := e.(*vfs.ArchiveFS)
|
|
return ArchiveFs{
|
|
Name: e.Name(),
|
|
Size: e.Size(),
|
|
FS: e,
|
|
}, nil
|
|
case *vfs.ResolverFS:
|
|
e := e.(*vfs.ResolverFS)
|
|
return ResolverFs{
|
|
Name: e.Name(),
|
|
FS: e,
|
|
}, nil
|
|
case *vfs.TorrentFS:
|
|
e := e.(*vfs.TorrentFS)
|
|
torrent, err := MapTorrent(ctx, e.Torrent)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return TorrentFs{
|
|
Name: e.Name(),
|
|
Torrent: torrent,
|
|
FS: e,
|
|
}, nil
|
|
default:
|
|
if e.IsDir() {
|
|
return SimpleDir{
|
|
Name: e.Name(),
|
|
FS: fs,
|
|
Path: path,
|
|
}, nil
|
|
} else {
|
|
return SimpleFile{
|
|
Name: e.Name(),
|
|
}, nil
|
|
}
|
|
}
|
|
}
|