diff --git a/client/src/components/NoteInputPanel.vue b/client/src/components/NoteInputPanel.vue index ce222ac..4b6c103 100644 --- a/client/src/components/NoteInputPanel.vue +++ b/client/src/components/NoteInputPanel.vue @@ -54,8 +54,6 @@ -
@@ -265,7 +266,7 @@ updated: '', shareUsername: null, diffNoteText: '', - statusText: 'Saved.', + statusText: 'saved', lastNoteHash: null, saveDebounce: null, //Prevent save from being called numerous times quickly updated: 'Never', @@ -1035,7 +1036,7 @@ }, onKeyup(){ - this.statusText = 'Modded' + this.statusText = 'modified' // this.diffText() @@ -1063,7 +1064,7 @@ const currentNoteText = this.getText() const currentHash = this.hashString( currentNoteText ) if( this.lastNoteHash == currentHash){ - this.statusText = 'Saved.' + this.statusText = 'saved' return resolve(true) } @@ -1084,9 +1085,9 @@ // console.log('Save Hash', currentHash) - this.statusText = 'Saving' + this.statusText = 'saving' axios.post('/api/note/update', postData).then( response => { - this.statusText = 'Saved.' + this.statusText = 'saved' this.updated = Math.round((+new Date)/1000) this.modified = true @@ -1298,7 +1299,7 @@ background-color: var(--menu-accent); height: 15px; width: 1px; - margin: 0 3px; + margin: 0 1px; padding: 0; } @media only screen and (max-width: 740px) { diff --git a/client/src/pages/HomePage.vue b/client/src/pages/HomePage.vue index eb1d4c4..e155ffa 100644 --- a/client/src/pages/HomePage.vue +++ b/client/src/pages/HomePage.vue @@ -187,8 +187,8 @@
-

Search your data

-

Type in a word and find that same word but somewhere else

+

Secure Search

+

Keyword search using an encrypted search index helps you find what you need without compromising security

