From 6a304df2e83e576e242814bbaca26be98f5963d8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Thuret?= <contact@sebastien-thuret.fr>
Date: Mon, 25 Oct 2021 10:50:55 +0200
Subject: [PATCH] add download link & auto download translated file

---
 app/app.py               | 10 ++++------
 app/static/js/app.js     | 35 +++++++++++++++++++++++++++++++++--
 app/templates/index.html |  3 ++-
 3 files changed, 39 insertions(+), 9 deletions(-)

diff --git a/app/app.py b/app/app.py
index e19cf6c..d865f4e 100644
--- a/app/app.py
+++ b/app/app.py
@@ -507,11 +507,9 @@ def create_app(args):
               id: translate
               type: object
               properties:
-                translatedText:
-                  oneOf:
-                    - type: string
-                    - type: array
-                  description: Translated text(s)
+                translatedFileUrl:
+                  type: string
+                  description: Translated file url
           400:
             description: Invalid request
             schema:
@@ -588,7 +586,7 @@ def create_app(args):
             translated_filename = os.path.basename(translated_file_path)
             return jsonify(
                 {
-                    "translatedFileUrl": url_for('download_file', filename=translated_filename)
+                    "translatedFileUrl": url_for('download_file', filename=translated_filename, _external=True)
                 }
             )
         except Exception as e:
diff --git a/app/static/js/app.js b/app/static/js/app.js
index 29c3bd9..a9ce59d 100644
--- a/app/static/js/app.js
+++ b/app/static/js/app.js
@@ -35,6 +35,7 @@ document.addEventListener('DOMContentLoaded', function(){
             translationType: "text",
             inputFile: false,
             loadingFileTranslation: false,
+            translatedFileUrl: "",
         },
         mounted: function(){
             var self = this;
@@ -317,10 +318,13 @@ document.addEventListener('DOMContentLoaded', function(){
             removeFile: function(e) {
               e.preventDefault()
               this.inputFile = false;
+              this.translatedFileUrl = "";
+              this.loadingFileTranslation = false;
             },
             translateFile: function(e) {
                 e.preventDefault();
 
+                let self = this;
                 let translateFileRequest = new XMLHttpRequest();
 
                 translateFileRequest.open("POST", BaseUrl + "/translate_file", true);
@@ -333,12 +337,39 @@ document.addEventListener('DOMContentLoaded', function(){
 
                 this.loadingFileTranslation = true
 
-                translateFileRequest.onload = () => {
+                translateFileRequest.onload = function()  {
                     if (translateFileRequest.readyState === 4 && translateFileRequest.status === 200) {
-                        this.loadingFileTranslation = false
+                        try{
+                            self.loadingFileTranslation = false;
+
+                            let res = JSON.parse(this.response);
+                            if (res.translatedFileUrl){
+                                self.translatedFileUrl = res.translatedFileUrl;
+
+                                let link = document.createElement("a");
+                                link.target = "_blank";
+                                link.href = self.translatedFileUrl;
+                                link.click();
+                            }else{
+                                throw new Error(res.error || "Unknown error");
+                            }
+
+                        }catch(e){
+                            self.error = e.message;
+                            self.loadingFileTranslation = false;
+                            self.inputFile = false;
+                        }
                     }
                 }
 
+
+
+                translateFileRequest.onerror = function() {
+                    self.error = "Error while calling /translate_file";
+                    self.loadingFileTranslation = false;
+                    self.inputFile = false;
+                };
+
                 translateFileRequest.send(data);
             }
         }
diff --git a/app/templates/index.html b/app/templates/index.html
index 37f1144..3742ec1 100644
--- a/app/templates/index.html
+++ b/app/templates/index.html
@@ -203,7 +203,8 @@
                                             </div>
                                         </div>
                                     </div>
-                                    <button @click="translateFile" v-if="loadingFileTranslation === false" class="btn">Translate</button>
+                                    <button @click="translateFile" v-if="translatedFileUrl === '' && loadingFileTranslation === false" class="btn">Translate</button>
+                                    <a v-if="translatedFileUrl !== ''" :href="translatedFileUrl" class="btn">Download</a>
                                     <div class="progress" v-if="loadingFileTranslation">
                                         <div class="indeterminate"></div>
                                     </div>
-- 
GitLab