Merge pull request #233 from Maks-s/delete-intensifies
Added delete method to plugins / themes
This commit is contained in:
commit
f3bb7aac96
|
@ -256,6 +256,36 @@ export default class {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete content.
|
||||
* @param {Content|String} content Content to delete
|
||||
* @param {Boolean} force If true the content will be deleted even if an exception is thrown when disabling/unloading/deleting
|
||||
*/
|
||||
static async deleteContent(content, force) {
|
||||
content = this.findContent(content);
|
||||
if (!content) throw {message: `Could not find a ${this.contentType} from ${content}.`};
|
||||
|
||||
try {
|
||||
await Modals.confirm(`Delete ${this.contentType} ?`, `Are you sure you want to delete ${content.info.name} ?`, 'Delete').promise;
|
||||
} catch (err) {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
const unload = this.unloadContent(content, force, false);
|
||||
|
||||
if (!force)
|
||||
await unload;
|
||||
|
||||
await FileUtils.directoryExists(content.paths.contentPath);
|
||||
FileUtils.deleteDirectory(content.paths.contentPath);
|
||||
return true;
|
||||
} catch (err) {
|
||||
Logger.err(this.moduleName, err);
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unload content.
|
||||
* @param {Content|String} content Content to unload
|
||||
|
|
|
@ -124,6 +124,7 @@ export default class extends ContentManager {
|
|||
return instance;
|
||||
}
|
||||
|
||||
static get deletePlugin() { return this.deleteContent }
|
||||
static get unloadPlugin() { return this.unloadContent }
|
||||
static get reloadPlugin() { return this.reloadContent }
|
||||
|
||||
|
|
|
@ -53,6 +53,7 @@ export default class ThemeManager extends ContentManager {
|
|||
}
|
||||
}
|
||||
|
||||
static get deleteTheme() { return this.deleteContent }
|
||||
static get unloadTheme() { return this.unloadContent }
|
||||
static async reloadTheme(theme) {
|
||||
theme = await this.reloadContent(theme);
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
import fs from 'fs';
|
||||
import _ from 'lodash';
|
||||
import filetype from 'file-type';
|
||||
import path from 'path';
|
||||
|
||||
export class Utils {
|
||||
static overload(fn, cb) {
|
||||
|
@ -493,4 +494,32 @@ export class FileUtils {
|
|||
if (!type) type = (await this.getFileType(buffer)).mime;
|
||||
return `data:${type};base64,${buffer.toString('base64')}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a directory
|
||||
* @param {String} path The directory's path
|
||||
* @return {Promise}
|
||||
*/
|
||||
static async deleteDirectory(pathToDir) {
|
||||
try {
|
||||
await this.directoryExists(pathToDir);
|
||||
const files = await this.listDirectory(pathToDir);
|
||||
|
||||
for (const file of files) {
|
||||
const pathToFile = path.join(pathToDir, file);
|
||||
try {
|
||||
await this.directoryExists(pathToFile);
|
||||
await this.deleteDirectory(pathToFile);
|
||||
} catch (err) {
|
||||
fs.unlinkSync(pathToFile);
|
||||
}
|
||||
}
|
||||
|
||||
fs.rmdirSync(pathToDir);
|
||||
|
||||
return true;
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue