diff --git a/src/main/menu.js b/src/main/menu.js
index b9a6f3b4..a1ebc610 100644
--- a/src/main/menu.js
+++ b/src/main/menu.js
@@ -288,6 +288,14 @@ function getMenuTemplate () {
{
label: 'Resume All',
click: () => windows.main.dispatch('resumeAllTorrents')
+ },
+ {
+ label: 'Remove All From List',
+ click: () => windows.main.dispatch('confirmDeleteAllTorrents', false)
+ },
+ {
+ label: 'Remove All Data Files',
+ click: () => windows.main.dispatch('confirmDeleteAllTorrents', true)
}
]
},
diff --git a/src/renderer/components/delete-all-torrents-modal.js b/src/renderer/components/delete-all-torrents-modal.js
new file mode 100644
index 00000000..6e34a41d
--- /dev/null
+++ b/src/renderer/components/delete-all-torrents-modal.js
@@ -0,0 +1,30 @@
+const React = require('react')
+
+const ModalOKCancel = require('./modal-ok-cancel')
+const {dispatch, dispatcher} = require('../lib/dispatcher')
+
+module.exports = class DeleteAllTorrentsModal extends React.Component {
+ render () {
+ const {state: {modal: {deleteData}}} = this.props
+ const message = deleteData
+ ? 'Are you sure you want to remove all the torrents from the list and delete the data files?'
+ : 'Are you sure you want to remove all the torrents from the list?'
+ const buttonText = deleteData ? 'REMOVE DATA' : 'REMOVE'
+
+ return (
+
+ )
+
+ function handleRemove () {
+ dispatch('deleteAllTorrents', deleteData)
+ dispatch('exitModal')
+ }
+ }
+}
diff --git a/src/renderer/controllers/torrent-list-controller.js b/src/renderer/controllers/torrent-list-controller.js
index f726c800..699749a2 100644
--- a/src/renderer/controllers/torrent-list-controller.js
+++ b/src/renderer/controllers/torrent-list-controller.js
@@ -201,6 +201,13 @@ module.exports = class TorrentListController {
}
}
+ confirmDeleteAllTorrents (deleteData) {
+ this.state.modal = {
+ id: 'delete-all-torrents-modal',
+ deleteData
+ }
+ }
+
// TODO: use torrentKey, not infoHash
deleteTorrent (infoHash, deleteData) {
ipcRenderer.send('wt-stop-torrenting', infoHash)
@@ -227,6 +234,26 @@ module.exports = class TorrentListController {
sound.play('DELETE')
}
+ deleteAllTorrents (deleteData) {
+ this.state.saved.torrents.forEach((summary) => {
+ ipcRenderer.send('wt-stop-torrenting', summary.infoHash)
+
+ // remove torrent and poster file
+ deleteFile(TorrentSummary.getTorrentPath(summary))
+ deleteFile(TorrentSummary.getPosterPath(summary))
+
+ if (deleteData) moveItemToTrash(summary)
+
+ dispatch('stateSave')
+ })
+
+ this.state.saved.torrents = []
+
+ // prevent user from going forward to a deleted torrent
+ this.state.location.clearForward('player')
+ sound.play('DELETE')
+ }
+
toggleSelectTorrent (infoHash) {
if (this.state.selectedInfoHash === infoHash) {
this.state.selectedInfoHash = null
diff --git a/src/renderer/main.js b/src/renderer/main.js
index 9beab04c..ee0b3b43 100644
--- a/src/renderer/main.js
+++ b/src/renderer/main.js
@@ -250,6 +250,10 @@ const dispatchHandlers = {
controllers.torrentList().confirmDeleteTorrent(infoHash, deleteData),
'deleteTorrent': (infoHash, deleteData) =>
controllers.torrentList().deleteTorrent(infoHash, deleteData),
+ 'confirmDeleteAllTorrents': (deleteData) =>
+ controllers.torrentList().confirmDeleteAllTorrents(deleteData),
+ 'deleteAllTorrents': (deleteData) =>
+ controllers.torrentList().deleteAllTorrents(deleteData),
'toggleSelectTorrent': (infoHash) =>
controllers.torrentList().toggleSelectTorrent(infoHash),
'openTorrentContextMenu': (infoHash) =>
diff --git a/src/renderer/pages/app.js b/src/renderer/pages/app.js
index 5d9ec807..0184735b 100644
--- a/src/renderer/pages/app.js
+++ b/src/renderer/pages/app.js
@@ -24,7 +24,9 @@ const Modals = {
),
'remove-torrent-modal': createGetter(() => require('../components/remove-torrent-modal')),
'update-available-modal': createGetter(() => require('../components/update-available-modal')),
- 'unsupported-media-modal': createGetter(() => require('../components/unsupported-media-modal'))
+ 'unsupported-media-modal': createGetter(() => require('../components/unsupported-media-modal')),
+ 'delete-all-torrents-modal':
+ createGetter(() => require('../components/delete-all-torrents-modal'))
}
const fontFamily = process.platform === 'win32'