From 2aa2f0de19bf6bac326983302f4e0ec7edf8d6cd Mon Sep 17 00:00:00 2001 From: Egor Yurtaev Date: Sat, 24 Jun 2017 22:09:42 +0600 Subject: [PATCH 1/5] Sort files alphanumerically #1185 --- package.json | 1 + src/renderer/pages/torrent-list-page.js | 3 +++ 2 files changed, 4 insertions(+) diff --git a/package.json b/package.json index fe5820cc..a9045165 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "material-ui": "^0.17.0", "mkdirp": "^0.5.1", "musicmetadata": "^2.0.2", + "natsort": "^1.0.6", "network-address": "^1.1.0", "parse-torrent": "^5.7.3", "prettier-bytes": "^1.0.1", diff --git a/src/renderer/pages/torrent-list-page.js b/src/renderer/pages/torrent-list-page.js index 18936209..7eaaed2d 100644 --- a/src/renderer/pages/torrent-list-page.js +++ b/src/renderer/pages/torrent-list-page.js @@ -1,5 +1,6 @@ const React = require('react') const prettyBytes = require('prettier-bytes') +const natsort = require('natsort') const Checkbox = require('material-ui/Checkbox').default const LinearProgress = require('material-ui/LinearProgress').default @@ -278,9 +279,11 @@ module.exports = class TorrentList extends React.Component { ) } else { // We do know the files. List them and show download stats for each one + const sorter = natsort() const fileRows = torrentSummary.files .filter((file) => !file.path.includes('/.____padding_file/')) .map((file, index) => ({ file, index })) + .sort((a, b) => sorter(a.file.name, b.file.name)) .map((object) => this.renderFileRow(torrentSummary, object.file, object.index)) filesElement = ( From 2466b2e0a6c5f1560caf8631d4cf6525cd3b8946 Mon Sep 17 00:00:00 2001 From: David Ernst Date: Sat, 4 May 2019 22:39:27 -0700 Subject: [PATCH 2/5] Add context menu option to toggle Sort by Name --- src/renderer/controllers/torrent-list-controller.js | 10 ++++++++++ src/renderer/pages/torrent-list-page.js | 11 ++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/renderer/controllers/torrent-list-controller.js b/src/renderer/controllers/torrent-list-controller.js index e32cfcbc..6113dfec 100644 --- a/src/renderer/controllers/torrent-list-controller.js +++ b/src/renderer/controllers/torrent-list-controller.js @@ -279,6 +279,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(electron.remote.getCurrentWindow()) } diff --git a/src/renderer/pages/torrent-list-page.js b/src/renderer/pages/torrent-list-page.js index 76eb003b..ae6991ae 100644 --- a/src/renderer/pages/torrent-list-page.js +++ b/src/renderer/pages/torrent-list-page.js @@ -279,12 +279,17 @@ module.exports = class TorrentList extends React.Component { ) } else { // We do know the files. List them and show download stats for each one + const sortByName = this.props.state.saved.prefs.sortByName const sorter = natsort() - const fileRows = torrentSummary.files + let fileRows = torrentSummary.files .filter((file) => !file.path.includes('/.____padding_file/')) .map((file, index) => ({ file, index })) - .sort((a, b) => sorter(a.file.name, b.file.name)) - .map((object) => this.renderFileRow(torrentSummary, object.file, object.index)) + + if (sortByName) { + fileRows = fileRows.sort((a, b) => sorter(a.file.name, b.file.name)) + } + + fileRows = fileRows.map((object) => this.renderFileRow(torrentSummary, object.file, object.index)) filesElement = (
From ca97413b7603491d93eafea45ffb4064df0486ab Mon Sep 17 00:00:00 2001 From: David Ernst Date: Mon, 6 May 2019 16:00:23 -0700 Subject: [PATCH 3/5] Update package-lock.json for natsort --- package-lock.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/package-lock.json b/package-lock.json index adb956d7..9cd37a87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6540,6 +6540,11 @@ "integrity": "sha512-dndRmy03JQEN+Nh6WjQl7/OstIozeEmrtWe4TE7mEqJ8W8oMD8m2tHjsLPWt//e3hLAeRSbs4pxMyc5pk/nCkQ==", "optional": true }, + "natsort": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/natsort/-/natsort-1.0.6.tgz", + "integrity": "sha1-/U9GMfrH9Yhap39x/VWidC2U6zI=" + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", From aab918ff1af4accf7d7e5a899f48e2c15e43726f Mon Sep 17 00:00:00 2001 From: David Ernst Date: Mon, 6 May 2019 16:23:50 -0700 Subject: [PATCH 4/5] Fix lint error (Line >100 chars) --- src/renderer/pages/torrent-list-page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/pages/torrent-list-page.js b/src/renderer/pages/torrent-list-page.js index ae6991ae..ab240364 100644 --- a/src/renderer/pages/torrent-list-page.js +++ b/src/renderer/pages/torrent-list-page.js @@ -289,7 +289,7 @@ module.exports = class TorrentList extends React.Component { fileRows = fileRows.sort((a, b) => sorter(a.file.name, b.file.name)) } - fileRows = fileRows.map((object) => this.renderFileRow(torrentSummary, object.file, object.index)) + fileRows = fileRows.map((obj) => this.renderFileRow(torrentSummary, obj.file, obj.index)) filesElement = (
From 185f5ec30b9da5ca82325e8d5d81593e09eaf77a Mon Sep 17 00:00:00 2001 From: David Ernst Date: Wed, 5 Feb 2020 09:17:58 -0800 Subject: [PATCH 5/5] Remove unnecessary natsort dep --- package-lock.json | 5 ----- package.json | 1 - src/renderer/pages/torrent-list-page.js | 5 ++--- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9cd37a87..adb956d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6540,11 +6540,6 @@ "integrity": "sha512-dndRmy03JQEN+Nh6WjQl7/OstIozeEmrtWe4TE7mEqJ8W8oMD8m2tHjsLPWt//e3hLAeRSbs4pxMyc5pk/nCkQ==", "optional": true }, - "natsort": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/natsort/-/natsort-1.0.6.tgz", - "integrity": "sha1-/U9GMfrH9Yhap39x/VWidC2U6zI=" - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", diff --git a/package.json b/package.json index 338b9d3b..ffb08d85 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,6 @@ "material-ui": "^0.20.2", "mkdirp": "^0.5.1", "music-metadata": "^3.6.1", - "natsort": "^1.0.6", "network-address": "^1.1.0", "parse-torrent": "^6.0.1", "prettier-bytes": "^1.0.1", diff --git a/src/renderer/pages/torrent-list-page.js b/src/renderer/pages/torrent-list-page.js index ab240364..385541e1 100644 --- a/src/renderer/pages/torrent-list-page.js +++ b/src/renderer/pages/torrent-list-page.js @@ -1,6 +1,5 @@ const React = require('react') const prettyBytes = require('prettier-bytes') -const natsort = require('natsort') const Checkbox = require('material-ui/Checkbox').default const LinearProgress = require('material-ui/LinearProgress').default @@ -280,13 +279,13 @@ module.exports = class TorrentList extends React.Component { } else { // We do know the files. List them and show download stats for each one const sortByName = this.props.state.saved.prefs.sortByName - const sorter = natsort() + 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 })) if (sortByName) { - fileRows = fileRows.sort((a, b) => sorter(a.file.name, b.file.name)) + fileRows = fileRows.sort((a, b) => collator.compare(a.file.name, b.file.name)) } fileRows = fileRows.map((obj) => this.renderFileRow(torrentSummary, obj.file, obj.index))