move more rpc functionality into modules
This commit is contained in:
@@ -8,6 +8,8 @@ const Pinning = module.exports;
|
||||
const Nacl = require("tweetnacl/nacl-fast");
|
||||
const Util = require("../common-util");
|
||||
const nThen = require("nthen");
|
||||
const Saferphore = require("saferphore");
|
||||
const Pinned = require('../../scripts/pinned');
|
||||
|
||||
//const escapeKeyCharacters = Util.escapeKeyCharacters;
|
||||
const unescapeKeyCharacters = Util.unescapeKeyCharacters;
|
||||
@@ -397,3 +399,66 @@ Pinning.getFileSize = function (Env, channel, _cb) {
|
||||
});
|
||||
};
|
||||
|
||||
/* accepts a list, and returns a sublist of channel or file ids which seem
|
||||
to have been deleted from the server (file size 0)
|
||||
|
||||
we might consider that we should only say a file is gone if fs.stat returns
|
||||
ENOENT, but for now it's simplest to just rely on getFileSize...
|
||||
*/
|
||||
Pinning.getDeletedPads = function (Env, channels, cb) {
|
||||
if (!Array.isArray(channels)) { return cb('INVALID_LIST'); }
|
||||
var L = channels.length;
|
||||
|
||||
var sem = Saferphore.create(10);
|
||||
var absentees = [];
|
||||
|
||||
var job = function (channel, wait) {
|
||||
return function (give) {
|
||||
Pinning.getFileSize(Env, channel, wait(give(function (e, size) {
|
||||
if (e) { return; }
|
||||
if (size === 0) { absentees.push(channel); }
|
||||
})));
|
||||
};
|
||||
};
|
||||
|
||||
nThen(function (w) {
|
||||
for (var i = 0; i < L; i++) {
|
||||
sem.take(job(channels[i], w));
|
||||
}
|
||||
}).nThen(function () {
|
||||
cb(void 0, absentees);
|
||||
});
|
||||
};
|
||||
|
||||
// inform that the
|
||||
Pinning.loadChannelPins = function (Env) {
|
||||
Pinned.load(function (err, data) {
|
||||
if (err) {
|
||||
Env.Log.error("LOAD_CHANNEL_PINS", err);
|
||||
|
||||
// FIXME not sure what should be done here instead
|
||||
Env.pinnedPads = {};
|
||||
Env.evPinnedPadsReady.fire();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Env.pinnedPads = data;
|
||||
Env.evPinnedPadsReady.fire();
|
||||
}, {
|
||||
pinPath: Env.paths.pin,
|
||||
});
|
||||
};
|
||||
|
||||
Pinning.isChannelPinned = function (Env, channel, cb) {
|
||||
Env.evPinnedPadsReady.reg(() => {
|
||||
if (Env.pinnedPads[channel] && Object.keys(Env.pinnedPads[channel]).length) {
|
||||
cb(true);
|
||||
} else {
|
||||
delete Env.pinnedPads[channel];
|
||||
cb(false);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user