From 119863b8161a50d5d4b9e520d3a8bbd1b4904dd2 Mon Sep 17 00:00:00 2001 From: Vladimir Zagainov Date: Thu, 19 Jun 2025 18:00:12 +0300 Subject: [PATCH] fix(importer): correctly define importer struct with long timeout client --- internal/core/importer/curseforge.go | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/internal/core/importer/curseforge.go b/internal/core/importer/curseforge.go index 3ae6f84..f21a0c5 100644 --- a/internal/core/importer/curseforge.go +++ b/internal/core/importer/curseforge.go @@ -20,28 +20,31 @@ import ( // CurseForgeImporter реализует импорт для сборок CurseForge. type CurseForgeImporter struct { - StoragePath string - APIKey string - HTTPClient *http.Client + StoragePath string + APIKey string + HTTPClient *http.Client // Для быстрых API-запросов + HTTPClientLong *http.Client // ИСПРАВЛЕНИЕ: Добавляем это поле в структуру } // NewCurseForgeImporter создает новый экземпляр импортера. func NewCurseForgeImporter(storagePath, apiKey string) *CurseForgeImporter { return &CurseForgeImporter{ - StoragePath: storagePath, - APIKey: apiKey, - HTTPClient: &http.Client{Timeout: 60 * time.Second}, + StoragePath: storagePath, + APIKey: apiKey, + HTTPClient: &http.Client{Timeout: 30 * time.Second}, + HTTPClientLong: &http.Client{Timeout: 10 * time.Minute}, } } // downloadAndProcessFile скачивает файл по URL и передает его в общий обработчик. func (i *CurseForgeImporter) downloadAndProcessFile(url string) (hash string, size int64, err error) { + // Используем клиент с длинным таймаутом и для скачивания отдельных модов req, err := http.NewRequestWithContext(context.Background(), "GET", url, nil) if err != nil { return "", 0, err } - resp, err := i.HTTPClient.Do(req) + resp, err := i.HTTPClientLong.Do(req) if err != nil { return "", 0, err } @@ -64,6 +67,7 @@ func (i *CurseForgeImporter) getFileInfo(projectID, fileID int) (*CurseForgeFile } req.Header.Set("x-api-key", i.APIKey) + // Используем клиент с коротким таймаутом для быстрых API-запросов resp, err := i.HTTPClient.Do(req) if err != nil { return nil, err @@ -173,7 +177,7 @@ func (i *CurseForgeImporter) DownloadModpackFromURL(pageURL string) (string, err return "", err } - resp, err := i.HTTPClient.Do(req) + resp, err := i.HTTPClientLong.Do(req) if err != nil { return "", err }