more fuckingfixes
Some checks are pending
CI Pipeline / Run Tests (push) Waiting to run
CI Pipeline / Lint Code (push) Waiting to run
CI Pipeline / Security Scan (push) Waiting to run
CI Pipeline / E2E Tests (push) Blocked by required conditions

This commit is contained in:
Enki 2025-08-28 09:22:01 -07:00
parent ab8279f814
commit aa5190c27b

View File

@ -1459,6 +1459,68 @@ func (g *Gateway) LoadExistingFilesToMetadataStore() error {
TorrentInfo: metadata.TorrentInfo, TorrentInfo: metadata.TorrentInfo,
} }
// Regenerate TorrentInfo for torrent storage type files if missing
if file.StorageType == "torrent" && file.InfoHash != "" && fileMetadata.TorrentInfo == nil {
log.Printf("DEBUG: Regenerating TorrentInfo for file %s (InfoHash: %s)", file.Hash, file.InfoHash)
// Get chunk hashes
chunkHashes, err := g.storage.GetChunkHashes(file.Hash)
if err != nil {
log.Printf("Warning: Failed to get chunk hashes for %s: %v", file.Hash, err)
} else {
// Create torrent pieces from chunk hashes
pieces := make([]torrent.PieceInfo, len(chunkHashes))
for i, chunkHash := range chunkHashes {
// Convert hex string to bytes for torrent hash
hashBytes := make([]byte, 20)
copy(hashBytes, []byte(chunkHash)[:20])
pieces[i] = torrent.PieceInfo{
Index: i,
Hash: [20]byte(hashBytes),
SHA256: chunkHash,
Length: int(g.config.GetChunkSize()),
}
}
// Generate WebSeed URL
webSeedURL := fmt.Sprintf("%s/api/download/%s", g.getBaseURL(), file.Hash)
fileInfo := torrent.FileInfo{
Name: file.OriginalName,
Size: file.Size,
Pieces: pieces,
WebSeedURL: webSeedURL,
}
// Use existing trackers from config
trackers := g.config.Torrent.Trackers
if len(trackers) == 0 {
trackers = []string{
"udp://tracker.opentrackr.org:1337",
"udp://tracker.openbittorrent.com:6969",
}
}
// Get gateway URL
gatewayURL := g.getBaseURL()
// Build DHT nodes list
var dhtNodes [][]interface{}
if g.config.IsServiceEnabled("dht") {
dhtNodes = append(dhtNodes, []interface{}{g.GetPublicURL(), g.GetDHTPort()})
}
torrentInfo, err := torrent.CreateTorrent(fileInfo, trackers, gatewayURL, dhtNodes)
if err != nil {
log.Printf("Warning: Failed to regenerate torrent for %s: %v", file.Hash, err)
} else {
fileMetadata.TorrentInfo = torrentInfo
log.Printf("DEBUG: Successfully regenerated TorrentInfo for %s", file.Hash)
}
}
}
// Store in metadataStore // Store in metadataStore
metadataStore[file.Hash] = fileMetadata metadataStore[file.Hash] = fileMetadata
log.Printf("DEBUG: Loaded file %s into metadataStore", file.Hash) log.Printf("DEBUG: Loaded file %s into metadataStore", file.Hash)