From 45e8f99e753cc02ec105e6f4d7fe026a205724f8 Mon Sep 17 00:00:00 2001
From: Yassine Doghri <yassine@doghri.fr>
Date: Fri, 28 Jan 2022 10:31:30 +0000
Subject: [PATCH] fix(migrations): ignore invalid utf8 chars for media files
 metadata + update transcript parser

check that transcript parser constants are defined before declaring them
---
 app/Entities/Media/BaseMedia.php   |  2 +-
 app/Entities/Media/Image.php       |  2 +-
 app/Entities/Media/Transcript.php  |  2 +-
 app/Libraries/TranscriptParser.php | 19 +++++++++++++++----
 4 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/app/Entities/Media/BaseMedia.php b/app/Entities/Media/BaseMedia.php
index 6417095cce..c348b250a7 100644
--- a/app/Entities/Media/BaseMedia.php
+++ b/app/Entities/Media/BaseMedia.php
@@ -88,7 +88,7 @@ class BaseMedia extends Entity
 
         $this->attributes['type'] = $this->type;
         $this->attributes['file_mimetype'] = $file->getMimeType();
-        $this->attributes['file_metadata'] = json_encode(lstat((string) $file));
+        $this->attributes['file_metadata'] = json_encode(lstat((string) $file), JSON_INVALID_UTF8_IGNORE);
         $this->attributes['file_path'] = save_media(
             $file,
             $this->attributes['file_directory'],
diff --git a/app/Entities/Media/Image.php b/app/Entities/Media/Image.php
index 833670fec2..68b2d47909 100644
--- a/app/Entities/Media/Image.php
+++ b/app/Entities/Media/Image.php
@@ -61,7 +61,7 @@ class Image extends BaseMedia
             ];
         }
 
-        $this->attributes['file_metadata'] = json_encode($metadata);
+        $this->attributes['file_metadata'] = json_encode($metadata, JSON_INVALID_UTF8_IGNORE);
 
         $this->initFileProperties();
         $this->saveSizes();
diff --git a/app/Entities/Media/Transcript.php b/app/Entities/Media/Transcript.php
index 4221253cc8..8dc8ce1226 100644
--- a/app/Entities/Media/Transcript.php
+++ b/app/Entities/Media/Transcript.php
@@ -58,7 +58,7 @@ class Transcript extends BaseMedia
             $metadata['json_path'] = $jsonFilePath;
         }
 
-        $this->attributes['file_metadata'] = json_encode($metadata);
+        $this->attributes['file_metadata'] = json_encode($metadata, JSON_INVALID_UTF8_IGNORE);
 
         return $this;
     }
diff --git a/app/Libraries/TranscriptParser.php b/app/Libraries/TranscriptParser.php
index 8eaa1e8761..fe316b2136 100644
--- a/app/Libraries/TranscriptParser.php
+++ b/app/Libraries/TranscriptParser.php
@@ -30,10 +30,21 @@ class TranscriptParser
      */
     public function parseSrt(): string | false
     {
-        define('SRT_STATE_SUBNUMBER', 0);
-        define('SRT_STATE_TIME', 1);
-        define('SRT_STATE_TEXT', 2);
-        define('SRT_STATE_BLANK', 3);
+        if (! defined('SRT_STATE_SUBNUMBER')) {
+            define('SRT_STATE_SUBNUMBER', 0);
+        }
+
+        if (! defined('SRT_STATE_TIME')) {
+            define('SRT_STATE_TIME', 1);
+        }
+
+        if (! defined('SRT_STATE_TEXT')) {
+            define('SRT_STATE_TEXT', 2);
+        }
+
+        if (! defined('SRT_STATE_BLANK')) {
+            define('SRT_STATE_BLANK', 3);
+        }
 
         $subs = [];
         $state = SRT_STATE_SUBNUMBER;
-- 
GitLab