diff --git a/internal/torrent/manager.go b/internal/torrent/manager.go index 4faff65..3204799 100644 --- a/internal/torrent/manager.go +++ b/internal/torrent/manager.go @@ -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 diff --git a/internal/torrent/types.go b/internal/torrent/types.go index 9e1888f..d81cda7 100644 --- a/internal/torrent/types.go +++ b/internal/torrent/types.go @@ -18,5 +18,6 @@ type Torrent struct { type File struct { realdebrid.File - Link string + Added string + Link string } diff --git a/internal/zfs/object.go b/internal/zfs/object.go index 7557941..22a8a1e 100644 --- a/internal/zfs/object.go +++ b/internal/zfs/object.go @@ -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() } diff --git a/pkg/chunk/manager.go b/pkg/chunk/manager.go index 681a812..00011a4 100644 --- a/pkg/chunk/manager.go +++ b/pkg/chunk/manager.go @@ -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)