diff --git a/src/renderer/controllers/torrent-list-controller.js b/src/renderer/controllers/torrent-list-controller.js index 2cb8bb82..66abfbcf 100644 --- a/src/renderer/controllers/torrent-list-controller.js +++ b/src/renderer/controllers/torrent-list-controller.js @@ -291,6 +291,16 @@ module.exports = class TorrentListController { enabled: torrentSummary.torrentFileName != null })) + menu.append(new electron.remote.MenuItem({ + type: 'separator' + })) + + const sortedByName = this.state.saved.prefs.sortByName + menu.append(new electron.remote.MenuItem({ + label: `${sortedByName ? '✓ ' : ''}Sort by Name`, + click: () => dispatch('updatePreferences', 'sortByName', !sortedByName) + })) + menu.popup({ window: electron.remote.getCurrentWindow() }) } diff --git a/src/renderer/pages/torrent-list-page.js b/src/renderer/pages/torrent-list-page.js index 286e9acf..58425bca 100644 --- a/src/renderer/pages/torrent-list-page.js +++ b/src/renderer/pages/torrent-list-page.js @@ -284,10 +284,17 @@ module.exports = class TorrentList extends React.Component { ) } else { // We do know the files. List them and show download stats for each one - const fileRows = torrentSummary.files + const sortByName = this.props.state.saved.prefs.sortByName + const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }) + let fileRows = torrentSummary.files .filter((file) => !file.path.includes('/.____padding_file/')) .map((file, index) => ({ file, index })) - .map((object) => this.renderFileRow(torrentSummary, object.file, object.index)) + + if (sortByName) { + fileRows = fileRows.sort((a, b) => collator.compare(a.file.name, b.file.name)) + } + + fileRows = fileRows.map((obj) => this.renderFileRow(torrentSummary, obj.file, obj.index)) filesElement = (