]> cat aescling's git repositories - mastodon.git/commitdiff
Fix OCR failure when erroneous lang data is in cache (#16386)
authorClaire <claire.github-309c@sitedethib.com>
Tue, 15 Jun 2021 20:11:07 +0000 (22:11 +0200)
committerGitHub <noreply@github.com>
Tue, 15 Jun 2021 20:11:07 +0000 (22:11 +0200)
Fixes #15472

If the Tesseract worker fails at any point, re-try with cache settings that
overwrite the cache. It is difficult to catch more precise errors as those
are pretty opaque and do not occur when loading lang data but when trying to
detect text.

app/javascript/mastodon/features/ui/components/focal_point_modal.js

index 3457b76330cd19eaa12cbd2ebc28efb9813e33fc..edeb281e96d951fc707c416a672f33d7aa882906 100644 (file)
@@ -219,6 +219,10 @@ class FocalPointModal extends ImmutablePureComponent {
   }
 
   handleTextDetection = () => {
+    this._detectText();
+  }
+
+  _detectText = (refreshCache = false) => {
     const { media } = this.props;
 
     this.setState({ detecting: true });
@@ -235,6 +239,7 @@ class FocalPointModal extends ImmutablePureComponent {
             this.setState({ ocrStatus: 'preparing', progress });
           }
         },
+        cacheMethod: refreshCache ? 'refresh' : 'write',
       });
 
       let media_url = media.get('url');
@@ -247,14 +252,20 @@ class FocalPointModal extends ImmutablePureComponent {
         }
       }
 
-      (async () => {
+      return (async () => {
         await worker.load();
         await worker.loadLanguage('eng');
         await worker.initialize('eng');
         const { data: { text } } = await worker.recognize(media_url);
         this.setState({ description: removeExtraLineBreaks(text), dirty: true, detecting: false });
         await worker.terminate();
-      })();
+      })().catch((e) => {
+        if (refreshCache) {
+          throw e;
+        } else {
+          this._detectText(true);
+        }
+      });
     }).catch((e) => {
       console.error(e);
       this.setState({ detecting: false });