torrent directory fix

This commit is contained in:
Ben Sarmiento
2023-11-11 13:31:24 +01:00
parent 263b0e0039
commit fef389e10d
4 changed files with 21 additions and 19 deletions

View File

@@ -180,7 +180,6 @@ func (t *TorrentManager) getChecksum() string {
} }
checksum := fmt.Sprintf("%d%s%d", totalCount, torrents[0].ID, count) checksum := fmt.Sprintf("%d%s%d", totalCount, torrents[0].ID, count)
t.log.Debugf("Checksum: %s", checksum)
return checksum return checksum
} }
@@ -291,8 +290,9 @@ func (t *TorrentManager) getMoreInfo(rdTorrent realdebrid.Torrent) *Torrent {
continue continue
} }
selectedFiles.Set(filepath.Base(file.Path), &File{ selectedFiles.Set(filepath.Base(file.Path), &File{
File: file, File: file,
Link: "", // no link yet Added: info.Added,
Link: "", // no link yet
}) })
} }
if selectedFiles.Len() > len(info.Links) && info.Progress == 100 { if selectedFiles.Len() > len(info.Links) && info.Progress == 100 {
@@ -386,6 +386,7 @@ func (t *TorrentManager) getDirectories(torrent *realdebrid.TorrentInfo) []strin
default: default:
t.log.Error("Unknown config version") t.log.Error("Unknown config version")
} }
t.log.Debugf("Torrent %s is in directories %v", t.getName(torrent.Name, torrent.OriginalName), ret)
return ret return ret
} }
@@ -478,7 +479,8 @@ func (t *TorrentManager) organizeChaos(links []string, selectedFiles *orderedmap
Bytes: result.Response.Filesize, Bytes: result.Response.Filesize,
Selected: 1, Selected: 1,
}, },
Link: result.Response.Link, Added: time.Now().Format(time.RFC3339),
Link: result.Response.Link,
}) })
} else { } else {
isChaotic = true isChaotic = true

View File

@@ -18,5 +18,6 @@ type Torrent struct {
type File struct { type File struct {
realdebrid.File realdebrid.File
Link string Added string
Link string
} }

View File

@@ -64,18 +64,18 @@ func (o Object) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) {
} }
case DIRECTORY: case DIRECTORY:
for el := o.fs.t.TorrentMap.Front(); el != nil; el = el.Next() { for el := o.fs.t.TorrentMap.Front(); el != nil; el = el.Next() {
item := el.Value torrent := el.Value
if item.InProgress { if torrent.InProgress {
continue continue
} }
dirs = append(dirs, fuse.Dirent{ dirs = append(dirs, fuse.Dirent{
Name: item.AccessKey, Name: torrent.AccessKey,
Type: fuse.DT_Dir, Type: fuse.DT_Dir,
}) })
} }
case TORRENT: case TORRENT:
torrent, _ := o.fs.t.TorrentMap.Get(o.name) torrent, _ := o.fs.t.TorrentMap.Get(o.name)
if torrent == nil { if torrent == nil || torrent.InProgress {
return nil, syscall.ENOENT return nil, syscall.ENOENT
} }
for el := torrent.SelectedFiles.Front(); el != nil; el = el.Next() { for el := torrent.SelectedFiles.Front(); el != nil; el = el.Next() {
@@ -123,7 +123,7 @@ func (o Object) Lookup(ctx context.Context, name string) (fs.Node, error) {
}, nil }, nil
case TORRENT: case TORRENT:
torrent, _ := o.fs.t.TorrentMap.Get(name) torrent, _ := o.fs.t.TorrentMap.Get(o.name)
if torrent == nil { if torrent == nil {
return nil, syscall.ENOENT return nil, syscall.ENOENT
} }
@@ -138,7 +138,7 @@ func (o Object) Lookup(ctx context.Context, name string) (fs.Node, error) {
name: name, name: name,
file: file, file: file,
size: uint64(file.Bytes), size: uint64(file.Bytes),
mtime: convertRFC3339toTime(torrent.LatestAdded), mtime: convertRFC3339toTime(file.Added),
}, nil }, nil
} }
return nil, syscall.ENOENT return nil, syscall.ENOENT
@@ -174,8 +174,7 @@ func (o Object) Rename(ctx context.Context, req *fuse.RenameRequest, newDir fs.N
} }
func convertRFC3339toTime(input string) time.Time { func convertRFC3339toTime(input string) time.Time {
layout := "2006-01-02T15:04:05.000Z" t, err := time.Parse(time.RFC3339, input)
t, err := time.Parse(layout, input)
if err != nil { if err != nil {
return time.Now() return time.Now()
} }

View File

@@ -107,14 +107,14 @@ func NewManager(
} }
// GetChunk loads one chunk and starts the preload for the next chunks // GetChunk loads one chunk and starts the preload for the next chunks
func (m *Manager) GetChunk(object *torrent.File, offset, size int64) ([]byte, error) { func (m *Manager) GetChunk(file *torrent.File, offset, size int64) ([]byte, error) {
maxOffset := object.Bytes maxOffset := file.Bytes
if offset > maxOffset { if offset > maxOffset {
return nil, fmt.Errorf("tried to read past EOF of %v at offset %v", object.ID, offset) return nil, fmt.Errorf("tried to read past EOF of %v at offset %v", file.ID, offset)
} }
// Log.Infof("Request %v:%v md5:%v", object.ID, offset, object.MD5Checksum) // Log.Infof("Request %v:%v md5:%v", object.ID, offset, object.MD5Checksum)
if offset+size > maxOffset { if offset+size > maxOffset {
size = object.Bytes - offset size = file.Bytes - offset
} }
ranges := splitChunkRanges(offset, size, m.ChunkSize) ranges := splitChunkRanges(offset, size, m.ChunkSize)
@@ -123,7 +123,7 @@ func (m *Manager) GetChunk(object *torrent.File, offset, size int64) ([]byte, er
last := numRanges - 1 last := numRanges - 1
for i, r := range ranges { for i, r := range ranges {
m.requestChunk(object, r.offset, r.size, i, i == last, responses) m.requestChunk(file, r.offset, r.size, i, i == last, responses)
} }
data := make([]byte, size) data := make([]byte, size)
@@ -136,7 +136,7 @@ func (m *Manager) GetChunk(object *torrent.File, offset, size int64) ([]byte, er
dataOffset := ranges[res.Sequence].offset - offset dataOffset := ranges[res.Sequence].offset - offset
if n := copy(data[dataOffset:], res.Bytes); n == 0 { if n := copy(data[dataOffset:], res.Bytes); n == 0 {
return nil, fmt.Errorf("request %v slice %v has empty response", object.ID, res.Sequence) return nil, fmt.Errorf("request %v slice %v has empty response", file.ID, res.Sequence)
} }
} }
close(responses) close(responses)