This commit is contained in:
SrGooglo 2025-05-13 12:49:07 +00:00
parent c79f000ea3
commit f4705b1f45

View File

@ -22,7 +22,7 @@ async function main() {
!track.source.startsWith("http") !track.source.startsWith("http")
) { ) {
console.warn( console.warn(
` Skipping track ID ${track._id} due to invalid or missing source URL: "${track.source}"`, `Skipping track ID ${track._id} due to invalid or missing source URL: "${track.source}"`,
) )
continue continue
} }
@ -31,19 +31,18 @@ async function main() {
try { try {
console.log( console.log(
` [${index + 1}/${tracks.length}] Fetching ETag for source: ${track.source} (Track ID: ${track._id})`, `[${index + 1}/${tracks.length}] Fetching ETag for source: ${track.source} (Track ID: ${track._id})`,
) )
const response = await axios.head(track.source, { const response = await axios.head(track.source, {
timeout: 10000, // 10 seconds timeout timeout: 10000, // 10 seconds timeout
// Add headers to mimic a browser to avoid some 403s or other blocks
headers: { headers: {
"User-Agent": Accept: "*/*",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
Accept: "*/*", // More generic accept for HEAD
"Accept-Encoding": "gzip, deflate, br", "Accept-Encoding": "gzip, deflate, br",
Connection: "keep-alive", Connection: "keep-alive",
}, },
}) })
// ETag header can be 'etag' or 'ETag' (case-insensitive) // ETag header can be 'etag' or 'ETag' (case-insensitive)
const etag = response.headers["etag"] || response.headers["ETag"] const etag = response.headers["etag"] || response.headers["ETag"]
@ -52,7 +51,6 @@ async function main() {
tracksByETag.set(etag, []) tracksByETag.set(etag, [])
} }
tracksByETag.get(etag).push(track) tracksByETag.get(etag).push(track)
// console.log(` ETag: ${etag} found for source: ${track.source}`)
} else { } else {
console.warn( console.warn(
` No ETag found for source: ${track.source} (Track ID: ${track._id})`, ` No ETag found for source: ${track.source} (Track ID: ${track._id})`,
@ -60,19 +58,16 @@ async function main() {
} }
} catch (error) { } catch (error) {
let errorMessage = error.message let errorMessage = error.message
if (error.response) { if (error.response) {
// The request was made and the server responded with a status code
// that falls out of the range of 2xx
errorMessage = `Server responded with status ${error.response.status} ${error.response.statusText}` errorMessage = `Server responded with status ${error.response.status} ${error.response.statusText}`
} else if (error.request) { } else if (error.request) {
// The request was made but no response was received
errorMessage = errorMessage =
"No response received from server (e.g., timeout, network error)" "No response received from server (e.g., timeout, network error)"
} }
// else: Something happened in setting up the request that triggered an Error
console.error( console.error(
` Error fetching ETag for ${track.source} (Track ID: ${track._id}): ${errorMessage}`, `Error fetching ETag for ${track.source} (Track ID: ${track._id}): ${errorMessage}`,
) )
} }
} }
@ -97,21 +92,21 @@ async function main() {
) )
const trackToKeep = tracksForETag[0] const trackToKeep = tracksForETag[0]
const tracksToDelete = tracksForETag.slice(1) // All tracks except the newest one const tracksToDelete = tracksForETag.slice(1)
if (tracksToDelete.length > 0) { if (tracksToDelete.length > 0) {
const idsToDelete = tracksToDelete.map((track) => track._id) const idsToDelete = tracksToDelete.map((track) => track._id)
console.log( console.log(
` Keeping Track ID: ${trackToKeep._id} (Source: ${trackToKeep.source}) - selected due to largest _id (assumed newer).`, `Keeping Track ID: ${trackToKeep._id} (Source: ${trackToKeep.source}) - selected due to largest _id (assumed newer).`,
) )
tracksToDelete.forEach((t) => { tracksToDelete.forEach((t) => {
console.log( console.log(
` Marking for deletion: Track ID: ${t._id} (Source: ${t.source})`, `Marking for deletion: Track ID: ${t._id} (Source: ${t.source})`,
) )
}) })
console.log( console.log(
` Attempting to delete ${idsToDelete.length} duplicate tracks for ETag: "${etag}"`, `Attempting to delete ${idsToDelete.length} duplicate tracks for ETag: "${etag}"`,
) )
try { try {
@ -121,22 +116,23 @@ async function main() {
if (deleteResult.deletedCount > 0) { if (deleteResult.deletedCount > 0) {
console.log( console.log(
` Successfully deleted ${deleteResult.deletedCount} tracks for ETag: "${etag}"`, `Successfully deleted ${deleteResult.deletedCount} tracks for ETag: "${etag}"`,
) )
deletedCount += deleteResult.deletedCount deletedCount += deleteResult.deletedCount
} else { } else {
console.warn( console.warn(
` Deletion command executed for ETag "${etag}", but no tracks were deleted. IDs: ${idsToDelete.join(", ")}`, `Deletion command executed for ETag "${etag}", but no tracks were deleted. IDs: ${idsToDelete.join(", ")}`,
) )
} }
} catch (dbError) { } catch (dbError) {
console.error( console.error(
` Database error deleting tracks for ETag "${etag}": ${dbError.message}`, `Database error deleting tracks for ETag "${etag}": ${dbError.message}`,
) )
} }
} }
} }
} }
console.log(`Finished processing. Total tracks deleted: ${deletedCount}.`) console.log(`Finished processing. Total tracks deleted: ${deletedCount}.`)
} }