Tons of Solutions Engineering work done today for the rest of the CS team! Headway, Howard Hanna, Engels, Brighton, etc. Also completed Datasnippers auth flow and worked on Anthology's script. Cloned Anthology's courses (900..) and will clone Full Story on Monday.
This commit is contained in:
72
Scripts/node_modules/basic-ftp/dist/ProgressTracker.js
generated
vendored
Normal file
72
Scripts/node_modules/basic-ftp/dist/ProgressTracker.js
generated
vendored
Normal file
@ -0,0 +1,72 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ProgressTracker = void 0;
|
||||
/**
|
||||
* Tracks progress of one socket data transfer at a time.
|
||||
*/
|
||||
class ProgressTracker {
|
||||
constructor() {
|
||||
this.bytesOverall = 0;
|
||||
this.intervalMs = 500;
|
||||
this.onStop = noop;
|
||||
this.onHandle = noop;
|
||||
}
|
||||
/**
|
||||
* Register a new handler for progress info. Use `undefined` to disable reporting.
|
||||
*/
|
||||
reportTo(onHandle = noop) {
|
||||
this.onHandle = onHandle;
|
||||
}
|
||||
/**
|
||||
* Start tracking transfer progress of a socket.
|
||||
*
|
||||
* @param socket The socket to observe.
|
||||
* @param name A name associated with this progress tracking, e.g. a filename.
|
||||
* @param type The type of the transfer, typically "upload" or "download".
|
||||
*/
|
||||
start(socket, name, type) {
|
||||
let lastBytes = 0;
|
||||
this.onStop = poll(this.intervalMs, () => {
|
||||
const bytes = socket.bytesRead + socket.bytesWritten;
|
||||
this.bytesOverall += bytes - lastBytes;
|
||||
lastBytes = bytes;
|
||||
this.onHandle({
|
||||
name,
|
||||
type,
|
||||
bytes,
|
||||
bytesOverall: this.bytesOverall
|
||||
});
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Stop tracking transfer progress.
|
||||
*/
|
||||
stop() {
|
||||
this.onStop(false);
|
||||
}
|
||||
/**
|
||||
* Call the progress handler one more time, then stop tracking.
|
||||
*/
|
||||
updateAndStop() {
|
||||
this.onStop(true);
|
||||
}
|
||||
}
|
||||
exports.ProgressTracker = ProgressTracker;
|
||||
/**
|
||||
* Starts calling a callback function at a regular interval. The first call will go out
|
||||
* immediately. The function returns a function to stop the polling.
|
||||
*/
|
||||
function poll(intervalMs, updateFunc) {
|
||||
const id = setInterval(updateFunc, intervalMs);
|
||||
const stopFunc = (stopWithUpdate) => {
|
||||
clearInterval(id);
|
||||
if (stopWithUpdate) {
|
||||
updateFunc();
|
||||
}
|
||||
// Prevent repeated calls to stop calling handler.
|
||||
updateFunc = noop;
|
||||
};
|
||||
updateFunc();
|
||||
return stopFunc;
|
||||
}
|
||||
function noop() { }
|
||||
Reference in New Issue
Block a user