Work on Events missed files (see prev)
This commit is contained in:
parent
b273101b61
commit
c142a9c3d3
|
@ -77,7 +77,10 @@ function addNewClient(client, clientSock) {
|
|||
|
||||
client.log.info(connInfo, 'Client connected');
|
||||
|
||||
Events.emit('codes.l33t.enigma.system.connected', { client : client, connectionCount : clientConnections.length } );
|
||||
Events.emit(
|
||||
Events.getSystemEvents().ClientConnected,
|
||||
{ client : client, connectionCount : clientConnections.length }
|
||||
);
|
||||
|
||||
return id;
|
||||
}
|
||||
|
@ -97,7 +100,10 @@ function removeClient(client) {
|
|||
'Client disconnected'
|
||||
);
|
||||
|
||||
Events.emit('codes.l33t.enigma.system.disconnected', { client : client, connectionCount : clientConnections.length } );
|
||||
Events.emit(
|
||||
Events.getSystemEvents().ClientDisconnected,
|
||||
{ client : client, connectionCount : clientConnections.length }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -177,7 +177,7 @@ function connectEntry(client, nextMenu) {
|
|||
displayBanner(term);
|
||||
|
||||
// fire event
|
||||
Events.emit('codes.l33t.enigma.system.term_detected', { client : client } );
|
||||
Events.emit(Events.getSystemEvents().TermDetected, { client : client } );
|
||||
|
||||
setTimeout( () => {
|
||||
return client.menuStack.goto(nextMenu);
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
/* jslint node: true */
|
||||
'use strict';
|
||||
|
||||
const FileEntry = require('./file_entry.js');
|
||||
const FileEntry = require('./file_entry.js');
|
||||
|
||||
// deps
|
||||
const { partition } = require('lodash');
|
||||
|
||||
module.exports = class DownloadQueue {
|
||||
constructor(client) {
|
||||
|
@ -24,21 +27,22 @@ module.exports = class DownloadQueue {
|
|||
this.client.user.downloadQueue = [];
|
||||
}
|
||||
|
||||
toggle(fileEntry) {
|
||||
toggle(fileEntry, systemFile=false) {
|
||||
if(this.isQueued(fileEntry)) {
|
||||
this.client.user.downloadQueue = this.client.user.downloadQueue.filter(e => fileEntry.fileId !== e.fileId);
|
||||
} else {
|
||||
this.add(fileEntry);
|
||||
this.add(fileEntry, systemFile);
|
||||
}
|
||||
}
|
||||
|
||||
add(fileEntry) {
|
||||
add(fileEntry, systemFile=false) {
|
||||
this.client.user.downloadQueue.push({
|
||||
fileId : fileEntry.fileId,
|
||||
areaTag : fileEntry.areaTag,
|
||||
fileName : fileEntry.fileName,
|
||||
path : fileEntry.filePath,
|
||||
byteSize : fileEntry.meta.byte_size || 0,
|
||||
systemFile : systemFile,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -47,7 +51,9 @@ module.exports = class DownloadQueue {
|
|||
fileIds = [ fileIds ];
|
||||
}
|
||||
|
||||
this.client.user.downloadQueue = this.client.user.downloadQueue.filter(e => ( -1 === fileIds.indexOf(e.fileId) ) );
|
||||
const [ remain, removed ] = partition(this.client.user.downloadQueue, e => ( -1 === fileIds.indexOf(e.fileId) ));
|
||||
this.client.user.downloadQueue = remain;
|
||||
return removed;
|
||||
}
|
||||
|
||||
isQueued(entryOrId) {
|
||||
|
|
|
@ -4,25 +4,20 @@
|
|||
const paths = require('path');
|
||||
const events = require('events');
|
||||
const Log = require('./logger.js').log;
|
||||
const SystemEvents = require('./system_events.js');
|
||||
|
||||
// deps
|
||||
const _ = require('lodash');
|
||||
const async = require('async');
|
||||
const glob = require('glob');
|
||||
|
||||
const SYSTEM_EVENTS = {
|
||||
ClientConnected : 'codes.l33t.enigma.system.connected',
|
||||
ClientDisconnected : 'codes.l33t.enigma.system.disconnected',
|
||||
TermDetected : 'codes.l33t.enigma.term_detected',
|
||||
};
|
||||
|
||||
module.exports = new class Events extends events.EventEmitter {
|
||||
constructor() {
|
||||
super();
|
||||
}
|
||||
|
||||
getSystemEvents() {
|
||||
return SYSTEM_EVENTS;
|
||||
return SystemEvents;
|
||||
}
|
||||
|
||||
addListener(event, listener) {
|
||||
|
|
|
@ -14,6 +14,7 @@ const User = require('./user.js');
|
|||
const Log = require('./logger.js').log;
|
||||
const getConnectionByUserId = require('./client_connections.js').getConnectionByUserId;
|
||||
const webServerPackageName = require('./servers/content/web.js').moduleInfo.packageName;
|
||||
const Events = require('./events.js');
|
||||
|
||||
// deps
|
||||
const hashids = require('hashids');
|
||||
|
@ -337,7 +338,7 @@ class FileAreaWebAccess {
|
|||
|
||||
resp.on('finish', () => {
|
||||
// transfer completed fully
|
||||
this.updateDownloadStatsForUserIdAndSystem(servedItem.userId, stats.size);
|
||||
this.updateDownloadStatsForUserIdAndSystem(servedItem.userId, stats.size, [ fileEntry ]);
|
||||
});
|
||||
|
||||
const headers = {
|
||||
|
@ -382,24 +383,21 @@ class FileAreaWebAccess {
|
|||
);
|
||||
},
|
||||
function loadFileEntries(fileIds, callback) {
|
||||
const filePaths = [];
|
||||
async.eachSeries(fileIds, (fileId, nextFileId) => {
|
||||
async.map(fileIds, (fileId, nextFileId) => {
|
||||
const fileEntry = new FileEntry();
|
||||
fileEntry.load(fileId, err => {
|
||||
if(!err) {
|
||||
filePaths.push(fileEntry.filePath);
|
||||
}
|
||||
return nextFileId(err);
|
||||
return nextFileId(err, fileEntry);
|
||||
});
|
||||
}, err => {
|
||||
}, (err, fileEntries) => {
|
||||
if(err) {
|
||||
return callback(Errors.DoesNotExist('Coudl not load file IDs for batch'));
|
||||
return callback(Errors.DoesNotExist('Could not load file IDs for batch'));
|
||||
}
|
||||
|
||||
return callback(null, filePaths);
|
||||
return callback(null, fileEntries);
|
||||
});
|
||||
},
|
||||
function createAndServeStream(filePaths, callback) {
|
||||
function createAndServeStream(fileEntries, callback) {
|
||||
const filePaths = fileEntries.map(fe => fe.filePath);
|
||||
Log.trace( { filePaths : filePaths }, 'Creating zip archive for batch web request');
|
||||
|
||||
const zipFile = new yazl.ZipFile();
|
||||
|
@ -430,7 +428,7 @@ class FileAreaWebAccess {
|
|||
|
||||
resp.on('finish', () => {
|
||||
// transfer completed fully
|
||||
self.updateDownloadStatsForUserIdAndSystem(servedItem.userId, finalZipSize);
|
||||
self.updateDownloadStatsForUserIdAndSystem(servedItem.userId, finalZipSize, fileEntries);
|
||||
});
|
||||
|
||||
const batchFileName = `batch_${servedItem.hashId}.zip`;
|
||||
|
@ -457,7 +455,7 @@ class FileAreaWebAccess {
|
|||
);
|
||||
}
|
||||
|
||||
updateDownloadStatsForUserIdAndSystem(userId, dlBytes, cb) {
|
||||
updateDownloadStatsForUserIdAndSystem(userId, dlBytes, fileEntries) {
|
||||
async.waterfall(
|
||||
[
|
||||
function fetchActiveUser(callback) {
|
||||
|
@ -477,14 +475,19 @@ class FileAreaWebAccess {
|
|||
StatLog.incrementSystemStat('dl_total_count', 1);
|
||||
StatLog.incrementSystemStat('dl_total_bytes', dlBytes);
|
||||
|
||||
return callback(null, user);
|
||||
},
|
||||
function sendEvent(user, callback) {
|
||||
Events.emit(
|
||||
Events.getSystemEvents().UserDownload,
|
||||
{
|
||||
user : user,
|
||||
files : fileEntries,
|
||||
}
|
||||
);
|
||||
return callback(null);
|
||||
}
|
||||
],
|
||||
err => {
|
||||
if(cb) {
|
||||
return cb(err);
|
||||
}
|
||||
}
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -223,7 +223,7 @@ exports.getModule = class FileBaseListExport extends MenuModule {
|
|||
if(!err) {
|
||||
// queue it!
|
||||
const dlQueue = new DownloadQueue(self.client);
|
||||
dlQueue.add(newEntry);
|
||||
dlQueue.add(newEntry, true); // true=systemFile
|
||||
|
||||
// clean up after ourselves when the session ends
|
||||
const thisClientId = self.client.session.id;
|
||||
|
|
|
@ -10,6 +10,7 @@ const DownloadQueue = require('./download_queue.js');
|
|||
const StatLog = require('./stat_log.js');
|
||||
const FileEntry = require('./file_entry.js');
|
||||
const Log = require('./logger.js').log;
|
||||
const Events = require('./events.js');
|
||||
|
||||
// deps
|
||||
const async = require('async');
|
||||
|
@ -545,7 +546,16 @@ exports.getModule = class TransferFileModule extends MenuModule {
|
|||
if(sentFileIds.length > 0) {
|
||||
// remove items we sent from the D/L queue
|
||||
const dlQueue = new DownloadQueue(self.client);
|
||||
dlQueue.removeItems(sentFileIds);
|
||||
const dlFileEntries = dlQueue.removeItems(sentFileIds);
|
||||
|
||||
// fire event for downloaded entries
|
||||
Events.emit(
|
||||
Events.getSystemEvents().UserDownload,
|
||||
{
|
||||
user : self.client.user,
|
||||
files : dlFileEntries
|
||||
}
|
||||
);
|
||||
|
||||
self.sentFileIds = sentFileIds;
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ const Log = require('./logger.js').log;
|
|||
const Errors = require('./enig_error.js').Errors;
|
||||
const FileEntry = require('./file_entry.js');
|
||||
const isAnsi = require('./string_util.js').isAnsi;
|
||||
const Events = require('./events.js');
|
||||
|
||||
// deps
|
||||
const async = require('async');
|
||||
|
@ -567,8 +568,18 @@ exports.getModule = class UploadModule extends MenuModule {
|
|||
// here as I/O can take quite a bit of time. Log any failures.
|
||||
//
|
||||
self.moveAndPersistUploadsToDatabase(scanResults.newEntries);
|
||||
return callback(null);
|
||||
return callback(null, scanResults.newEntries);
|
||||
},
|
||||
function sendEvent(uploadedEntries, callback) {
|
||||
Events.emit(
|
||||
Events.getSystemEvents().UserUpload,
|
||||
{
|
||||
user : self.client.user,
|
||||
files : uploadedEntries,
|
||||
}
|
||||
);
|
||||
return callback(null);
|
||||
}
|
||||
],
|
||||
err => {
|
||||
if(err) {
|
||||
|
|
Loading…
Reference in New Issue