torrent directory fix
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -18,5 +18,6 @@ type Torrent struct {
|
|||||||
|
|
||||||
type File struct {
|
type File struct {
|
||||||
realdebrid.File
|
realdebrid.File
|
||||||
Link string
|
Added string
|
||||||
|
Link string
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user