| 
									
										
										
										
											2018-04-18 00:26:42 -04:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 19:12:52 -04:00
										 |  |  | const noteCacheService = require('../../services/note_cache'); | 
					
						
							| 
									
										
										
										
											2018-07-26 16:05:09 +02:00
										 |  |  | const repository = require('../../services/repository'); | 
					
						
							| 
									
										
										
										
											2018-11-04 22:10:52 +01:00
										 |  |  | const log = require('../../services/log'); | 
					
						
							| 
									
										
										
										
											2018-12-12 21:28:38 +01:00
										 |  |  | const utils = require('../../services/utils'); | 
					
						
							|  |  |  | const optionService = require('../../services/options'); | 
					
						
							| 
									
										
										
										
											2018-04-18 00:26:42 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | async function getAutocomplete(req) { | 
					
						
							|  |  |  |     const query = req.query.query; | 
					
						
							| 
									
										
										
										
											2018-08-16 21:02:42 +02:00
										 |  |  |     const currentNoteId = req.query.currentNoteId || 'none'; | 
					
						
							| 
									
										
										
										
											2018-04-18 00:26:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-26 16:05:09 +02:00
										 |  |  |     let results; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-04 22:10:52 +01:00
										 |  |  |     const timestampStarted = Date.now(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-26 16:05:09 +02:00
										 |  |  |     if (query.trim().length === 0) { | 
					
						
							| 
									
										
										
										
											2018-08-16 21:02:42 +02:00
										 |  |  |         results = await getRecentNotes(currentNoteId); | 
					
						
							| 
									
										
										
										
											2018-07-26 16:05:09 +02:00
										 |  |  |     } | 
					
						
							|  |  |  |     else { | 
					
						
							| 
									
										
										
										
											2018-12-12 21:28:38 +01:00
										 |  |  |         results = await noteCacheService.findNotes(query); | 
					
						
							| 
									
										
										
										
											2018-07-26 16:05:09 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-04-18 00:26:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-04 22:10:52 +01:00
										 |  |  |     const msTaken = Date.now() - timestampStarted; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (msTaken >= 100) { | 
					
						
							|  |  |  |         log.info(`Slow autocomplete took ${msTaken}ms`); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-07 09:35:29 +01:00
										 |  |  |     return results; | 
					
						
							| 
									
										
										
										
											2018-04-18 00:26:42 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-16 21:02:42 +02:00
										 |  |  | async function getRecentNotes(currentNoteId) { | 
					
						
							| 
									
										
										
										
											2018-12-12 21:28:38 +01:00
										 |  |  |     let extraCondition = ''; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const hoistedNoteId = await optionService.getOption('hoistedNoteId'); | 
					
						
							|  |  |  |     if (hoistedNoteId !== 'root') { | 
					
						
							|  |  |  |         extraCondition = `AND recent_notes.notePath LIKE '%${utils.sanitizeSql(hoistedNoteId)}%'`; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-26 16:05:09 +02:00
										 |  |  |     const recentNotes = await repository.getEntities(`
 | 
					
						
							|  |  |  |       SELECT  | 
					
						
							|  |  |  |         recent_notes.*  | 
					
						
							|  |  |  |       FROM  | 
					
						
							|  |  |  |         recent_notes | 
					
						
							|  |  |  |         JOIN branches USING(branchId) | 
					
						
							|  |  |  |       WHERE | 
					
						
							|  |  |  |         recent_notes.isDeleted = 0 | 
					
						
							|  |  |  |         AND branches.isDeleted = 0 | 
					
						
							| 
									
										
										
										
											2018-08-16 21:02:42 +02:00
										 |  |  |         AND branches.noteId != ? | 
					
						
							| 
									
										
										
										
											2018-12-12 21:28:38 +01:00
										 |  |  |         ${extraCondition} | 
					
						
							| 
									
										
										
										
											2018-07-26 16:05:09 +02:00
										 |  |  |       ORDER BY  | 
					
						
							|  |  |  |         dateCreated DESC | 
					
						
							| 
									
										
										
										
											2018-08-16 21:02:42 +02:00
										 |  |  |       LIMIT 200`, [currentNoteId]);
 | 
					
						
							| 
									
										
										
										
											2018-07-26 16:05:09 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return recentNotes.map(rn => { | 
					
						
							| 
									
										
										
										
											2018-11-07 17:16:33 +01:00
										 |  |  |         const title = noteCacheService.getNoteTitleForPath(rn.notePath.split('/')); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-26 16:05:09 +02:00
										 |  |  |         return { | 
					
						
							|  |  |  |             path: rn.notePath, | 
					
						
							| 
									
										
										
										
											2018-11-07 17:16:33 +01:00
										 |  |  |             title: title, | 
					
						
							|  |  |  |             highlighted: title | 
					
						
							| 
									
										
										
										
											2018-07-26 16:05:09 +02:00
										 |  |  |         }; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-18 00:26:42 -04:00
										 |  |  | module.exports = { | 
					
						
							|  |  |  |     getAutocomplete | 
					
						
							|  |  |  | }; |