filefive
Version:
SFTP/FTP/Amazon S3 client and dual-panel file manager for macOS and Linux
44 lines (43 loc) • 1.41 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const node_path_1 = require("node:path");
const ReferenceCountMap_1 = __importDefault(require("./utils/ReferenceCountMap"));
const Connection_1 = __importDefault(require("./Connection"));
const URI_1 = require("./utils/URI");
class RemoteWatcher {
constructor(listener, onMissing) {
this.listener = listener;
this.onMissing = onMissing;
this.watched = new ReferenceCountMap_1.default;
}
watch(uri) {
this.watched.inc(uri) || this.watched.set(uri, false);
this.refresh(uri);
}
unwatch(uri) {
this.watched.dec(uri);
}
refresh(uri) {
if (this.watched.has(uri)) {
this.list(uri);
Array.from(this.watched.keys()).forEach(dir => {
if (dir.startsWith(uri + node_path_1.sep)) {
this.list(dir);
}
});
}
}
list(uri) {
const { id, path } = (0, URI_1.parseURI)(uri);
Connection_1.default.list(id, path)
.then(files => this.listener(uri, files))
.catch(() => {
this.watched.del(uri);
this.onMissing(uri);
});
}
}
exports.default = RemoteWatcher;