diff --git a/server/models/TorrentCollection.js b/server/models/TorrentCollection.js index 701e47eb..1ee120e6 100644 --- a/server/models/TorrentCollection.js +++ b/server/models/TorrentCollection.js @@ -3,8 +3,9 @@ let _ = require('lodash'); let clientUtil = require('../util/clientUtil'); -let torrentStatusMap = require('../../shared/constants/torrentStatusMap'); let stringUtil = require('../../shared/util/stringUtil'); +let torrentGeneralPropsMap = require('../../shared/constants/torrentGeneralPropsMap'); +let torrentStatusMap = require('../../shared/constants/torrentStatusMap'); let Torrent = require('./Torrent'); const DEFAULT_TAG = 'untagged'; @@ -96,7 +97,7 @@ class TorrentCollection { let currentTime = Date.now(); let knownHashes = []; let torrentData = clientUtil.mapClientResponse( - clientUtil.defaults.torrentProperties, clientData + torrentGeneralPropsMap.props, clientData ); this.resetStatusCount(); diff --git a/server/models/client.js b/server/models/client.js index 83f484ad..11842983 100644 --- a/server/models/client.js +++ b/server/models/client.js @@ -6,11 +6,14 @@ let util = require('util'); let clientResponseUtil = require('../util/clientResponseUtil'); let clientSettingsMap = require('../../shared/constants/clientSettingsMap'); let ClientRequest = require('./ClientRequest'); -let clientUtil = require('../util/clientUtil'); let formatUtil = require('../../shared/util/formatUtil'); let scgi = require('../util/scgi'); let Torrent = require('./Torrent'); let TorrentCollection = require('./TorrentCollection'); +let torrentFilePropsMap = require('../../shared/constants/torrentFilePropsMap'); +let torrentGeneralPropsMap = require('../../shared/constants/torrentGeneralPropsMap'); +let torrentPeerPropsMap = require('../../shared/constants/torrentPeerPropsMap'); +let torrentTrackerPropsMap = require('../../shared/constants/torrentTrackerPropsMap'); let statusCount = {}; let tagCount = {}; @@ -168,9 +171,9 @@ var client = { request.add('getTorrentDetails', { hash, - fileProps: clientUtil.defaults.filePropertyMethods, - peerProps: clientUtil.defaults.peerPropertyMethods, - trackerProps: clientUtil.defaults.trackerPropertyMethods + fileProps: torrentFilePropsMap.methods, + peerProps: torrentPeerPropsMap.methods, + trackerProps: torrentTrackerPropsMap.methods }); request.postProcess(clientResponseUtil.processTorrentDetails); request.onComplete(callback); @@ -181,7 +184,7 @@ var client = { let request = new ClientRequest(); request.add('getTorrentList', - {props: clientUtil.defaults.torrentPropertyMethods}); + {props: torrentGeneralPropsMap.methods}); request.postProcess((data) => { let torrentList = []; diff --git a/server/util/clientResponseUtil.js b/server/util/clientResponseUtil.js index af3185bd..7da81d21 100644 --- a/server/util/clientResponseUtil.js +++ b/server/util/clientResponseUtil.js @@ -1,6 +1,10 @@ 'use strict'; let clientUtil = require('./clientUtil'); +let clientGeneralPropsMap = require('../../shared/constants/clientGeneralPropsMap'); +let torrentFilePropsMap = require('../../shared/constants/torrentFilePropsMap'); +let torrentPeerPropsMap = require('../../shared/constants/torrentPeerPropsMap'); +let torrentTrackerPropsMap = require('../../shared/constants/torrentTrackerPropsMap'); let util = require('util'); let getFileTreeFromPathsArr = (tree, directory, file, depth) => { @@ -43,14 +47,14 @@ let clientResponseUtil = { if (peersData && peersData.length) { peers = clientUtil.mapClientResponse( - clientUtil.defaults.peerProperties, + torrentPeerPropsMap.props, peersData ); } if (filesData && filesData.length) { files = clientUtil.mapClientResponse( - clientUtil.defaults.fileProperties, + torrentFilePropsMap.props, filesData ); @@ -61,7 +65,7 @@ let clientResponseUtil = { if (trackerData && trackerData.length) { trackers = clientUtil.mapClientResponse( - clientUtil.defaults.trackerProperties, + torrentTrackerPropsMap.props, trackerData ); } @@ -81,8 +85,10 @@ let clientResponseUtil = { }, processTransferStats(data) { - return clientUtil.mapClientResponse(clientUtil.defaults.clientProperties, - data); + return clientUtil.mapClientResponse( + clientGeneralPropsMap.props, + data + ); } } diff --git a/server/util/clientUtil.js b/server/util/clientUtil.js index 864e4b83..821f646a 100644 --- a/server/util/clientUtil.js +++ b/server/util/clientUtil.js @@ -1,226 +1,6 @@ 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', - - 'tags', - '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.custom1=', - 'd.custom2=', - 'd.custom=sch_ignore', // ignore scheduler - 'cat="$t.multicall=d.hash=,t.url=,cat={@!@}"', // trackers - 'cat="$t.multicall=d.hash=,t.scrape_complete=,cat={@!@}"', // seeds - 'cat="$t.multicall=d.hash=,t.scrape_incomplete=,cat={@!@}"', // peers - // 'cat=$d.views=', - - // 'd.mode=' - ], - fileProperties: [ - 'path', - 'pathComponents', - 'priority', - 'sizeBytes', - 'sizeChunks', - 'completedChunks' - ], - filePropertyMethods: [ - 'f.path=', - 'f.path_components=', - 'f.priority=', - 'f.size_bytes=', - 'f.size_chunks=', - 'f.completed_chunks=' - ], - trackerProperties: [ - 'group', - 'url', - 'id', - 'minInterval', - 'normalInterval', - 'type' - ], - trackerPropertyMethods: [ - 't.group=', - 't.url=', - 't.id=', - 't.min_interval=', - 't.normal_interval=', - 't.type=' - ], - clientProperties: [ - 'uploadRate', - 'uploadTotal', - 'uploadThrottle', - - 'downloadRate', - 'downloadTotal', - 'downloadThrottle' - ], - clientPropertyMethods: [ - 'throttle.global_up.rate', - 'throttle.global_up.total', - 'throttle.global_up.max_rate', - - 'throttle.global_down.rate', - 'throttle.global_down.total', - 'throttle.global_down.max_rate' - ], - peerProperties: [ - 'address', - 'completedPercent', - 'clientVersion', - 'downloadRate', - 'downloadTotal', - 'uploadRate', - 'uploadTotal', - 'id', - 'peerRate', - 'peerTotal',, - 'isEncrypted', - 'isIncoming' - ], - peerPropertyMethods: [ - 'p.address=', - 'p.completed_percent=', - 'p.client_version=', - 'p.down_rate=', - 'p.down_total=', - 'p.up_rate=', - 'p.up_total=', - 'p.id=', - 'p.peer_rate=', - 'p.peer_total=', - 'p.is_encrypted=', - 'p.is_incoming=' - ] - }, - mapClientResponse: (requestedKeys, clientResponse) => { if (clientResponse.length === 0) { return []; diff --git a/shared/constants/clientGeneralPropsMap.js b/shared/constants/clientGeneralPropsMap.js new file mode 100644 index 00000000..0d240097 --- /dev/null +++ b/shared/constants/clientGeneralPropsMap.js @@ -0,0 +1,24 @@ +'use strict'; + +const clientGeneralPropsMap = { + props: [ + 'uploadRate', + 'uploadTotal', + 'uploadThrottle', + + 'downloadRate', + 'downloadTotal', + 'downloadThrottle' + ], + methods: [ + 'throttle.global_up.rate', + 'throttle.global_up.total', + 'throttle.global_up.max_rate', + + 'throttle.global_down.rate', + 'throttle.global_down.total', + 'throttle.global_down.max_rate' + ] +}; + +module.exports = clientGeneralPropsMap; diff --git a/shared/constants/torrentFilePropsMap.js b/shared/constants/torrentFilePropsMap.js new file mode 100644 index 00000000..46a96f41 --- /dev/null +++ b/shared/constants/torrentFilePropsMap.js @@ -0,0 +1,22 @@ +'use strict'; + +const torrentFilePropsMap = { + props: [ + 'path', + 'pathComponents', + 'priority', + 'sizeBytes', + 'sizeChunks', + 'completedChunks' + ], + methods: [ + 'f.path=', + 'f.path_components=', + 'f.priority=', + 'f.size_bytes=', + 'f.size_chunks=', + 'f.completed_chunks=' + ] +}; + +module.exports = torrentFilePropsMap; diff --git a/shared/constants/torrentGeneralPropsMap.js b/shared/constants/torrentGeneralPropsMap.js new file mode 100644 index 00000000..9e79d745 --- /dev/null +++ b/shared/constants/torrentGeneralPropsMap.js @@ -0,0 +1,145 @@ +'use strict'; + +const torrentGeneralPropsMap = { + props: [ + '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', + + 'tags', + 'comment', + 'ignoreScheduler', + 'trackers', + 'totalSeeds', + 'totalPeers', + // 'cat_dViews', + + // 'mode' + ], + methods: [ + '', // 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.custom1=', + 'd.custom2=', + 'd.custom=sch_ignore', // ignore scheduler + 'cat="$t.multicall=d.hash=,t.url=,cat={@!@}"', // trackers + 'cat="$t.multicall=d.hash=,t.scrape_complete=,cat={@!@}"', // seeds + 'cat="$t.multicall=d.hash=,t.scrape_incomplete=,cat={@!@}"', // peers + // 'cat=$d.views=', + + // 'd.mode=' + ] +}; + +module.exports = torrentGeneralPropsMap; diff --git a/shared/constants/torrentPeerPropsMap.js b/shared/constants/torrentPeerPropsMap.js new file mode 100644 index 00000000..e15f696e --- /dev/null +++ b/shared/constants/torrentPeerPropsMap.js @@ -0,0 +1,34 @@ +'use strict'; + +const torrentPeerPropsMap = { + props: [ + 'address', + 'completedPercent', + 'clientVersion', + 'downloadRate', + 'downloadTotal', + 'uploadRate', + 'uploadTotal', + 'id', + 'peerRate', + 'peerTotal',, + 'isEncrypted', + 'isIncoming' + ], + methods: [ + 'p.address=', + 'p.completed_percent=', + 'p.client_version=', + 'p.down_rate=', + 'p.down_total=', + 'p.up_rate=', + 'p.up_total=', + 'p.id=', + 'p.peer_rate=', + 'p.peer_total=', + 'p.is_encrypted=', + 'p.is_incoming=' + ] +}; + +module.exports = torrentPeerPropsMap; diff --git a/shared/constants/torrentTrackerPropsMap.js b/shared/constants/torrentTrackerPropsMap.js new file mode 100644 index 00000000..093b0e96 --- /dev/null +++ b/shared/constants/torrentTrackerPropsMap.js @@ -0,0 +1,22 @@ +'use strict'; + +const torrentTrackerPropsMap = { + props: [ + 'group', + 'url', + 'id', + 'minInterval', + 'normalInterval', + 'type' + ], + methods: [ + 't.group=', + 't.url=', + 't.id=', + 't.min_interval=', + 't.normal_interval=', + 't.type=' + ] +}; + +module.exports = torrentTrackerPropsMap;