From 988673ace3642a1a978aa0474b7d3315fc4b4861 Mon Sep 17 00:00:00 2001
From: Eugen Ciur <eugen@papermerge.com>
Date: Sun, 5 Dec 2021 08:30:38 +0100
Subject: [PATCH] great realtime ocr status update!

---
 app/adapters/node.js              | 10 ++++++++-
 app/components/commander/index.js | 36 +++++++++++++++++++++++++++++++
 app/components/document/index.hbs | 12 ++++++++---
 3 files changed, 54 insertions(+), 4 deletions(-)

diff --git a/app/adapters/node.js b/app/adapters/node.js
index 7d5d3e8..12a8b0b 100644
--- a/app/adapters/node.js
+++ b/app/adapters/node.js
@@ -34,8 +34,16 @@ export default class NodeAdapter extends ApplicationAdapter {
     }
 
     node_ids = nodes.data.map(node => {
-      let normalized_node = this.store.normalize('node', node);
+      let normalized_node;
+
+      if (node.type === "folders") {
+        normalized_node = this.store.normalize('folder', node);
+      } else if (node.type === "Document") {
+        normalized_node = this.store.normalize('document', node);
+      }
+
       this.store.push(normalized_node);
+
       return node.id;
     });
 
diff --git a/app/components/commander/index.js b/app/components/commander/index.js
index d8cf35a..28df1f0 100644
--- a/app/components/commander/index.js
+++ b/app/components/commander/index.js
@@ -2,6 +2,7 @@ import Component from '@glimmer/component';
 import { tracked } from '@glimmer/tracking';
 import { A } from '@ember/array';
 import { action } from '@ember/object';
+import { inject as service } from '@ember/service';
 
 
 export default class CommanderComponent extends Component {
@@ -14,6 +15,10 @@ export default class CommanderComponent extends Component {
     is current panel displayed. @hint is "left" indicates that
     commander is displayed in left panel.
   */
+
+  @service websockets;
+  @service store;
+
   // show create new folder modal dialog?
   @tracked show_new_folder_modal = false;
 
@@ -34,6 +39,37 @@ export default class CommanderComponent extends Component {
   @tracked deleted_records = A([]);
   @tracked __deleted_records; // used as workaround for an ember bug
 
+  constructor(owner, args) {
+    super(owner, args);
+
+    this.websockets.addHandler(this.messageHandler, this);
+  }
+
+  messageHandler(message) {
+    let doc;
+
+    doc = this.store.peekRecord('document', message.document_id);
+    if (!doc) {
+      console.warn(`Document ID=${message.document_id} not found.`);
+      return;
+    }
+
+    switch (message.type) {
+      case 'ocrdocumenttask.taskreceived':
+        doc.ocr_status = 'received';
+        break;
+      case 'ocrdocumenttask.taskstarted':
+        doc.ocr_status = 'started';
+        break;
+      case 'ocrdocumenttask.tasksucceeded':
+        doc.ocr_status = 'succeeded';
+        break;
+      case 'ocrdocumenttask.taskfailed':
+        doc.ocr_status = 'failed';
+        break;
+      }  // end of switch
+  }
+
   @action
   openNewFolderModal() {
     this.show_new_folder_modal = true;
diff --git a/app/components/document/index.hbs b/app/components/document/index.hbs
index 0ab46ef..2c55f13 100644
--- a/app/components/document/index.hbs
+++ b/app/components/document/index.hbs
@@ -1,11 +1,17 @@
 <div class="node document {{if this.is_selected "checked"}}">
-
   <Input
     @type="checkbox"
     @checked={{this.is_selected}}
     {{on "change" this.onCheckboxChange}} />
   <div class="icon document"></div>
-  <div class="title">
-    {{yield}}
+
+  <div class="title d-flex flex-row align-items-center">
+    {{#if @model.ocr}}
+      <OcrStatus
+        @status={{@model.ocr_status}} />
+    {{/if}}
+    <div class="mx-2">
+      {{yield}}
+    </div>
   </div>
 </div>
\ No newline at end of file
-- 
GitLab