From 91c71f968a02640f6d30be97d63aa4fc1e6477c8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lars=20W=C3=A4chter?= <lars.waechter@mni.thm.de>
Date: Wed, 23 Jun 2021 21:19:02 +0200
Subject: [PATCH] Save language detected from LanguageTool

---
 .../create-comment.component.ts               |  4 +++
 .../spacy-dialog/spacy-dialog.component.ts    |  6 ++--
 src/app/models/comment.ts                     |  6 +++-
 src/app/services/http/comment.service.ts      |  3 +-
 src/app/services/http/languagetool.service.ts | 34 +++++++++++++++++--
 5 files changed, 46 insertions(+), 7 deletions(-)

diff --git a/src/app/components/shared/_dialogs/create-comment/create-comment.component.ts b/src/app/components/shared/_dialogs/create-comment/create-comment.component.ts
index 4c59942a4..cf2935311 100644
--- a/src/app/components/shared/_dialogs/create-comment/create-comment.component.ts
+++ b/src/app/components/shared/_dialogs/create-comment/create-comment.component.ts
@@ -121,6 +121,10 @@ export class CreateCommentComponent implements OnInit, OnDestroy {
       .subscribe((result) => {
         if (result.isAcceptable) {
           const commentLang = this.languagetoolService.mapLanguageToSpacyModel(result.result.language.code as Language);
+          // Store language if it was auto-detected
+          if(this.selectedLang === 'auto') {
+            comment.language = commentLang;
+          }
           const dialogRef = this.dialog.open(SpacyDialogComponent, {
             data: {
               comment,
diff --git a/src/app/components/shared/_dialogs/spacy-dialog/spacy-dialog.component.ts b/src/app/components/shared/_dialogs/spacy-dialog/spacy-dialog.component.ts
index e9135039b..bbfb8714b 100644
--- a/src/app/components/shared/_dialogs/spacy-dialog/spacy-dialog.component.ts
+++ b/src/app/components/shared/_dialogs/spacy-dialog/spacy-dialog.component.ts
@@ -4,7 +4,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
 import { CleaningFunctionService} from '../../../../services/util/cleaning-function.service';
 import { CreateCommentComponent } from '../create-comment/create-comment.component';
 import { SpacyService, Model } from '../../../../services/http/spacy.service';
-import { LanguageService } from '../../../../services/util/language.service';
+import { LanguagetoolService } from '../../../..//services/http/languagetool.service';
 import { Comment } from '../../../../models/comment';
 import { map } from 'rxjs/operators';
 
@@ -32,7 +32,7 @@ export class SpacyDialogComponent implements OnInit, AfterContentInit {
   manualKeywords = '';
 
   constructor(
-    protected langService: LanguageService,
+    protected langService: LanguagetoolService,
     private spacyService: SpacyService,
     private cleaningService: CleaningFunctionService,
     public dialogRef: MatDialogRef<CreateCommentComponent>,
@@ -43,7 +43,7 @@ export class SpacyDialogComponent implements OnInit, AfterContentInit {
     this.comment = this.data.comment;
     this.commentLang = this.data.commentLang;
     this.commentBodyChecked = this.data.commentBodyChecked;
-    this.langSupported = this.commentLang !== 'auto';
+    this.langSupported = this.langService.isSupportedLanguage(this.data.commentLang);
   }
 
   ngAfterContentInit(): void {
diff --git a/src/app/models/comment.ts b/src/app/models/comment.ts
index 31f2711c1..f2388d55c 100644
--- a/src/app/models/comment.ts
+++ b/src/app/models/comment.ts
@@ -1,4 +1,5 @@
 import { dashCaseToCamelCase } from '@angular/compiler/src/util';
+import { Model } from '../services/http/spacy.service';
 import { CorrectWrong } from './correct-wrong.enum';
 
 export class Comment {
@@ -24,6 +25,7 @@ export class Comment {
   keywordsFromSpacy: string[];
   upvotes: number;
   downvotes: number;
+  language: Model;
 
   constructor(roomId: string = '',
               creatorId: string = '',
@@ -43,7 +45,8 @@ export class Comment {
               keywordsFromQuestioner: string[] = [],
               keywordsFromSpacy: string[] = [],
               upvotes = 0,
-              downvotes = 0) {
+              downvotes = 0,
+              language: Model = 'auto') {
     this.id = '';
     this.roomId = roomId;
     this.creatorId = creatorId;
@@ -65,5 +68,6 @@ export class Comment {
     this.keywordsFromSpacy = keywordsFromSpacy;
     this.upvotes = upvotes;
     this.downvotes = downvotes;
+    this.language = language;
   }
 }
diff --git a/src/app/services/http/comment.service.ts b/src/app/services/http/comment.service.ts
index 835a6ca0e..3dfd86cdb 100644
--- a/src/app/services/http/comment.service.ts
+++ b/src/app/services/http/comment.service.ts
@@ -86,7 +86,8 @@ export class CommentService extends BaseHttpService {
         roomId: comment.roomId, body: comment.body,
         read: comment.read, creationTimestamp: comment.timestamp, tag: comment.tag,
         keywordsFromSpacy: JSON.stringify(comment.keywordsFromSpacy),
-        keywordsFromQuestioner: JSON.stringify(comment.keywordsFromQuestioner)
+        keywordsFromQuestioner: JSON.stringify(comment.keywordsFromQuestioner),
+        language: comment.language
       }, httpOptions).pipe(
       tap(_ => ''),
       catchError(this.handleError<Comment>('addComment'))
diff --git a/src/app/services/http/languagetool.service.ts b/src/app/services/http/languagetool.service.ts
index 0305c5811..5a3fea983 100644
--- a/src/app/services/http/languagetool.service.ts
+++ b/src/app/services/http/languagetool.service.ts
@@ -5,7 +5,14 @@ import { catchError } from 'rxjs/operators';
 import { Model } from './spacy.service';
 import { Observable } from 'rxjs';
 
-export type Language = 'de-DE' | 'en-US' | 'fr' | 'auto';
+export type Language =  'de' | 'de-AT' | 'de-CH' | 'de-DE' |
+                        'en' | 'en-AU' | 'en-CA' | 'en-GB' | 'en-US' |
+                        'fr' |
+                        'es' |
+                        'it' |
+                        'nl' | 'nl-BE' |
+                        'pt' | 'pt-BR' | 'pt-PT' |
+                        'auto';
 
 export interface LanguagetoolResult {
   software: {
@@ -75,17 +82,40 @@ export class LanguagetoolService extends BaseHttpService {
 
   mapLanguageToSpacyModel(language: Language): Model {
     switch (language) {
+      case 'de':
+      case 'de-AT':
+      case 'de-CH':
       case 'de-DE':
         return 'de';
+      case 'en':
+      case 'en-AU':
+      case 'en-CA':
+      case 'en-GB':
       case 'en-US':
         return 'en';
+      case 'es':
+        return 'es';
       case 'fr':
-        return 'fr';
+          return 'fr';
+      case 'it':
+        return 'it';
+      case 'nl':
+      case 'nl-BE':
+        return 'nl';
+      case 'pt':
+      case 'pt-BR':
+      case 'pt-PT':
+        return 'pt';
       default:
         return 'auto';
     }
   }
 
+  isSupportedLanguage(language: Language) {
+    const supportedLanguages: Model[] = ['de', 'en', 'fr'];
+    return supportedLanguages.includes(this.mapLanguageToSpacyModel(language));
+  }
+
   checkSpellings(text: string, language: Language): Observable<LanguagetoolResult> {
     const url = '/languagetool';
     return this.http.get<LanguagetoolResult>(url, {
-- 
GitLab