tstor/src/delivery/graphql/model/entry.go
2024-04-27 14:00:34 +03:00

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
}
}
}