package torrent import ( "fmt" "os" "path/filepath" "git.kmsign.ru/royalcat/tstor/src/config" "git.kmsign.ru/royalcat/tstor/src/host/store" "github.com/anacrolix/torrent/storage" ) func setupStorage(cfg config.TorrentClient) (*DataStorage, storage.PieceCompletion, error) { pcp := filepath.Join(cfg.MetadataFolder, "piece-completion") if err := os.MkdirAll(pcp, 0744); err != nil { return nil, nil, fmt.Errorf("error creating piece completion folder: %w", err) } pc, err := store.NewBadgerPieceCompletion(pcp) if err != nil { return nil, nil, fmt.Errorf("error creating servers piece completion: %w", err) } // TODO implement cache/storage switching // cacheDir := filepath.Join(tcfg.DataFolder, "cache") // if err := os.MkdirAll(cacheDir, 0744); err != nil { // return nil, nil, fmt.Errorf("error creating piece completion folder: %w", err) // } // fc, err := filecache.NewCache(cacheDir) // if err != nil { // return nil, nil, fmt.Errorf("error creating cache: %w", err) // } // log.Info().Msg(fmt.Sprintf("setting cache size to %d MB", 1024)) // fc.SetCapacity(1024 * 1024 * 1024) // rp := storage.NewResourcePieces(fc.AsResourceProvider()) // st := &stc{rp} filesDir := cfg.DataFolder if err := os.MkdirAll(filesDir, 0744); err != nil { return nil, nil, fmt.Errorf("error creating piece completion folder: %w", err) } st := NewFileStorage(filesDir, pc) // piecesDir := filepath.Join(cfg.DataFolder, ".pieces") // if err := os.MkdirAll(piecesDir, 0744); err != nil { // return nil, nil, fmt.Errorf("error creating piece completion folder: %w", err) // } // st := storage.NewMMapWithCompletion(piecesDir, pc) return st, pc, nil }