mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-07-13 02:45:02 +02:00
Fix:Include Watcher as lib with no dependencies and fix tiny-readdir bug #610
This commit is contained in:
parent
160dac109d
commit
ec6e70725c
34 changed files with 2187 additions and 281 deletions
58
server/libs/watcher/atomically/utils/retryify_queue.js
Normal file
58
server/libs/watcher/atomically/utils/retryify_queue.js
Normal file
|
@ -0,0 +1,58 @@
|
|||
"use strict";
|
||||
/* IMPORT */
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const consts_1 = require("../consts");
|
||||
/* RETRYIFY QUEUE */
|
||||
const RetryfyQueue = {
|
||||
interval: 25,
|
||||
intervalId: undefined,
|
||||
limit: consts_1.LIMIT_FILES_DESCRIPTORS,
|
||||
queueActive: new Set(),
|
||||
queueWaiting: new Set(),
|
||||
init: () => {
|
||||
if (RetryfyQueue.intervalId)
|
||||
return;
|
||||
RetryfyQueue.intervalId = setInterval(RetryfyQueue.tick, RetryfyQueue.interval);
|
||||
},
|
||||
reset: () => {
|
||||
if (!RetryfyQueue.intervalId)
|
||||
return;
|
||||
clearInterval(RetryfyQueue.intervalId);
|
||||
delete RetryfyQueue.intervalId;
|
||||
},
|
||||
add: (fn) => {
|
||||
RetryfyQueue.queueWaiting.add(fn);
|
||||
if (RetryfyQueue.queueActive.size < (RetryfyQueue.limit / 2)) { // Active queue not under preassure, executing immediately
|
||||
RetryfyQueue.tick();
|
||||
}
|
||||
else {
|
||||
RetryfyQueue.init();
|
||||
}
|
||||
},
|
||||
remove: (fn) => {
|
||||
RetryfyQueue.queueWaiting.delete(fn);
|
||||
RetryfyQueue.queueActive.delete(fn);
|
||||
},
|
||||
schedule: () => {
|
||||
return new Promise(resolve => {
|
||||
const cleanup = () => RetryfyQueue.remove(resolver);
|
||||
const resolver = () => resolve(cleanup);
|
||||
RetryfyQueue.add(resolver);
|
||||
});
|
||||
},
|
||||
tick: () => {
|
||||
if (RetryfyQueue.queueActive.size >= RetryfyQueue.limit)
|
||||
return;
|
||||
if (!RetryfyQueue.queueWaiting.size)
|
||||
return RetryfyQueue.reset();
|
||||
for (const fn of RetryfyQueue.queueWaiting) {
|
||||
if (RetryfyQueue.queueActive.size >= RetryfyQueue.limit)
|
||||
break;
|
||||
RetryfyQueue.queueWaiting.delete(fn);
|
||||
RetryfyQueue.queueActive.add(fn);
|
||||
fn();
|
||||
}
|
||||
}
|
||||
};
|
||||
/* EXPORT */
|
||||
exports.default = RetryfyQueue;
|
Loading…
Add table
Add a link
Reference in a new issue