| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const ws = require('./ws.js'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // taskId => TaskContext
 | 
					
						
							|  |  |  | const taskContexts = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TaskContext { | 
					
						
							|  |  |  |     constructor(taskId, taskType, data) { | 
					
						
							|  |  |  |         this.taskId = taskId; | 
					
						
							|  |  |  |         this.taskType = taskType; | 
					
						
							|  |  |  |         this.data = data; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // progressCount is meant to represent just some progress - to indicate the task is not stuck
 | 
					
						
							| 
									
										
										
										
											2020-01-04 21:59:28 +01:00
										 |  |  |         this.progressCount = -1; // we're incrementing immediatelly
 | 
					
						
							|  |  |  |         this.lastSentCountTs = 0; // 0 will guarantee first message will be sent
 | 
					
						
							| 
									
										
										
										
											2020-01-04 21:24:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         // just the fact this has been initialized is a progress which should be sent to clients
 | 
					
						
							|  |  |  |         // this is esp. important when importing big files/images which take long time to upload/process
 | 
					
						
							|  |  |  |         // which means that first "real" increaseProgressCount() will be called quite late and user is without
 | 
					
						
							|  |  |  |         // feedback until then
 | 
					
						
							|  |  |  |         this.increaseProgressCount(); | 
					
						
							| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** @return {TaskContext} */ | 
					
						
							| 
									
										
										
										
											2019-10-18 23:19:16 +02:00
										 |  |  |     static getInstance(taskId, taskType, data) { | 
					
						
							| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  |         if (!taskContexts[taskId]) { | 
					
						
							| 
									
										
										
										
											2019-10-18 23:19:16 +02:00
										 |  |  |             taskContexts[taskId] = new TaskContext(taskId, taskType, data); | 
					
						
							| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return taskContexts[taskId]; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 18:42:22 +01:00
										 |  |  |     increaseProgressCount() { | 
					
						
							| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  |         this.progressCount++; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (Date.now() - this.lastSentCountTs >= 300) { | 
					
						
							|  |  |  |             this.lastSentCountTs = Date.now(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 18:42:22 +01:00
										 |  |  |             ws.sendMessageToAllClients({ | 
					
						
							| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  |                 type: 'task-progress-count', | 
					
						
							|  |  |  |                 taskId: this.taskId, | 
					
						
							|  |  |  |                 taskType: this.taskType, | 
					
						
							| 
									
										
										
										
											2019-10-19 09:58:18 +02:00
										 |  |  |                 data: this.data, | 
					
						
							| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  |                 progressCount: this.progressCount | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 18:42:22 +01:00
										 |  |  |     reportError(message) { | 
					
						
							|  |  |  |         ws.sendMessageToAllClients({ | 
					
						
							| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  |             type: 'task-error', | 
					
						
							|  |  |  |             taskId: this.taskId, | 
					
						
							|  |  |  |             taskType: this.taskType, | 
					
						
							| 
									
										
										
										
											2019-10-19 09:58:18 +02:00
										 |  |  |             data: this.data, | 
					
						
							| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  |             message: message | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 18:42:22 +01:00
										 |  |  |     taskSucceeded(result) { | 
					
						
							|  |  |  |         ws.sendMessageToAllClients({ | 
					
						
							| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  |             type: 'task-succeeded', | 
					
						
							|  |  |  |             taskId: this.taskId, | 
					
						
							|  |  |  |             taskType: this.taskType, | 
					
						
							| 
									
										
										
										
											2019-10-19 09:58:18 +02:00
										 |  |  |             data: this.data, | 
					
						
							| 
									
										
										
										
											2019-10-19 00:11:07 +02:00
										 |  |  |             result: result | 
					
						
							| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  |         }); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = TaskContext; |