61 lines
2.0 KiB
TypeScript
61 lines
2.0 KiB
TypeScript
import { app } from "electron";
|
|
import { init } from "../core/plugin/index";
|
|
import { join } from "path";
|
|
import { rmdir } from "fs";
|
|
import Store from "electron-store";
|
|
|
|
/**
|
|
* Manages plugin installation and migration.
|
|
*/
|
|
export class PluginManager {
|
|
public static instance: PluginManager = new PluginManager();
|
|
|
|
constructor() {
|
|
if (PluginManager.instance) {
|
|
return PluginManager.instance;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sets up the plugins by initializing the `plugins` module with the `confirmInstall` and `pluginsPath` options.
|
|
* The `confirmInstall` function always returns `true` to allow plugin installation.
|
|
* The `pluginsPath` option specifies the path to install plugins to.
|
|
*/
|
|
setupPlugins() {
|
|
init({
|
|
// Function to check from the main process that user wants to install a plugin
|
|
confirmInstall: async (_plugins: string[]) => {
|
|
return true;
|
|
},
|
|
// Path to install plugin to
|
|
pluginsPath: join(app.getPath("userData"), "plugins"),
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Migrates the plugins by deleting the `plugins` directory in the user data path.
|
|
* If the `migrated_version` key in the `Store` object does not match the current app version,
|
|
* the function deletes the `plugins` directory and sets the `migrated_version` key to the current app version.
|
|
* @returns A Promise that resolves when the migration is complete.
|
|
*/
|
|
migratePlugins() {
|
|
return new Promise((resolve) => {
|
|
const store = new Store();
|
|
if (store.get("migrated_version") !== app.getVersion()) {
|
|
console.debug("start migration:", store.get("migrated_version"));
|
|
const userDataPath = app.getPath("userData");
|
|
const fullPath = join(userDataPath, "plugins");
|
|
|
|
rmdir(fullPath, { recursive: true }, function (err) {
|
|
if (err) console.error(err);
|
|
store.set("migrated_version", app.getVersion());
|
|
console.debug("migrate plugins done");
|
|
resolve(undefined);
|
|
});
|
|
} else {
|
|
resolve(undefined);
|
|
}
|
|
});
|
|
}
|
|
}
|