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

View File

@@ -18,5 +18,6 @@ type Torrent struct {
type File struct {
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:
for el := o.fs.t.TorrentMap.Front(); el != nil; el = el.Next() {
item := el.Value
if item.InProgress {
torrent := el.Value
if torrent.InProgress {
continue
}
dirs = append(dirs, fuse.Dirent{
Name: item.AccessKey,
Name: torrent.AccessKey,
Type: fuse.DT_Dir,
})
}
case TORRENT:
torrent, _ := o.fs.t.TorrentMap.Get(o.name)
if torrent == nil {
if torrent == nil || torrent.InProgress {
return nil, syscall.ENOENT
}
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
case TORRENT:
torrent, _ := o.fs.t.TorrentMap.Get(name)
torrent, _ := o.fs.t.TorrentMap.Get(o.name)
if torrent == nil {
return nil, syscall.ENOENT
}
@@ -138,7 +138,7 @@ func (o Object) Lookup(ctx context.Context, name string) (fs.Node, error) {
name: name,
file: file,
size: uint64(file.Bytes),
mtime: convertRFC3339toTime(torrent.LatestAdded),
mtime: convertRFC3339toTime(file.Added),
}, nil
}
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 {
layout := "2006-01-02T15:04:05.000Z"
t, err := time.Parse(layout, input)
t, err := time.Parse(time.RFC3339, input)
if err != nil {
return time.Now()
}

View File

@@ -107,14 +107,14 @@ func NewManager(
}
// GetChunk loads one chunk and starts the preload for the next chunks
func (m *Manager) GetChunk(object *torrent.File, offset, size int64) ([]byte, error) {
maxOffset := object.Bytes
func (m *Manager) GetChunk(file *torrent.File, offset, size int64) ([]byte, error) {
maxOffset := file.Bytes
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)
if offset+size > maxOffset {
size = object.Bytes - offset
size = file.Bytes - offset
}
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
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)
@@ -136,7 +136,7 @@ func (m *Manager) GetChunk(object *torrent.File, offset, size int64) ([]byte, er
dataOffset := ranges[res.Sequence].offset - offset
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)