fix: media files now support rebuilding
This commit is contained in:
@@ -528,6 +528,7 @@ export class MediaEngine extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async rebuildDatabaseFromFiles(): Promise<void> {
|
async rebuildDatabaseFromFiles(): Promise<void> {
|
||||||
|
const mediaBaseDir = this.getMediaBaseDir();
|
||||||
const task: Task<void> = {
|
const task: Task<void> = {
|
||||||
id: uuidv4(),
|
id: uuidv4(),
|
||||||
name: 'Rebuild database from media files',
|
name: 'Rebuild database from media files',
|
||||||
@@ -536,23 +537,39 @@ export class MediaEngine extends EventEmitter {
|
|||||||
|
|
||||||
onProgress(0, 'Scanning media directory...');
|
onProgress(0, 'Scanning media directory...');
|
||||||
|
|
||||||
const mediaDir = this.getMediaDir();
|
// Recursively find all .meta files in the media directory tree
|
||||||
let files: string[] = [];
|
const metaFiles: string[] = [];
|
||||||
|
const scanDir = async (dir: string) => {
|
||||||
try {
|
try {
|
||||||
files = await fs.readdir(mediaDir);
|
const entries = await fs.readdir(dir, { withFileTypes: true });
|
||||||
} catch {
|
for (const entry of entries) {
|
||||||
await fs.mkdir(mediaDir, { recursive: true });
|
const fullPath = path.join(dir, entry.name);
|
||||||
|
if (entry.isDirectory()) {
|
||||||
|
await scanDir(fullPath);
|
||||||
|
} else if (entry.name.endsWith('.meta')) {
|
||||||
|
metaFiles.push(fullPath);
|
||||||
}
|
}
|
||||||
const metaFiles = files.filter(f => f.endsWith('.meta'));
|
}
|
||||||
|
} catch {
|
||||||
|
// Directory might not exist
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
await fs.mkdir(mediaBaseDir, { recursive: true });
|
||||||
|
} catch {
|
||||||
|
// Already exists
|
||||||
|
}
|
||||||
|
await scanDir(mediaBaseDir);
|
||||||
|
|
||||||
onProgress(10, `Found ${metaFiles.length} media sidecar files`);
|
onProgress(10, `Found ${metaFiles.length} media sidecar files`);
|
||||||
|
|
||||||
for (let i = 0; i < metaFiles.length; i++) {
|
for (let i = 0; i < metaFiles.length; i++) {
|
||||||
const metaFile = metaFiles[i];
|
const sidecarPath = metaFiles[i];
|
||||||
const sidecarPath = path.join(mediaDir, metaFile);
|
|
||||||
const mediaFilePath = sidecarPath.replace('.meta', '');
|
const mediaFilePath = sidecarPath.replace('.meta', '');
|
||||||
|
const metaFileName = path.basename(sidecarPath);
|
||||||
|
|
||||||
onProgress(10 + (80 * (i / metaFiles.length)), `Processing ${metaFile}...`);
|
onProgress(10 + (80 * (i / metaFiles.length)), `Processing ${metaFileName}...`);
|
||||||
|
|
||||||
const metadata = await this.readSidecarFile(sidecarPath);
|
const metadata = await this.readSidecarFile(sidecarPath);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user