From f120318cfa9b1f632d98f3f8e982e2bc28fcb3fc Mon Sep 17 00:00:00 2001
From: Alex ORLUC <alex.orluc@maarch.org>
Date: Mon, 20 Jul 2020 14:59:32 +0200
Subject: [PATCH] FIX #14463 TIME 0:10 save main doc after edit in java

---
 .../app/viewer/document-viewer.component.ts   | 80 ++++++++++---------
 1 file changed, 44 insertions(+), 36 deletions(-)

diff --git a/src/frontend/app/viewer/document-viewer.component.ts b/src/frontend/app/viewer/document-viewer.component.ts
index b4f92149330..a28831d2098 100755
--- a/src/frontend/app/viewer/document-viewer.component.ts
+++ b/src/frontend/app/viewer/document-viewer.component.ts
@@ -1,10 +1,10 @@
-import {Component, OnInit, Input, ViewChild, EventEmitter, Output, ElementRef} from '@angular/core';
+import { Component, OnInit, Input, ViewChild, EventEmitter, Output, ElementRef } from '@angular/core';
 import { HttpClient, HttpEventType } from '@angular/common/http';
 import { LANG } from '../translate.component';
 import { NotificationService } from '../../service/notification/notification.service';
 import { HeaderService } from '../../service/header.service';
 import { AppService } from '../../service/app.service';
-import {tap, catchError, filter, map, exhaustMap, take} from 'rxjs/operators';
+import { tap, catchError, filter, map, exhaustMap, take, finalize } from 'rxjs/operators';
 import { ConfirmComponent } from '../../plugins/modal/confirm.component';
 import { MatDialogRef, MatDialog } from '@angular/material/dialog';
 import { AlertComponent } from '../../plugins/modal/alert.component';
@@ -17,8 +17,7 @@ import { DocumentViewerModalComponent } from './modal/document-viewer-modal.comp
 import { PrivilegeService } from '../../service/privileges.service';
 import { VisaWorkflowModalComponent } from '../visa/modal/visa-workflow-modal.component';
 import { of } from 'rxjs/internal/observable/of';
-import {CollaboraOnlineViewerComponent} from '../../plugins/collabora-online/collabora-online-viewer.component';
-
+import { CollaboraOnlineViewerComponent } from '../../plugins/collabora-online/collabora-online-viewer.component';
 
 @Component({
     selector: 'app-document-viewer',
@@ -235,38 +234,42 @@ export class DocumentViewerComponent implements OnInit {
     }
 
     loadTmpFile(filenameOnTmp: string) {
-        this.loading = true;
-        this.loadingInfo.mode = 'determinate';
+        return new Promise((resolve, reject) => {
+            this.loading = true;
+            this.loadingInfo.mode = 'determinate';
 
-        this.requestWithLoader(`../rest/convertedFile/${filenameOnTmp}?convert=true`).subscribe(
-            (data: any) => {
-                if (data.encodedResource) {
-                    this.file = {
-                        name: filenameOnTmp,
-                        format: data.extension,
-                        type: data.type,
-                        contentMode: 'base64',
-                        content: data.encodedResource,
-                        src: data.encodedConvertedResource !== undefined ? this.base64ToArrayBuffer(data.encodedConvertedResource) : null
-                    };
-                    this.editMode = true;
-                    this.triggerEvent.emit();
-                    if (data.encodedConvertedResource !== undefined) {
-                        this.noConvertedFound = false;
-                    } else {
-                        this.noConvertedFound = true;
-                        this.notify.error(data.convertedResourceErrors);
+            this.requestWithLoader(`../rest/convertedFile/${filenameOnTmp}?convert=true`).subscribe(
+                (data: any) => {
+                    if (data.encodedResource) {
+                        this.file = {
+                            name: filenameOnTmp,
+                            format: data.extension,
+                            type: data.type,
+                            contentMode: 'base64',
+                            content: data.encodedResource,
+                            src: data.encodedConvertedResource !== undefined ? this.base64ToArrayBuffer(data.encodedConvertedResource) : null
+                        };
+                        this.editMode = true;
+                        this.triggerEvent.emit();
+                        if (data.encodedConvertedResource !== undefined) {
+                            this.noConvertedFound = false;
+                        } else {
+                            this.noConvertedFound = true;
+                            this.notify.error(data.convertedResourceErrors);
+                        }
+                        this.loading = false;
+                        resolve(true);
                     }
+                },
+                (err: any) => {
+                    this.noConvertedFound = true;
+                    this.notify.handleErrors(err);
                     this.loading = false;
+                    resolve(true);
+                    return of(false);
                 }
-            },
-            (err: any) => {
-                this.noConvertedFound = true;
-                this.notify.handleErrors(err);
-                this.loading = false;
-                return of(false);
-            }
-        );
+            );
+        });
     }
 
     uploadTrigger(fileInput: any) {
@@ -863,11 +866,14 @@ export class DocumentViewerComponent implements OnInit {
     checkLockFile(id: string, extension: string) {
         this.intervalLockFile = setInterval(() => {
             this.http.get('../rest/jnlp/lock/' + id)
-                .subscribe((data: any) => {
+                .subscribe(async (data: any) => {
                     if (!data.lockFileFound) {
                         this.editInProgress = false;
                         clearInterval(this.intervalLockFile);
-                        this.loadTmpFile(`${data.fileTrunk}.${extension}`);
+                        await this.loadTmpFile(`${data.fileTrunk}.${extension}`);
+                        if (this.mode === 'mainDocument') {
+                            this.saveMainDocument();
+                        }
                     }
                 });
         }, 1000);
@@ -1040,13 +1046,14 @@ export class DocumentViewerComponent implements OnInit {
     }
 
     saveMainDocument() {
+        this.loading = true;
         return new Promise((resolve) => {
             this.getFile().pipe(
                 map((data: any) => {
                     const formatdatas = {
                         encodedFile: data.content,
-                        format:      data.format,
-                        resId:       this.resId
+                        format: data.format,
+                        resId: this.resId
                     };
                     return formatdatas;
                 }),
@@ -1056,6 +1063,7 @@ export class DocumentViewerComponent implements OnInit {
                     this.loadRessource(this.resId);
                     resolve(true);
                 }),
+                finalize(() => this.loading = false),
                 catchError((err: any) => {
                     this.notify.handleSoftErrors(err);
                     resolve(false);
-- 
GitLab