Repository: GopeedLab/gopeed

Issue:
1.8.1 版本M2 Macbookair上无法正常BT下载
回退1.8.0就可以了。不知道什么原因。反复测试所有的种子文件都不能下载。升级到macos tahoe也一样。

Discussion:
@monkeyWie: 我觉得应该不是新版本的问题吧，这边测试正常的，贴下core.log看看有没有啥异常@zhang-qi-yang: > 我觉得应该不是新版本的问题吧，这边测试正常，贴下core.log看看有没有什么异常

真的。反复测试。而且因为升级系统，特意将两个版本的macos完整重置后全新测试都是无法实现BT下载。同等配置返回1.8.0版本就正常下载。因为是全新安装，没有生成任何相关的core.log，'/Users/***/Library/Application Support/com.gopeed.gopeed/logs'路径下全部log文件均为空。@monkeyWie: 就是下载一直没有速度这样吗@zhang-qi-yang: > 是的。就是BT下载一直没有速度。下载目录内下载文件也没能生成。换回1.8.0一切正常。@monkeyWie: 是不是可以解析到然后下载没速度？@zhang-qi-yang: > 是不是可以解析到然后下载没速度？

是的，解析到文件，文件信息正确，但始终没有速度。换回旧版就可以了。这里不止我一个反馈这个问题了，可见不仅是我的mac版本有这问题。实际上开发者应该是可以测试再现的。要不是每次打开都要跳出升级提示，我倒不介意退回旧版本使用，要是给个升级开关就好了。

Solution patch:
diff --git a/internal/protocol/bt/file.go b/internal/protocol/bt/file.go
index 5b2a1e2..8d63864 100644
--- a/internal/protocol/bt/file.go
+++ b/internal/protocol/bt/file.go
@@ -5,11 +5,12 @@ package bt
 import (
 	"context"
 	"fmt"
-	"github.com/anacrolix/torrent/storage"
 	"io"
 	"os"
 	"path/filepath"
 
+	"github.com/anacrolix/torrent/storage"
+
 	"github.com/anacrolix/missinggo/v2"
 
 	"github.com/anacrolix/torrent/common"
@@ -34,7 +35,7 @@ func newFileOpts(opts newFileClientOpts) storage.ClientImplCloser {
 	if opts.FilePathMaker == nil {
 		opts.FilePathMaker = func(opts storage.FilePathMakerOpts) string {
 			var parts []string
-			if opts.Info.Length == 0 {
+			if opts.Info.Length == 0 || opts.File.Path == nil {
 				parts = append(parts, opts.Info.Name)
 			}
 			return filepath.Join(append(parts, opts.File.Path...)...)



Test patch:
diff --git a/internal/protocol/bt/fetcher_test.go b/internal/protocol/bt/fetcher_test.go
index 9e09856..5975681 100644
--- a/internal/protocol/bt/fetcher_test.go
+++ b/internal/protocol/bt/fetcher_test.go
@@ -3,17 +3,18 @@ package bt
 import (
 	"encoding/base64"
 	"encoding/json"
-	"github.com/GopeedLab/gopeed/internal/controller"
-	"github.com/GopeedLab/gopeed/internal/fetcher"
-	"github.com/GopeedLab/gopeed/internal/test"
-	"github.com/GopeedLab/gopeed/pkg/base"
-	"github.com/GopeedLab/gopeed/pkg/protocol/bt"
 	gohttp "net/http"
 	"net/url"
 	"os"
 	"path/filepath"
 	"reflect"
 	"testing"
+
+	"github.com/GopeedLab/gopeed/internal/controller"
+	"github.com/GopeedLab/gopeed/internal/fetcher"
+	"github.com/GopeedLab/gopeed/internal/test"
+	"github.com/GopeedLab/gopeed/pkg/base"
+	"github.com/GopeedLab/gopeed/pkg/protocol/bt"
 )
 
 func TestFetcher_Resolve_Torrent(t *testing.T) {