Add rewritten infinitime abstraction and integrate it into ITD

This commit is contained in:
2024-04-13 21:20:12 -07:00
parent 2a8013e63e
commit 7e68d5541c
31 changed files with 2758 additions and 474 deletions

View File

@@ -9,8 +9,7 @@ import (
"github.com/hanwen/go-fuse/v2/fs"
"github.com/hanwen/go-fuse/v2/fuse"
"go.elara.ws/infinitime"
"go.elara.ws/infinitime/blefs"
"go.elara.ws/itd/infinitime"
"go.elara.ws/logger/log"
)
@@ -47,14 +46,14 @@ const (
)
var (
myfs *blefs.FS = nil
myfs *infinitime.FS = nil
inodemap map[string]uint64 = nil
)
func BuildRootNode(dev *infinitime.Device) (*ITNode, error) {
var err error
inodemap = make(map[string]uint64)
myfs, err = dev.FS()
myfs = dev.FS()
if err != nil {
log.Error("FUSE Failed to get filesystem").Err(err).Send()
return nil, err
@@ -343,13 +342,10 @@ func (fh *bytesFileWriteHandle) Flush(ctx context.Context) (errno syscall.Errno)
}
return 0
}
go func() {
// For every progress event
for sent := range fp.Progress() {
log.Debug("FUSE Flush progress").Int("bytes", int(sent)).Int("total", len(fh.content)).Send()
}
}()
fp.ProgressFunc = func(transferred, total uint32) {
log.Debug("FUSE Read progress").Uint32("bytes", transferred).Uint32("total", total).Send()
}
r := bytes.NewReader(fh.content)
nread, err := io.Copy(fp, r)
@@ -430,12 +426,9 @@ func (f *ITNode) Open(ctx context.Context, openFlags uint32) (fh fs.FileHandle,
b := &bytes.Buffer{}
go func() {
// For every progress event
for sent := range fp.Progress() {
log.Debug("FUSE Read progress").Int("bytes", int(sent)).Int("total", int(f.self.size)).Send()
}
}()
fp.ProgressFunc = func(transferred, total uint32) {
log.Debug("FUSE Read progress").Uint32("bytes", transferred).Uint32("total", total).Send()
}
_, err = io.Copy(b, fp)
if err != nil {

View File

@@ -3,7 +3,7 @@ package fusefs
import (
"syscall"
"go.elara.ws/infinitime/blefs"
"go.elara.ws/itd/internal/fsproto"
)
func syscallErr(err error) syscall.Errno {
@@ -12,10 +12,10 @@ func syscallErr(err error) syscall.Errno {
}
switch err := err.(type) {
case blefs.FSError:
case fsproto.Error:
switch err.Code {
case 0x02: // filesystem error
return syscall.EIO // TODO
return syscall.EIO
case 0x05: // read-only filesystem
return syscall.EROFS
case 0x03: // no such file
@@ -25,7 +25,7 @@ func syscallErr(err error) syscall.Errno {
case -5: // input/output error
return syscall.EIO
case -84: // filesystem is corrupted
return syscall.ENOTRECOVERABLE // TODO
return syscall.ENOTRECOVERABLE
case -2: // no such directory entry
return syscall.ENOENT
case -17: // entry already exists
@@ -45,28 +45,24 @@ func syscallErr(err error) syscall.Errno {
case -12: // no more memory available
return syscall.ENOMEM
case -61: // no attr available
return syscall.ENODATA // TODO
return syscall.ENODATA
case -36: // file name is too long
return syscall.ENAMETOOLONG
}
default:
switch err {
case blefs.ErrFileNotExists: // file does not exist
case fsproto.ErrFileNotExists: // file does not exist
return syscall.ENOENT
case blefs.ErrFileReadOnly: // file is read only
case fsproto.ErrFileReadOnly: // file is read only
return syscall.EACCES
case blefs.ErrFileWriteOnly: // file is write only
case fsproto.ErrFileWriteOnly: // file is write only
return syscall.EACCES
case blefs.ErrInvalidOffset: // invalid file offset
case fsproto.ErrInvalidOffset: // invalid file offset
return syscall.EINVAL
case blefs.ErrOffsetChanged: // offset has already been changed
return syscall.ESPIPE
case blefs.ErrReadOpen: // only one file can be opened for reading at a time
return syscall.ENFILE
case blefs.ErrWriteOpen: // only one file can be opened for writing at a time
return syscall.ENFILE
case blefs.ErrNoRemoveRoot: // refusing to remove root directory
case fsproto.ErrNoRemoveRoot: // refusing to remove root directory
return syscall.EPERM
default:
return syscall.EINVAL
}
}