Hypercube of Solutions diff --git a/client/src/pages/NotesPage.vue b/client/src/pages/NotesPage.vue index 9b7cdfe..39d526f 100644 --- a/client/src/pages/NotesPage.vue +++ b/client/src/pages/NotesPage.vue @@ -218,7 +218,8 @@ 'sent': ['paper plane outline', 'Shared Notes'], 'notes': ['file','Notes'], 'highlights': ['paragraph', 'Found In Text'], - 'trashed': ['poop', 'Trashed Notes'] + 'trashed': ['poop', 'Trashed Notes'], + 'tagged': ['tag', 'Tagged'], }, noteSections: { pinned: [], @@ -227,7 +228,8 @@ sent:[], notes: [], highlights: [], - trashed: [] + trashed: [], + tagged:[], }, } @@ -241,7 +243,7 @@ //Do not update note if its open if(this.activeNoteId1 != noteId){ this.$store.dispatch('fetchAndUpdateUserTotals') - this.updateSingleNote(noteId) + this.updateSingleNote(noteId, false) } }) @@ -249,7 +251,7 @@ //Do not update note if its open if(this.activeNoteId1 != noteId){ this.$store.dispatch('fetchAndUpdateUserTotals') - this.updateSingleNote(noteId) + this.updateSingleNote(noteId, false) } }) @@ -258,7 +260,7 @@ //Do not update note if its open if(this.activeNoteId1 != noteId){ - this.updateSingleNote(noteId) + this.updateSingleNote(noteId, false) } }) @@ -481,7 +483,7 @@ }, // @TODO Don't even trigger this if the note wasn't changed - updateSingleNote(noteId){ + updateSingleNote(noteId, focuseAndAnimate = true){ noteId = parseInt(noteId) @@ -539,7 +541,7 @@ this.$nextTick( () => { //Trigger close animation on note - if(this.$refs['note-'+noteId] && this.$refs['note-'+noteId][0]){ + if(this.$refs['note-'+noteId] && this.$refs['note-'+noteId][0] && focuseAndAnimate){ this.$refs['note-'+noteId][0].justClosed() } }) @@ -662,6 +664,11 @@ //Sort notes into defined sections notes.forEach(note => { + if(this.searchTags.length >= 1){ + this.noteSections.tagged.push(note) + return + } + //Only show trashed notes when trashed if(this.fastFilters.onlyShowTrashed == 1){ @@ -725,7 +732,7 @@ this.fastFilters = {} this.updateFastFilters(5) this.foundAttachments = [] //Remove all attachments - // this.$bus.$emit('reset_fast_filters') + this.$bus.$emit('reset_fast_filters') //Load initial batch, then tags, then other batch this.search(true, this.firstLoadBatchSize) @@ -733,9 +740,6 @@ //Load a larger batch once first batch has loaded return this.search(false, this.batchSize, true) }) - .then( i => { - //Thats how you promise chain - }) }, updateFastFilters(index){ diff --git a/server/index.js b/server/index.js index a20ac03..b040c57 100644 --- a/server/index.js +++ b/server/index.js @@ -136,7 +136,7 @@ app.use(function(req, res, next){ // Test Area -const printResults = true +const printResults = false let UserTest = require('@models/User') let NoteTest = require('@models/Note') UserTest.keyPairTest('genMan2', '1', printResults) diff --git a/server/models/Attachment.js b/server/models/Attachment.js index c3ae14a..2bc99e8 100644 --- a/server/models/Attachment.js +++ b/server/models/Attachment.js @@ -138,11 +138,8 @@ Attachment.delete = (userId, attachmentId, urlDelete = false) => { .then((rows, fields) => { - noteExists = (rows[0]['exists'] > 0) + noteExists = (rows[0][0]['exists'] > 0) - - - let url = attachment.url const noteId = attachment.note_id @@ -158,18 +155,16 @@ Attachment.delete = (userId, attachmentId, urlDelete = false) => { if(attachment.attachment_type == 1 && !urlDelete && noteExists){ db.promise() .query(`UPDATE attachment SET visible = 0 WHERE id = ?`, [attachmentId]) - .then((rows, fields) => { }) + .then((rows, fields) => resolve(true)) .catch(console.log) return resolve(true) + } else { + db.promise() + .query(`DELETE FROM attachment WHERE id = ?`, [attachmentId]) + .then((rows, fields) => resolve(true)) + .catch(console.log) } - - db.promise() - .query(`DELETE FROM attachment WHERE id = ?`, [attachmentId]) - .then((rows, fields) => { }) - .catch(console.log) - - return resolve(true) }) }) } diff --git a/server/models/Note.js b/server/models/Note.js index 5f42d2e..ecb7047 100644 --- a/server/models/Note.js +++ b/server/models/Note.js @@ -299,7 +299,7 @@ Note.reindex = (userId, masterKey, removeId = null) => { return db.promise().query(` SELECT note.id, text, salt, encrypted_share_password_key FROM note JOIN note_raw_text ON note.note_raw_text_id = note_raw_text.id - WHERE indexed = 0 AND salt IS NOT NULL + WHERE indexed = 0 AND salt IS NOT NULL AND trashed = 0 AND user_id = ? LIMIT 100`, [userId]) }) @@ -610,7 +610,7 @@ Note.setArchived = (userId, noteId, archivedBoolead) => { }) } -Note.setTrashed = (userId, noteId, trashedBoolean) => { +Note.setTrashed = (userId, noteId, trashedBoolean, masterKey) => { return new Promise((resolve, reject) => { const trashed = trashedBoolean ? 1:0 @@ -618,9 +618,18 @@ Note.setTrashed = (userId, noteId, trashedBoolean) => { //Update other note attributes return db.promise() - .query('UPDATE note JOIN note_raw_text ON note_raw_text_id = note_raw_text.id SET trashed = ?, updated = ? WHERE note.id = ? AND user_id = ?', + .query('UPDATE note JOIN note_raw_text ON note_raw_text_id = note_raw_text.id SET trashed = ?, updated = ?, indexed = 0 WHERE note.id = ? AND user_id = ?', [trashed, now, noteId, userId]) .then((rows, fields) => { + + const removeFromIndex = [] + if(trashed){ + //Remove note from index + removeFromIndex.push(noteId) + } + Note.reindex(userId, masterKey, removeFromIndex) + + SocketIo.to(userId).emit('note_attribute_modified', noteId) resolve(true) }) @@ -1016,12 +1025,16 @@ Note.search = (userId, searchQuery, searchTags, fastFilters, masterKey) => { //If tags are passed, use those tags in search if(searchTags.length > 0){ searchParams.push(searchTags) - noteSearchQuery += ' AND note_tag.tag_id IN (?)' + noteSearchQuery += ' AND note_tag.tag_id IN (?) AND note.trashed = 0' + searchAllNotes = true } + + //Show archived notes, only if fast filter is set, default to not archived if(searchAllNotes == false){ + //Default set of filters for all notes if(fastFilters.notesHome == 1){ noteSearchQuery += ' AND note.archived = 0 AND note.trashed = 0 AND note.share_user_id IS NULL' } diff --git a/server/models/Tag.js b/server/models/Tag.js index 7068a75..ac08360 100644 --- a/server/models/Tag.js +++ b/server/models/Tag.js @@ -17,7 +17,7 @@ Tag.userTags = (userId, searchQuery, searchTags, fastFilters) => { FROM tag JOIN note_tag ON tag.id = note_tag.tag_id JOIN note ON note.id = note_tag.note_id - WHERE note_tag.user_id = ? + WHERE note_tag.user_id = ? AND note.trashed = 0 ` query += ` GROUP BY tag.id diff --git a/server/routes/noteController.js b/server/routes/noteController.js index d024045..4e80eec 100644 --- a/server/routes/noteController.js +++ b/server/routes/noteController.js @@ -29,7 +29,7 @@ router.post('/get', function (req, res) { }) router.post('/delete', function (req, res) { - Note.delete(userId, req.body.noteId) + Note.delete(userId, req.body.noteId, masterKey) .then( data => res.send(data) ) }) @@ -82,7 +82,7 @@ router.post('/setarchived', function (req, res) { }) }) router.post('/settrashed', function (req, res) { - Note.setTrashed(userId, req.body.noteId, req.body.trashed) + Note.setTrashed(userId, req.body.noteId, req.body.trashed, masterKey) .then( results => { res.send(results) })