38 lines
960 B
Go
38 lines
960 B
Go
package transfer
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"m3u8-downloader/pkg/nas"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
func TransferFile(nt *nas.NASService, ctx context.Context, item *TransferItem) error {
|
|
destPath := filepath.Join(nt.Config.Path, item.DestinationPath)
|
|
|
|
destDir := filepath.Dir(destPath)
|
|
if err := nt.EnsureDirectoryExists(destDir); err != nil {
|
|
return fmt.Errorf("Failed to create directory %s: %w", destDir, err)
|
|
}
|
|
|
|
transferCtx, cancel := context.WithTimeout(ctx, nt.Config.Timeout)
|
|
defer cancel()
|
|
|
|
if err := nt.CopyFile(transferCtx, item.SourcePath, destPath); err != nil {
|
|
return fmt.Errorf("Failed to copy file %s to %s: %w", item.SourcePath, destPath, err)
|
|
}
|
|
|
|
if nt.Config.VerifySize {
|
|
if err := nt.VerifyTransfer(item.SourcePath, destPath); err != nil {
|
|
os.Remove(destPath)
|
|
return fmt.Errorf("Failed to verify transfer: %w", err)
|
|
}
|
|
}
|
|
|
|
log.Printf("File transfer completed: %s -> %s", item.SourcePath, destPath)
|
|
|
|
return nil
|
|
}
|