Skip to content
This repository was archived by the owner on Sep 13, 2023. It is now read-only.

Commit a9091f5

Browse files
aspencerlauthieb
authored andcommitted
fix(bug): #59 - issue with periods in filenames (#68)
Closes #59 Resolves issue with disallowed nedb characters. Noticed that this was broken on update as well, so created a method in `converter` to convert a file into a nedb-compatible key. This ballooned a bit more than I expected. Hopefully everything fits convention - please let me know if there's something I need to change.
1 parent 07ec7ba commit a9091f5

File tree

3 files changed

+29
-24
lines changed

3 files changed

+29
-24
lines changed

src/renderer/components/modals/create-note-modal/CreateNoteModal.vue

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -51,26 +51,18 @@ export default {
5151
...mapActions(['addNote']),
5252
createNote() {
5353
if (!this.containsDupFiles()) {
54-
let separator = '-';
55-
let prefix = 'note';
54+
const noteType = this.getNoteType();
5655
57-
if (this.gistsSelected) {
58-
separator = '.';
59-
prefix = 'gist';
60-
}
61-
62-
let name;
6356
this.files.forEach((file, i) => {
64-
name = file.name || `${prefix}file${i + 1}`;
65-
this.note.files[
66-
`${name}${separator}${converter.languageToExtension(file.language)}`
67-
] = file;
57+
const filename = file.name || `${noteType}file${i + 1}`;
58+
const key = converter.filenameToKey(filename, file.language, noteType);
59+
this.note.files[key] = file;
6860
});
6961
this.note.createdAt = new Date();
7062
this.note.updatedAt = new Date();
7163
7264
if (!this.note.name || this.note.name.trim() === '') {
73-
this.note.name = `${prefix}:${generateNoteName()}`;
65+
this.note.name = `${noteType}:${generateNoteName()}`;
7466
}
7567
7668
this.addNote(this.note).then(() => {
@@ -95,9 +87,7 @@ export default {
9587
let dupFiles = false;
9688
9789
this.files.forEach(file => {
98-
const key = `${file.name}.${converter.languageToExtension(
99-
file.language
100-
)}`;
90+
const key = converter.filenameToKey(file.name, file.language, this.getNoteType());
10191
10292
if (map.has(key)) {
10393
dupFiles = true;
@@ -108,6 +98,9 @@ export default {
10898
10999
return dupFiles;
110100
},
101+
getNoteType() {
102+
return (this.gistsSelected) ? 'gist' : 'note';
103+
},
111104
},
112105
computed: {
113106
...mapGetters(['gistsSelected']),

src/renderer/components/modals/update-note-modal/UpdateNoteModal.vue

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,7 @@ export default {
5959
});
6060
6161
this.gistFiles.forEach((file, index) => {
62-
const key = `${
63-
this.gistFiles[index].name
64-
}.${converter.languageToExtension(this.gistFiles[index].language)}`;
62+
const key = converter.filenameToKey(file.name, file.language, this.getNoteType());
6563
6664
if (file.deleted) {
6765
this.noteUpdated.files[key] = null;
@@ -82,7 +80,8 @@ export default {
8280
});
8381
} else {
8482
this.files.forEach(file => {
85-
this.noteUpdated.files[file.name] = file;
83+
const key = converter.filenameToKey(file.name, file.language, this.getNoteType());
84+
this.noteUpdated.files[key] = file;
8685
});
8786
this.noteUpdated.updatedAt = new Date();
8887
}
@@ -119,10 +118,7 @@ export default {
119118
let dupFiles = false;
120119
121120
this.files.forEach(file => {
122-
const key = `${file.name}.${converter.languageToExtension(
123-
file.language
124-
)}`;
125-
121+
const key = converter.filenameToKey(file.name, file.language, this.getNoteType());
126122
if (map.has(key)) {
127123
dupFiles = true;
128124
}
@@ -132,6 +128,9 @@ export default {
132128
133129
return dupFiles;
134130
},
131+
getNoteType() {
132+
return (this.gistsSelected) ? 'gist' : 'note';
133+
},
135134
},
136135
computed: {
137136
...mapGetters(['gistsSelected']),

src/renderer/converter.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
11
import languages from './assets/data/languages';
22

33
const converter = {
4+
filenameToKey(filename, language, type = 'note') {
5+
// Build separator by type
6+
const separator = (type === 'gist') ? '.' : '-';
7+
8+
// Sanitize name for disallowed nedb characters
9+
// list of disallowed characters taken from https://github.com/louischatriot/nedb/issues/477
10+
let name = filename;
11+
if (type === 'note' && typeof name === 'string') {
12+
name = name.replace(/[.$]/, '_');
13+
}
14+
15+
return `${name}${separator}${this.languageToExtension(language)}`;
16+
},
417
languageToExtension(language) {
518
if (languages.filter(l => l.name === language).length > 0) {
619
return languages.filter(l => l.name === language)[0].extension;

0 commit comments

Comments
 (0)