diff --git a/client/src/javascript/components/modals/torrent-details-modal/TorrentGeneralInfo.js b/client/src/javascript/components/modals/torrent-details-modal/TorrentGeneralInfo.js index 0742b1bc5..7f75972d7 100644 --- a/client/src/javascript/components/modals/torrent-details-modal/TorrentGeneralInfo.js +++ b/client/src/javascript/components/modals/torrent-details-modal/TorrentGeneralInfo.js @@ -25,6 +25,11 @@ class TorrentGeneralInfo extends React.Component { creation = new Date(torrent.creationDate * 1000); } + let lastTransfer = null; + if (torrent.lastTransfer) { + lastTransfer = new Date(torrent.lastTransfer * 1000); + } + const VALUE_NOT_AVAILABLE = ( @@ -130,6 +135,20 @@ class TorrentGeneralInfo extends React.Component { /> + + + + + + {lastTransfer + ? `${this.props.intl.formatDate(lastTransfer, { + year: 'numeric', + month: 'long', + day: '2-digit', + })} ${this.props.intl.formatTime(lastTransfer)}` + : VALUE_NOT_AVAILABLE} + + diff --git a/client/src/javascript/components/torrent-list/SortDropdown.js b/client/src/javascript/components/torrent-list/SortDropdown.js index 6a4e311c5..a5651806d 100644 --- a/client/src/javascript/components/torrent-list/SortDropdown.js +++ b/client/src/javascript/components/torrent-list/SortDropdown.js @@ -16,6 +16,7 @@ const SORT_PROPERTIES = [ 'upTotal', 'sizeBytes', 'dateAdded', + 'lastTransfer', ]; class SortDropdown extends React.Component { diff --git a/client/src/javascript/components/torrent-list/TorrentDetail.js b/client/src/javascript/components/torrent-list/TorrentDetail.js index 1085d2566..1ec415038 100644 --- a/client/src/javascript/components/torrent-list/TorrentDetail.js +++ b/client/src/javascript/components/torrent-list/TorrentDetail.js @@ -31,6 +31,7 @@ const icons = { basePath: , hash: , dateAdded: , + lastTransfer: , dateCreated: , isPrivate: , message: , @@ -43,8 +44,8 @@ const icons = { upTotal: , }; -const booleanRenderer = value => (value ? icons.checkmark : null); -const dateRenderer = date => ; +const booleanRenderer = (value) => (value ? icons.checkmark : null); +const dateRenderer = (date) => (date ? : null); const peersRenderer = (peersConnected, totalPeers) => ( ; const transformers = { dateAdded: dateRenderer, dateCreated: dateRenderer, + lastTransfer: dateRenderer, downRate: speedRenderer, downTotal: sizeRenderer, ignoreScheduler: booleanRenderer, diff --git a/client/src/javascript/constants/TorrentProperties.js b/client/src/javascript/constants/TorrentProperties.js index 9eef6f3bc..c8cd214f1 100644 --- a/client/src/javascript/constants/TorrentProperties.js +++ b/client/src/javascript/constants/TorrentProperties.js @@ -83,6 +83,10 @@ const torrentProperties = { id: 'torrents.properties.trackers', defaultMessage: 'Trackers', }, + lastTransfer: { + id: 'torrents.properties.last_xfer', + defaultMessage: 'Last Transfer', + }, }; export default torrentProperties; diff --git a/client/src/javascript/stores/SettingsStore.js b/client/src/javascript/stores/SettingsStore.js index 65c1ed6ce..3453c11ec 100644 --- a/client/src/javascript/stores/SettingsStore.js +++ b/client/src/javascript/stores/SettingsStore.js @@ -39,6 +39,7 @@ class SettingsStoreClass extends BaseStore { {id: 'seeds', visible: true}, {id: 'dateAdded', visible: true}, {id: 'dateCreated', visible: false}, + {id: 'lastTransfer', visible: false}, {id: 'basePath', visible: false}, {id: 'comment', visible: false}, {id: 'hash', visible: false}, diff --git a/server/constants/torrentListPropMap.js b/server/constants/torrentListPropMap.js index 0ca2d28e5..4cec7a21e 100644 --- a/server/constants/torrentListPropMap.js +++ b/server/constants/torrentListPropMap.js @@ -143,6 +143,11 @@ torrentListPropMap.set('dateCreated', { transformValue: dateTransformer, }); +torrentListPropMap.set('lastTransfer', { + methodCall: 'd.custom=last_xfer', + transformValue: dateTransformer, +}); + torrentListPropMap.set('throttleName', { methodCall: 'd.throttle_name=', transformValue: defaultTransformer,