feat: add S5FileInfo struct and refactorings needed to be used as a fs.File and in a fs.Fs
This commit is contained in:
parent
022d6a94cc
commit
3dbd791314
|
@ -5,8 +5,11 @@ import (
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
|
"io/fs"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
s5libmetadata "git.lumeweb.com/LumeWeb/libs5-go/metadata"
|
||||||
|
|
||||||
"git.lumeweb.com/LumeWeb/portal/protocols/s5"
|
"git.lumeweb.com/LumeWeb/portal/protocols/s5"
|
||||||
|
|
||||||
"git.lumeweb.com/LumeWeb/portal/metadata"
|
"git.lumeweb.com/LumeWeb/portal/metadata"
|
||||||
|
@ -18,6 +21,8 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ io.ReadSeekCloser = (*S5File)(nil)
|
var _ io.ReadSeekCloser = (*S5File)(nil)
|
||||||
|
var _ fs.File = (*S5File)(nil)
|
||||||
|
var _ fs.FileInfo = (*S5FileInfo)(nil)
|
||||||
|
|
||||||
type S5File struct {
|
type S5File struct {
|
||||||
reader io.ReadCloser
|
reader io.ReadCloser
|
||||||
|
@ -31,6 +36,7 @@ type S5File struct {
|
||||||
read bool
|
read bool
|
||||||
tus *s5.TusHandler
|
tus *s5.TusHandler
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
|
name string
|
||||||
}
|
}
|
||||||
|
|
||||||
type FileParams struct {
|
type FileParams struct {
|
||||||
|
@ -40,6 +46,7 @@ type FileParams struct {
|
||||||
Type types.CIDType
|
Type types.CIDType
|
||||||
Protocol *s5.S5Protocol
|
Protocol *s5.S5Protocol
|
||||||
Tus *s5.TusHandler
|
Tus *s5.TusHandler
|
||||||
|
Name string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewFile(params FileParams) *S5File {
|
func NewFile(params FileParams) *S5File {
|
||||||
|
@ -51,6 +58,7 @@ func NewFile(params FileParams) *S5File {
|
||||||
protocol: params.Protocol,
|
protocol: params.Protocol,
|
||||||
tus: params.Tus,
|
tus: params.Tus,
|
||||||
ctx: context.Background(),
|
ctx: context.Background(),
|
||||||
|
name: params.Name,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,6 +182,10 @@ func (f *S5File) HashString() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *S5File) Name() string {
|
func (f *S5File) Name() string {
|
||||||
|
if f.name != "" {
|
||||||
|
return f.name
|
||||||
|
}
|
||||||
|
|
||||||
cid, _ := f.CID().ToString()
|
cid, _ := f.CID().ToString()
|
||||||
|
|
||||||
return cid
|
return cid
|
||||||
|
@ -242,3 +254,49 @@ func (f *S5File) Proof() ([]byte, error) {
|
||||||
|
|
||||||
return proof, nil
|
return proof, nil
|
||||||
}
|
}
|
||||||
|
func (f *S5File) Manifest() (s5libmetadata.Metadata, error) {
|
||||||
|
meta, err := f.protocol.Node().Services().Storage().GetMetadataByCID(f.CID())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return meta, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *S5File) Stat() (fs.FileInfo, error) {
|
||||||
|
return newS5FileInfo(f), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type S5FileInfo struct {
|
||||||
|
file *S5File
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s S5FileInfo) Name() string {
|
||||||
|
return s.file.Name()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s S5FileInfo) Size() int64 {
|
||||||
|
return int64(s.file.Size())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s S5FileInfo) Mode() fs.FileMode {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s S5FileInfo) ModTime() time.Time {
|
||||||
|
return s.file.Modtime()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s S5FileInfo) IsDir() bool {
|
||||||
|
return s.file.typ == types.CIDTypeDirectory
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s S5FileInfo) Sys() any {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func newS5FileInfo(file *S5File) *S5FileInfo {
|
||||||
|
return &S5FileInfo{
|
||||||
|
file: file,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue