diff --git a/src/renderer/lib/time.js b/src/renderer/lib/time.js
new file mode 100644
index 00000000..ee1a831d
--- /dev/null
+++ b/src/renderer/lib/time.js
@@ -0,0 +1,20 @@
+module.exports = {
+ calculateEta
+}
+
+function calculateEta (missing, downloadSpeed) {
+ if (downloadSpeed === 0 || missing === 0) return
+
+ const rawEta = missing / downloadSpeed
+ const hours = Math.floor(rawEta / 3600) % 24
+ const minutes = Math.floor(rawEta / 60) % 60
+ const seconds = Math.floor(rawEta % 60)
+
+ // Only display hours and minutes if they are greater than 0 but always
+ // display minutes if hours is being displayed
+ const hoursStr = hours ? hours + ' h' : ''
+ const minutesStr = (hours || minutes) ? minutes + ' min' : ''
+ const secondsStr = seconds + ' s'
+
+ return `${hoursStr} ${minutesStr} ${secondsStr} remaining`
+}
diff --git a/src/renderer/pages/player-page.js b/src/renderer/pages/player-page.js
index 9ebfa9ab..6b16cc8f 100644
--- a/src/renderer/pages/player-page.js
+++ b/src/renderer/pages/player-page.js
@@ -6,6 +6,7 @@ const TorrentSummary = require('../lib/torrent-summary')
const Playlist = require('../lib/playlist')
const { dispatch, dispatcher } = require('../lib/dispatcher')
const config = require('../../config')
+const { calculateEta } = require('../lib/time')
// Shows a streaming video player. Standard features + Chromecast + Airplay
module.exports = class Player extends React.Component {
@@ -446,16 +447,9 @@ function renderCastScreen (state) {
const downloadSpeed = prog.downloadSpeed || 0
if (downloadSpeed === 0 || missing === 0) return
- const rawEta = missing / downloadSpeed
- const hours = Math.floor(rawEta / 3600) % 24
- const minutes = Math.floor(rawEta / 60) % 60
- const seconds = Math.floor(rawEta % 60)
+ const etaStr = calculateEta(missing, downloadSpeed)
- const hoursStr = hours ? hours + ' h' : ''
- const minutesStr = (hours || minutes) ? minutes + ' min' : ''
- const secondsStr = seconds + ' s'
-
- return ({hoursStr} {minutesStr} {secondsStr} remaining)
+ return ({etaStr})
}
function renderDownloadProgress () {
diff --git a/src/renderer/pages/torrent-list-page.js b/src/renderer/pages/torrent-list-page.js
index e84dcd92..1a52897d 100644
--- a/src/renderer/pages/torrent-list-page.js
+++ b/src/renderer/pages/torrent-list-page.js
@@ -7,6 +7,7 @@ const LinearProgress = require('material-ui/LinearProgress').default
const TorrentSummary = require('../lib/torrent-summary')
const TorrentPlayer = require('../lib/torrent-player')
const { dispatcher } = require('../lib/dispatcher')
+const { calculateEta } = require('../lib/time')
module.exports = class TorrentList extends React.Component {
render () {
@@ -195,18 +196,9 @@ module.exports = class TorrentList extends React.Component {
const downloadSpeed = prog.downloadSpeed
if (downloadSpeed === 0 || missing === 0) return
- const rawEta = missing / downloadSpeed
- const hours = Math.floor(rawEta / 3600) % 24
- const minutes = Math.floor(rawEta / 60) % 60
- const seconds = Math.floor(rawEta % 60)
+ const etaStr = calculateEta(missing, downloadSpeed)
- // Only display hours and minutes if they are greater than 0 but always
- // display minutes if hours is being displayed
- const hoursStr = hours ? hours + ' h' : ''
- const minutesStr = (hours || minutes) ? minutes + ' min' : ''
- const secondsStr = seconds + ' s'
-
- return ({hoursStr} {minutesStr} {secondsStr} remaining)
+ return ({etaStr})
}
function renderTorrentStatus () {