1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-11-30 08:26:59 +02:00
joplin/ReactNativeClient/PluginAssetsLoader.ts

56 lines
1.5 KiB
TypeScript

const { dirname } = require('lib/path-utils.js');
const { shim } = require('lib/shim');
const Setting = require('lib/models/Setting');
const pluginAssets = require('./pluginAssets/index');
const KvStore = require('lib/services/KvStore.js');
export default class PluginAssetsLoader {
static instance_:PluginAssetsLoader = null;
logger_:any = null;
static instance() {
if (PluginAssetsLoader.instance_) return PluginAssetsLoader.instance_;
PluginAssetsLoader.instance_ = new PluginAssetsLoader();
return PluginAssetsLoader.instance_;
}
setLogger(logger:any) {
this.logger_ = logger;
}
logger() {
return this.logger_;
}
async importAssets() {
const destDir = `${Setting.value('resourceDir')}/pluginAssets`;
await shim.fsDriver().mkdir(destDir);
const hash = pluginAssets.hash;
if (hash === await KvStore.instance().value('PluginAssetsLoader.lastHash')) {
this.logger().info(`PluginAssetsLoader: Assets are up to date. Hash: ${hash}`);
return;
}
this.logger().info(`PluginAssetsLoader: Importing assets to ${destDir}`);
try {
for (const name in pluginAssets.files) {
const dataBase64 = pluginAssets.files[name].data;
const destPath = `${destDir}/${name}`;
await shim.fsDriver().mkdir(dirname(destPath));
await shim.fsDriver().unlink(destPath);
this.logger().info(`PluginAssetsLoader: Copying: ${name} => ${destPath}`);
await shim.fsDriver().writeFile(destPath, dataBase64);
}
} catch (error) {
this.logger().error(error);
}
KvStore.instance().setValue('PluginAssetsLoader.lastHash', hash);
}
}