Files
flood/server/util/clientUtil.js
2016-03-19 12:46:11 +01:00

271 lines
5.6 KiB
JavaScript

var util = require('util');
var clientUtil = {
defaults: {
torrentProperties: [
'hash',
'name',
'message',
'state',
'stateChanged',
'isActive',
'isComplete',
'isHashChecking',
'isOpen',
'priority',
'uploadRate',
'uploadTotal',
'downloadRate',
'downloadTotal',
'ratio',
'bytesDone',
'sizeBytes',
// 'chunkSize',
// 'chunksCompleted',
'connectedPeers',
'connectedSeeds',
// 'peerExchange',
'peersConnected',
// 'peersNotConnected',
// 'trackerFocus',
'directory',
'filename',
'basePath',
'baseFilename',
'directoryBase',
'seeding',
'added',
// 'leeches',
// 'seeds',
'creationDate',
'freeDiskSpace',
// 'localId',
// 'localIdHtml',
// 'maxFileSize',
// 'maxSizePex',
'throttleName',
// 'tiedToFile',
// 'trackerNumWant',
// 'trackerSize',
'isMultiFile',
// 'isPexActive',
'isPrivate',
'comment',
'ignoreScheduler',
'trackers',
'totalSeeds',
'totalPeers',
// 'cat_dViews',
// 'mode'
],
torrentPropertyMethods: [
'', // yep, rTorrent requires an empty string as the first item.
'main',
'd.hash=',
'd.name=',
'd.message=',
'd.state=',
'd.state_changed=',
'd.is_active=',
'd.complete=',
'd.is_hash_checking=',
'd.is_open=',
'd.priority=',
'd.up.rate=',
'd.up.total=',
'd.down.rate=',
'd.down.total=',
'd.ratio=',
'd.bytes_done=',
'd.size_bytes=',
// 'd.chunk_size=',
// 'd.completed_chunks=',
'd.peers_accounted=', // connnected peers
'd.peers_complete=', // connected seeds
// 'd.peer_exchange=',
'd.peers_connected=', // connected peers + seeds
// 'd.peers_not_connected=',
// 'd.tracker_focus=',
'd.directory=',
'd.base_filename=',
'd.base_path=',
'd.base_filename=',
'd.directory_base=',
'd.custom=seedingtime',
'd.custom=addtime',
// 'd.connection_leech=',
// 'd.connection_seed=',
'd.creation_date=',
'd.free_diskspace=',
// 'd.local_id=',
// 'd.local_id_html=',
// 'd.max_file_size=',
// 'd.max_size_pex=',
'd.throttle_name=',
// 'd.tied_to_file=',
// 'd.tracker_numwant=',
// 'd.tracker_size=',
'd.is_multi_file=',
// 'd.is_pex_active=',
'd.is_private=',
'd.custom2=',
'd.custom=sch_ignore', // ignore scheduler
'cat="$t.multicall=d.hash=,t.get_url=,cat={@!@}"',
'cat="$t.multicall=d.hash=,t.scrape_complete=,cat={@!@}"', // total seeds
'cat="$t.multicall=d.hash=,t.scrape_incomplete=,cat={@!@}"', // total peers
// 'cat=$d.views=',
// 'd.mode='
],
fileProperties: [
'path',
'pathComponents',
'priority',
'sizeBytes',
'sizeChunks',
'completedChunks'
],
filePropertyMethods: [
'f.get_path=',
'f.get_path_components=',
'f.get_priority=',
'f.get_size_bytes=',
'f.get_size_chunks=',
'f.completed_chunks='
],
trackerProperties: [
'group',
'url',
'id',
'minInterval',
'normalInterval',
'type'
],
trackerPropertyMethods: [
't.get_group=',
't.get_url=',
't.get_id=',
't.get_min_interval=',
't.get_normal_interval=',
't.get_type='
],
clientProperties: [
'uploadRate',
'uploadTotal',
'uploadThrottle',
'downloadRate',
'downloadTotal',
'downloadThrottle'
],
clientPropertyMethods: [
'get_up_rate',
'get_up_total',
'throttle.global_up.max_rate',
'get_down_rate',
'get_down_total',
'throttle.global_down.max_rate'
],
peerProperties: [
'address',
'completedPercent',
'clientVersion',
'downloadRate',
'downloadTotal',
'uploadRate',
'uploadTotal',
'id',
'peerRate',
'peerTotal',,
'isEncrypted',
'isIncoming'
],
peerPropertyMethods: [
'p.get_address=',
'p.get_completed_percent=',
'p.get_client_version=',
'p.get_down_rate=',
'p.get_down_total=',
'p.get_up_rate=',
'p.get_up_total=',
'p.get_id=',
'p.get_peer_rate=',
'p.get_peer_total=',
'p.is_encrypted=',
'p.is_incoming='
]
},
// TODO clean this up, write comments...
mapClientProps: (props, data, includeIndex) => {
var index = 0;
var mappedObject = [];
if (data[0].length === 1) {
mappedObject = {};
for (i = 0, len = data.length; i < len; i++) {
mappedObject[props[i]] = data[i][0];
}
} else {
for (i = 0, lenI = data.length; i < lenI; i++) {
mappedObject[i] = {};
for (a = 0, lenA = props.length; a < lenA; a++) {
mappedObject[i][props[a]] = data[i][a];
}
// Index is needed for setting a file's priorities.
mappedObject[i].index = index++;
}
}
return mappedObject;
},
createMulticallRequest: (methodCalls, params) => {
params = params || [];
var methodCall = [];
if (!util.isArray(methodCalls)) {
methodCalls = [methodCalls];
}
for (i = 0, len = methodCalls.length; i < len; i++) {
var param = [''];
if (params[i]) {
param = [params[i]];
}
methodCall.push({
'methodName': methodCalls[i],
'params': param
});
}
return methodCall;
}
}
module.exports = clientUtil;