From 5314d9a7c3db8e23cd3be0b7f6fedf4b0cdbffa2 Mon Sep 17 00:00:00 2001
From: Geomitron <22552797+Geomitron@users.noreply.github.com>
Date: Wed, 27 May 2020 15:19:34 -0400
Subject: [PATCH] Added better invalid character replacements
---
package-lock.json | 10 +++++++++-
package.json | 2 ++
.../result-table/result-table.component.html | 2 +-
src/app/core/services/search.service.ts | 2 +-
src/electron/ipc/download/FileDownloader.ts | 1 -
src/electron/shared/UtilFunctions.ts | 19 +++++++++++++------
6 files changed, 26 insertions(+), 10 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index d118002..3244cb2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2212,6 +2212,15 @@
"integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==",
"dev": true
},
+ "@types/randombytes": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/randombytes/-/randombytes-2.0.0.tgz",
+ "integrity": "sha512-bz8PhAVlwN72vqefzxa14DKNT8jK/mV66CSjwdVQM/k3Th3EPKfUtdMniwZgMedQTFuywAsfjnZsg+pEnltaMA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
"@types/rimraf": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.0.tgz",
@@ -14468,7 +14477,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
"requires": {
"safe-buffer": "^5.1.0"
}
diff --git a/package.json b/package.json
index f8a34cd..13b8679 100644
--- a/package.json
+++ b/package.json
@@ -45,6 +45,7 @@
"needle": "^2.3.2",
"node-7z": "^2.0.5",
"node-unrar-js": "^0.8.1",
+ "randombytes": "^2.1.0",
"rimraf": "^3.0.2",
"rxjs": "~6.5.5",
"sanitize-filename": "^1.6.3",
@@ -63,6 +64,7 @@
"@types/mv": "^2.1.0",
"@types/needle": "^2.0.4",
"@types/node": "^12.11.1",
+ "@types/randombytes": "^2.0.0",
"@types/rimraf": "^3.0.0",
"@types/underscore": "^1.9.4",
"@typescript-eslint/eslint-plugin": "^2.19.2",
diff --git a/src/app/components/browse/result-table/result-table.component.html b/src/app/components/browse/result-table/result-table.component.html
index 24de5e7..1240993 100644
--- a/src/app/components/browse/result-table/result-table.component.html
+++ b/src/app/components/browse/result-table/result-table.component.html
@@ -1,6 +1,6 @@
-
+
diff --git a/src/app/core/services/search.service.ts b/src/app/core/services/search.service.ts
index 179bb3d..97eb8e7 100644
--- a/src/app/core/services/search.service.ts
+++ b/src/app/core/services/search.service.ts
@@ -11,7 +11,7 @@ export class SearchService {
private resultsChangedEmitter = new EventEmitter() // For when any results change
private newResultsEmitter = new EventEmitter() // For when a new search happens
private results: SongResult[] = []
- private awaitingResults = false // TODO: add loading icon below table when this is true
+ private awaitingResults = false
private currentQuery: SongSearch
private _allResultsVisible = true
diff --git a/src/electron/ipc/download/FileDownloader.ts b/src/electron/ipc/download/FileDownloader.ts
index bd3e449..a3dd7c4 100644
--- a/src/electron/ipc/download/FileDownloader.ts
+++ b/src/electron/ipc/download/FileDownloader.ts
@@ -2,7 +2,6 @@ import { AnyFunction } from '../../shared/UtilFunctions'
import { createWriteStream } from 'fs'
import * as needle from 'needle'
// TODO: replace needle with got (for cancel() method) (if before-headers event is possible?)
-// TODO: add download throttle library and setting
import { googleTimer } from './GoogleTimer'
import { DownloadError } from './ChartDownload'
diff --git a/src/electron/shared/UtilFunctions.ts b/src/electron/shared/UtilFunctions.ts
index cfee556..d788cc2 100644
--- a/src/electron/shared/UtilFunctions.ts
+++ b/src/electron/shared/UtilFunctions.ts
@@ -1,23 +1,30 @@
+import * as randomBytes from 'randombytes'
const sanitize = require('sanitize-filename')
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export type AnyFunction = (...args: any) => any
/**
- * @returns `filename`, but with any invalid filename characters replaced with similar valid characters.
+ * @returns `filename` with all invalid filename characters replaced.
*/
export function sanitizeFilename(filename: string): string {
- const newName = sanitize(filename, {
+ const newFilename = sanitize(filename, {
replacement: ((invalidChar: string) => {
switch (invalidChar) {
- case '/': return '-'
- case '\\': return '-'
+ case '<': return '❮'
+ case '>': return '❯'
+ case ':': return '꞉'
case '"': return "'"
- default: return '_' // TODO: add more cases for replacing invalid characters
+ case '/': return '/'
+ case '\\': return '⧵'
+ case '|': return '⏐'
+ case '?': return '?'
+ case '*': return '⁎'
+ default: return '_'
}
})
})
- return newName
+ return (newFilename == '' ? randomBytes(5).toString('hex') : newFilename)
}
/**