140 lines
3.6 KiB
TypeScript
140 lines
3.6 KiB
TypeScript
import * as plugins from './smartbucket.plugins';
|
|
import { Bucket } from './smartbucket.classes.bucket';
|
|
import { File } from './smartbucket.classes.file';
|
|
|
|
export class Directory {
|
|
public bucketRef: Bucket;
|
|
public parentDirectory: Directory;
|
|
public name: string;
|
|
|
|
public tree: string[];
|
|
public files: string[];
|
|
public folders: string[];
|
|
|
|
constructor(bucketRefArg: Bucket, parentDiretory: Directory, name: string) {
|
|
this.bucketRef = bucketRefArg;
|
|
this.parentDirectory = parentDiretory;
|
|
this.name = name;
|
|
}
|
|
|
|
/**
|
|
* returns an array of parent directories
|
|
*/
|
|
public getParentDirectories(): Directory[] {
|
|
let parentDirectories: Directory[] = [];
|
|
if (this.parentDirectory) {
|
|
parentDirectories.push(this.parentDirectory);
|
|
parentDirectories = parentDirectories.concat(this.parentDirectory.getParentDirectories());
|
|
}
|
|
return parentDirectories;
|
|
}
|
|
|
|
/**
|
|
* returns the directory level
|
|
*/
|
|
public getDirectoryLevel(): number {
|
|
return this.getParentDirectories().length;
|
|
}
|
|
|
|
/**
|
|
* updates the base path
|
|
*/
|
|
public getBasePath(): string {
|
|
const parentDirectories = this.getParentDirectories();
|
|
let basePath = '';
|
|
for (const parentDir of parentDirectories) {
|
|
basePath = parentDir.name + '/' + basePath;
|
|
}
|
|
return basePath;
|
|
}
|
|
|
|
/**
|
|
* lists all files
|
|
*/
|
|
public async listFiles(): Promise<File[]> {
|
|
const done = plugins.smartpromise.defer();
|
|
const fileNameStream = await this.bucketRef.smartbucketRef.minioClient.listObjectsV2(
|
|
this.bucketRef.name,
|
|
this.getBasePath()
|
|
);
|
|
const fileArray: File[] = [];
|
|
const duplexStream = plugins.streamfunction.createDuplexStream<string, void>(
|
|
async fileName => {
|
|
fileArray.push(new File(this, fileName));
|
|
},
|
|
async tools => {
|
|
done.resolve();
|
|
}
|
|
);
|
|
fileNameStream.pipe(duplexStream);
|
|
await done.promise;
|
|
return fileArray;
|
|
}
|
|
|
|
/**
|
|
* lists all folders
|
|
*/
|
|
public async listDirectories(): Promise<Directory[]> {
|
|
const done = plugins.smartpromise.defer();
|
|
const completeDirStream = await this.bucketRef.smartbucketRef.minioClient.listObjectsV2(
|
|
this.bucketRef.name,
|
|
this.getBasePath(),
|
|
true
|
|
);
|
|
const directoryArray: Directory[] = [];
|
|
const duplexStream = plugins.streamfunction.createDuplexStream<plugins.minio.BucketItem, void>(
|
|
async fileName => {
|
|
console.log(fileName);
|
|
const subtractedPath = fileName.name.replace(this.getBasePath(), '');
|
|
if (subtractedPath.includes('/')) {
|
|
const dirName = fileName.name.split('/')[0];
|
|
if (directoryArray.find(directory => directory.name === dirName)) {
|
|
return;
|
|
}
|
|
directoryArray.push(new Directory(this.bucketRef, this, dirName));
|
|
}
|
|
},
|
|
async tools => {
|
|
done.resolve();
|
|
}
|
|
);
|
|
completeDirStream.pipe(duplexStream);
|
|
await done.promise;
|
|
return directoryArray;
|
|
}
|
|
|
|
/**
|
|
* gets an array that has all objects with a certain prefix;
|
|
*/
|
|
public async getTreeArray() {
|
|
const treeArray = await this.bucketRef.smartbucketRef.minioClient.listObjectsV2(
|
|
this.bucketRef.name,
|
|
this.getBasePath(),
|
|
true
|
|
);
|
|
}
|
|
|
|
/**
|
|
* gets a sub directory
|
|
*/
|
|
public async getSubDirectory(): Promise<Directory> {
|
|
return this;
|
|
// TODO
|
|
}
|
|
|
|
/**
|
|
* moves the directory
|
|
*/
|
|
public async move() {
|
|
// TODO
|
|
}
|
|
|
|
/**
|
|
* creates a file within this directory
|
|
* @param relativePathArg
|
|
*/
|
|
public async createFile(relativePathArg) {
|
|
let completeFilePath: string = '';
|
|
}
|
|
}
|