mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-11 19:17:09 +03:00
75 lines
1.9 KiB
JavaScript
75 lines
1.9 KiB
JavaScript
const { CompositeDisposable, File, Directory, Emitter } = require('atom');
|
|
const path = require('path');
|
|
|
|
module.exports = class Watcher {
|
|
constructor() {
|
|
this.destroy = this.destroy.bind(this);
|
|
this.emitter = new Emitter();
|
|
this.disposables = new CompositeDisposable();
|
|
this.entities = []; // Used for specs
|
|
}
|
|
|
|
onDidDestroy(callback) {
|
|
this.emitter.on('did-destroy', callback);
|
|
}
|
|
|
|
onDidChangeGlobals(callback) {
|
|
this.emitter.on('did-change-globals', callback);
|
|
}
|
|
|
|
destroy() {
|
|
this.disposables.dispose();
|
|
this.entities = null;
|
|
this.emitter.emit('did-destroy');
|
|
this.emitter.dispose();
|
|
}
|
|
|
|
watch() {
|
|
// override me
|
|
}
|
|
|
|
loadStylesheet(stylesheetPath) {
|
|
// override me
|
|
}
|
|
|
|
loadAllStylesheets() {
|
|
// override me
|
|
}
|
|
|
|
emitGlobalsChanged() {
|
|
this.emitter.emit('did-change-globals');
|
|
}
|
|
|
|
watchDirectory(directoryPath) {
|
|
if (this.isInAsarArchive(directoryPath)) return;
|
|
const entity = new Directory(directoryPath);
|
|
this.disposables.add(entity.onDidChange(() => this.loadAllStylesheets()));
|
|
this.entities.push(entity);
|
|
}
|
|
|
|
watchGlobalFile(filePath) {
|
|
const entity = new File(filePath);
|
|
this.disposables.add(entity.onDidChange(() => this.emitGlobalsChanged()));
|
|
this.entities.push(entity);
|
|
}
|
|
|
|
watchFile(filePath) {
|
|
if (this.isInAsarArchive(filePath)) return;
|
|
const reloadFn = () => this.loadStylesheet(entity.getPath());
|
|
|
|
const entity = new File(filePath);
|
|
this.disposables.add(entity.onDidChange(reloadFn));
|
|
this.disposables.add(entity.onDidDelete(reloadFn));
|
|
this.disposables.add(entity.onDidRename(reloadFn));
|
|
this.entities.push(entity);
|
|
}
|
|
|
|
isInAsarArchive(pathToCheck) {
|
|
const { resourcePath } = atom.getLoadSettings();
|
|
return (
|
|
pathToCheck.startsWith(`${resourcePath}${path.sep}`) &&
|
|
path.extname(resourcePath) === '.asar'
|
|
);
|
|
}
|
|
};
|