feat(bucket): Enhanced SmartBucket with trash management and metadata handling

This commit is contained in:
2024-11-24 02:25:08 +01:00
parent 8d160cefb0
commit 34082c38a7
14 changed files with 847 additions and 979 deletions

View File

@@ -105,8 +105,10 @@ export class File {
path: this.getBasePath(),
});
if (!this.name.endsWith('.metadata')) {
const metadata = await this.getMetaData();
await metadata.metadataFile.delete(optionsArg);
if (await this.hasMetaData()) {
const metadata = await this.getMetaData();
await metadata.metadataFile.delete(optionsArg);
}
}
} else if (optionsArg.mode === 'trash') {
const metadata = await this.getMetaData();
@@ -118,8 +120,9 @@ export class File {
},
});
const trash = await this.parentDirectoryRef.bucketRef.getTrash();
const trashDir = await trash.getTrashDir();
await this.move({
directory: await trash.getTrashDir(),
directory: trashDir,
path: await trash.getTrashKeyByOriginalBasePath(this.getBasePath()),
});
}
@@ -187,23 +190,49 @@ export class File {
* moves the file to another directory
*/
public async move(pathDescriptorArg: interfaces.IPathDecriptor) {
let moveToPath = '';
let moveToPath: string = '';
const isDirectory = await this.parentDirectoryRef.bucketRef.isDirectory(pathDescriptorArg);
if (isDirectory) {
moveToPath = await helpers.reducePathDescriptorToPath({
...pathDescriptorArg,
path: plugins.path.join(pathDescriptorArg.path!, this.name),
});
} else {
moveToPath = await helpers.reducePathDescriptorToPath(pathDescriptorArg);
}
// lets move the file
await this.parentDirectoryRef.bucketRef.fastMove({
sourcePath: this.getBasePath(),
destinationPath: moveToPath,
overwrite: true,
});
// lets move the metadatafile
const metadata = await this.getMetaData();
await metadata.metadataFile.move(pathDescriptorArg);
if (!this.name.endsWith('.metadata')) {
const metadata = await this.getMetaData();
await this.parentDirectoryRef.bucketRef.fastMove({
sourcePath: metadata.metadataFile.getBasePath(),
destinationPath: moveToPath + '.metadata',
overwrite: true,
});
}
// lets update references of this
const baseDirectory = await this.parentDirectoryRef.bucketRef.getBaseDirectory();
this.parentDirectoryRef = await baseDirectory.getSubDirectoryByNameStrict(
pathDescriptorArg.directory?.getBasePath()!
);
this.name = pathDescriptorArg.path!;
}
public async hasMetaData(): Promise<boolean> {
if (!this.name.endsWith('.metadata')) {
const hasMetadataBool = MetaData.hasMetaData({
file: this,
});
return hasMetadataBool;
} else {
return false;
}
}
/**