From b7fedb19833446e0fa37c6de151f9af983b5cd17 Mon Sep 17 00:00:00 2001 From: Sharon Grossman Date: Tue, 26 Sep 2017 18:39:43 +0300 Subject: [PATCH] feat(delete-all-torrents): added remove all torrents capability to the Transfers menu --- src/main/menu.js | 8 +++++ .../components/delete-all-torrents-modal.js | 30 +++++++++++++++++++ .../controllers/torrent-list-controller.js | 27 +++++++++++++++++ src/renderer/main.js | 4 +++ src/renderer/pages/app.js | 4 ++- 5 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 src/renderer/components/delete-all-torrents-modal.js 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 ( +
+

{message}

+ +
+ ) + + 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'