Add "Show in Folder" to context menu

Based on @watson's PR #463.

Differences:

- Remove the "Open Folder" link from expanded torrent view.
- Use showItemInFolder instead of openItem electron API
- Add a separator
- Use IPC to invoke electron.shell.showItemInFolder from main process
This commit is contained in:
Feross Aboukhadijeh
2016-05-09 01:31:41 +02:00
parent 8ebb2349dd
commit facb07cbb1
3 changed files with 29 additions and 24 deletions

View File

@@ -70,10 +70,15 @@ function init () {
})
ipcMain.on('openItem', function (e, path) {
log('opening file or folder: ' + path)
log('open item: ' + path)
electron.shell.openItem(path)
})
ipcMain.on('showItemInFolder', function (e, path) {
log('show item in folder: ' + path)
electron.shell.showItemInFolder(path)
})
ipcMain.on('blockPowerSave', blockPowerSave)
ipcMain.on('unblockPowerSave', unblockPowerSave)

View File

@@ -226,9 +226,6 @@ function dispatch (action, ...args) {
if (action === 'openFile') {
openFile(args[0] /* infoHash */, args[1] /* index */)
}
if (action === 'openFolder') {
openFolder(args[0] /* infoHash */)
}
if (action === 'toggleTorrent') {
toggleTorrent(args[0] /* infoHash */)
}
@@ -956,17 +953,6 @@ function openFile (infoHash, index) {
ipcRenderer.send('openItem', filePath)
}
function openFolder (infoHash) {
var torrentSummary = getTorrentSummary(infoHash)
var firstFilePath = path.join(
torrentSummary.path,
torrentSummary.files[0].path)
var folderPath = path.dirname(firstFilePath)
ipcRenderer.send('openItem', folderPath)
}
// TODO: use torrentKey, not infoHash
function toggleTorrent (infoHash) {
var torrentSummary = getTorrentSummary(infoHash)
@@ -1001,9 +987,20 @@ function toggleSelectTorrent (infoHash) {
function openTorrentContextMenu (infoHash) {
var torrentSummary = getTorrentSummary(infoHash)
var menu = new Menu()
if (torrentSummary.files) {
menu.append(new MenuItem({
label: process.platform === 'darwin' ? 'Show in Finder' : 'Show in Folder',
click: () => showItemInFolder(torrentSummary)
}))
menu.append(new MenuItem({
type: 'separator'
}))
}
menu.append(new MenuItem({
label: 'Save Torrent File As...',
click: () => saveTorrentFileAs(torrentSummary)
label: 'Copy Magnet Link to Clipboard',
click: () => clipboard.writeText(torrentSummary.magnetURI)
}))
menu.append(new MenuItem({
@@ -1012,13 +1009,21 @@ function openTorrentContextMenu (infoHash) {
}))
menu.append(new MenuItem({
label: 'Copy Magnet Link to Clipboard',
click: () => clipboard.writeText(torrentSummary.magnetURI)
label: 'Save Torrent File As...',
click: () => saveTorrentFileAs(torrentSummary)
}))
menu.popup(remote.getCurrentWindow())
}
function showItemInFolder (torrentSummary) {
var itemPath = path.join(torrentSummary.path, torrentSummary.files[0].path)
if (torrentSummary.files.length > 1) {
itemPath = path.dirname(itemPath)
}
ipcRenderer.send('showItemInFolder', itemPath)
}
function saveTorrentFileAs (torrentSummary) {
var newFileName = `${path.parse(torrentSummary.name).name}.torrent`
var opts = {

View File

@@ -167,7 +167,6 @@ function TorrentList (state) {
// Show files, per-file download status and play buttons, and so on
function renderTorrentDetails (torrentSummary) {
var infoHash = torrentSummary.infoHash
var filesElement
if (!torrentSummary.files) {
// We don't know what files this torrent contains
@@ -182,10 +181,6 @@ function TorrentList (state) {
filesElement = hx`
<div class='files'>
<strong>Files</strong>
<span class='open-folder'
onclick=${dispatcher('openFolder', infoHash)}>
Open folder
</span>
<table>
${fileRows}
</table>