feat(core): Enhanced directory handling and file restoration from trash

This commit is contained in:
2024-11-24 19:56:12 +01:00
parent 8e9041fbbf
commit 154854dc21
5 changed files with 81 additions and 10 deletions

View File

@@ -10,9 +10,9 @@ export class Directory {
public parentDirectoryRef: Directory;
public name: string;
public tree: string[];
public files: string[];
public folders: string[];
public tree!: string[];
public files!: string[];
public folders!: string[];
constructor(bucketRefArg: Bucket, parentDirectory: Directory, name: string) {
this.bucketRef = bucketRefArg;
@@ -192,9 +192,22 @@ export class Directory {
* gets a sub directory by name
*/
public async getSubDirectoryByName(dirNameArg: string, optionsArg: {
/**
* in s3 a directory does not exist if it is empty
* this option returns a directory even if it is empty
*/
getEmptyDirectory?: boolean;
/**
* in s3 a directory does not exist if it is empty
* this option creates a directory even if it is empty using a initializer file
*/
createWithInitializerFile?: boolean;
/**
* if the path is a file path, it will be treated as a file and the parent directory will be returned
*/
couldBeFilePath?: boolean;
} = {}): Promise<Directory | null> {
const dirNameArray = dirNameArg.split('/').filter(str => str.trim() !== "");
optionsArg = {
@@ -221,8 +234,19 @@ export class Directory {
return returnDirectory || null;
};
if (optionsArg.couldBeFilePath) {
const baseDirectory = await this.bucketRef.getBaseDirectory();
const existingFile = await baseDirectory.getFile({
path: dirNameArg,
});
if (existingFile) {
const adjustedPath = dirNameArg.substring(0, dirNameArg.lastIndexOf('/'));
return this.getSubDirectoryByName(adjustedPath);
}
}
let wantedDirectory: Directory | null = null;
let counter = 0;
let counter = 0;
for (const dirNameToSearch of dirNameArray) {
counter++;
const directoryToSearchIn = wantedDirectory ? wantedDirectory : this;
@@ -336,7 +360,7 @@ export class Directory {
*/
mode?: 'permanent' | 'trash';
}) {
const file = await this.getFile({
const file = await this.getFileStrict({
path: optionsArg.path,
});
await file.delete({