"github.com/anacrolix/torrent/util/dirwatch"
)
+var logger = log.Default.WithNames("main")
+
var args = struct {
MetainfoDir string `help:"torrent files in this location describe the contents of the mounted filesystem"`
DownloadDir string `help:"location to save torrent data"`
defer envpprof.Stop()
err := mainErr()
if err != nil {
- log.Printf("error in main: %v", err)
+ logger.Levelf(log.Error, "error in main: %v", err)
os.Exit(1)
}
}
os.Stderr.WriteString("y u no specify mountpoint?\n")
os.Exit(2)
}
- conn, err := fuse.Mount(args.MountDir)
+ conn, err := fuse.Mount(args.MountDir, fuse.ReadOnly())
if err != nil {
return fmt.Errorf("mounting: %w", err)
}
}()
}
+ logger.Levelf(log.Debug, "serving fuse fs")
if err := fusefs.Serve(conn, fs); err != nil {
return fmt.Errorf("serving fuse fs: %w", err)
}
+ logger.Levelf(log.Debug, "fuse fs completed successfully. waiting for conn ready")
<-conn.Ready
if err := conn.MountError; err != nil {
return fmt.Errorf("mount error: %w", err)
type fileHandle struct {
fn fileNode
- r torrent.Reader
+ tf *torrent.File
}
var _ interface {
if req.Dir {
panic("read on directory")
}
- r := me.r
+ r := me.tf.NewReader()
+ defer r.Close()
pos, err := r.Seek(req.Offset, io.SeekStart)
if err != nil {
panic(err)
}
func (me fileHandle) Release(context.Context, *fuse.ReleaseRequest) error {
- return me.r.Close()
+ return nil
}
}
func (fn fileNode) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenResponse) (fusefs.Handle, error) {
- r := fn.f.NewReader()
- return fileHandle{fn, r}, nil
+ return fileHandle{fn, fn.f}, nil
}