Skip to content

Commit 10a91c4

Browse files
authored
Merge pull request #12 from Wal33D/claude-image-sanitization
Remove image standardization and implement consistent filename sanitization
2 parents bafd37f + 8bbabb5 commit 10a91c4

File tree

3 files changed

+22
-21
lines changed

3 files changed

+22
-21
lines changed

src/indexers/archive/InternetArchiveIndexer.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -301,14 +301,14 @@ export class InternetArchiveIndexer extends EventEmitter {
301301
// Download best screenshot
302302
if (images.screenshots.length > 0) {
303303
const screenshot = images.screenshots[0];
304-
const ext = path.extname(screenshot.name).toLowerCase();
305-
const localPath = path.join(levelDir, `screenshot_original${ext}`);
304+
const sanitizedName = FileUtils.sanitizeFilename(screenshot.name);
305+
const localPath = path.join(levelDir, sanitizedName);
306306
const downloadUrl = `https://archive.org/download/${metadata.identifier}/${encodeURIComponent(screenshot.name)}`;
307307

308308
const downloadPromise = this.downloadFile(downloadUrl, localPath)
309309
.then(() => {
310310
levelFiles.push({
311-
filename: `screenshot_original${ext}`,
311+
filename: sanitizedName,
312312
path: localPath,
313313
size: parseInt(screenshot.size || '0'),
314314
type: 'other',
@@ -325,14 +325,14 @@ export class InternetArchiveIndexer extends EventEmitter {
325325
// Download best thumbnail
326326
if (images.thumbnails.length > 0) {
327327
const thumbnail = images.thumbnails[0];
328-
const ext = path.extname(thumbnail.name).toLowerCase();
329-
const localPath = path.join(levelDir, `thumbnail_original${ext}`);
328+
const sanitizedName = FileUtils.sanitizeFilename(thumbnail.name);
329+
const localPath = path.join(levelDir, sanitizedName);
330330
const downloadUrl = `https://archive.org/download/${metadata.identifier}/${encodeURIComponent(thumbnail.name)}`;
331331

332332
const downloadPromise = this.downloadFile(downloadUrl, localPath)
333333
.then(() => {
334334
levelFiles.push({
335-
filename: `thumbnail_original${ext}`,
335+
filename: sanitizedName,
336336
path: localPath,
337337
size: parseInt(thumbnail.size || '0'),
338338
type: 'other',

src/indexers/discord/discordBase.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -410,13 +410,14 @@ export abstract class DiscordBaseIndexer {
410410
await fs.ensureDir(levelDir);
411411

412412
// Download the .dat file
413-
const datPath = path.join(levelDir, datAttachment.filename);
413+
const sanitizedDatName = FileUtils.sanitizeFilename(datAttachment.filename);
414+
const datPath = path.join(levelDir, sanitizedDatName);
414415
await this.downloadFile(datAttachment.url, datPath);
415416

416417
// Create level files array
417418
const files: LevelFile[] = [
418419
{
419-
filename: datAttachment.filename,
420+
filename: sanitizedDatName,
420421
path: datPath,
421422
size: datAttachment.size,
422423
type: 'dat',
@@ -426,25 +427,27 @@ export abstract class DiscordBaseIndexer {
426427
// Download associated images
427428
for (const imageAtt of associatedImages) {
428429
try {
429-
const imageName = imageAtt.filename;
430-
logger.info(`Downloading image: ${imageName} for level ${datAttachment.filename}`);
431-
const imagePath = path.join(levelDir, imageName);
430+
const sanitizedImageName = FileUtils.sanitizeFilename(imageAtt.filename);
431+
logger.info(
432+
`Downloading image: ${imageAtt.filename} for level ${datAttachment.filename}`
433+
);
434+
const imagePath = path.join(levelDir, sanitizedImageName);
432435
await this.downloadFile(imageAtt.url, imagePath);
433436

434437
// Determine image type
435438
let imageType: 'thumbnail' | 'image' = 'image';
436-
if (imageName.toLowerCase().includes('thumb')) {
439+
if (sanitizedImageName.toLowerCase().includes('thumb')) {
437440
imageType = 'thumbnail';
438441
}
439442

440443
files.push({
441-
filename: imageName,
444+
filename: sanitizedImageName,
442445
path: imagePath,
443446
size: imageAtt.size,
444447
type: imageType,
445448
});
446449

447-
logger.info(`Downloaded image: ${imageName} (${imageType})`);
450+
logger.info(`Downloaded image: ${sanitizedImageName} (${imageType})`);
448451
} catch (error) {
449452
logger.warn(`Failed to download image ${imageAtt.filename}:`, error);
450453
}
@@ -569,7 +572,8 @@ export abstract class DiscordBaseIndexer {
569572

570573
// Download ZIP file
571574
logger.info(`Downloading zip: ${zipAttachment.filename}`);
572-
const zipPath = path.join(tempDir, zipAttachment.filename);
575+
const sanitizedZipName = FileUtils.sanitizeFilename(zipAttachment.filename);
576+
const zipPath = path.join(tempDir, sanitizedZipName);
573577
await this.downloadFile(zipAttachment.url, zipPath);
574578

575579
// Extract ZIP

src/indexers/hognoseIndexer.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -431,11 +431,8 @@ export class HognoseIndexer {
431431
): Promise<Level | null> {
432432
try {
433433
// First, stream to a temporary location to calculate hash if skipExisting is enabled
434-
const tempPath = path.join(
435-
this.outputDir,
436-
'.temp',
437-
`${Date.now()}_${path.basename(fileName)}`
438-
);
434+
const sanitizedFileName = FileUtils.sanitizeFilename(path.basename(fileName));
435+
const tempPath = path.join(this.outputDir, '.temp', `${Date.now()}_${sanitizedFileName}`);
439436
await FileUtils.ensureDir(path.dirname(tempPath));
440437

441438
// Stream the .dat file to temp location
@@ -462,7 +459,7 @@ export class HognoseIndexer {
462459
const levelDir = path.join(this.outputDir, getSourceLevelsDir(MapSource.HOGNOSE), levelId);
463460
await FileUtils.ensureDir(levelDir);
464461

465-
const datFileName = path.basename(fileName);
462+
const datFileName = sanitizedFileName;
466463
const localDatPath = path.join(levelDir, datFileName);
467464

468465
// Move from temp to final location

0 commit comments

Comments
 (0)